[{"data":1,"prerenderedAt":173161},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch19-yi-dong-duan-ji-chu-qian-zhui-xian-zhuang-yu-shi-kou":3,"wiki-doc-nav":254},{"id":4,"title":5,"body":6,"description":246,"extension":247,"meta":248,"navigation":249,"path":250,"seo":251,"stem":252,"__hash__":253},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":8,"toc":234},"minimark",[9,13,18,23,27,31,34,37,40,44,47,52,55,59,62,66,82,86,131,134,137,155,159,164,167,170,174,177,180,202,206,209,223,227,230],[10,11,5],"h1",{"id":12},"_19-移动端基础-前缀现状与视口",[14,15,17],"h2",{"id":16},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[19,20],"img",{"style":21,"src":22},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[24,25,26],"p",{},"意思就是加个前缀，增加兼容性",[14,28,30],{"id":29},"_192-移动端现状认识","19.2 移动端现状认识",[19,32],{"style":21,"src":33},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[24,35,36],{},"调试方法：",[19,38],{"style":21,"src":39},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,41,43],{"id":42},"_193-视口","19.3 视口",[24,45,46],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[48,49,51],"h3",{"id":50},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[19,53],{"style":21,"src":54},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[48,56,58],{"id":57},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[19,60],{"style":21,"src":61},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[48,63,65],{"id":64},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[67,68,69,73,76,79],"ul",{},[70,71,72],"li",{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[70,74,75],{},"理想视口，对设备来讲，是最理想的视口尺寸",[70,77,78],{},"需要手动添写meta视口标签通知浏览器操作",[70,80,81],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[48,83,85],{"id":84},"_1934-meta视口标签","19.3.4 meta视口标签",[87,88,93],"pre",{"className":89,"code":90,"language":91,"meta":92,"style":92},"language-Html shiki shiki-themes github-light github-dark","\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n","Html","",[94,95,96],"code",{"__ignoreMap":92},[97,98,101,105,109,113,116,120,123,125,128],"span",{"class":99,"line":100},"line",1,[97,102,104],{"class":103},"sVt8B","\u003C",[97,106,108],{"class":107},"s9eBZ","meta",[97,110,112],{"class":111},"sScJk"," name",[97,114,115],{"class":103},"=",[97,117,119],{"class":118},"sZZnC","\"viewport\"",[97,121,122],{"class":111}," content",[97,124,115],{"class":103},[97,126,127],{"class":118},"\"width=device-width, initial-scale=1.0\"",[97,129,130],{"class":103},">\n",[19,132],{"style":21,"src":133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[24,135,136],{},"标准视口设置：",[138,139,140,143,146,149,152],"ol",{},[70,141,142],{},"视口宽度和设备保持一致",[70,144,145],{},"视口的默认缩放比例1.0",[70,147,148],{},"不允许用户自行缩放",[70,150,151],{},"最大允许的缩放比例1.0",[70,153,154],{},"最小允许的缩放比例1.0",[48,156,158],{"id":157},"_1935-二倍图","19.3.5 二倍图",[160,161,163],"h4",{"id":162},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[19,165],{"style":21,"src":166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[19,168],{"style":21,"src":169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[160,171,173],{"id":172},"_19352-多倍图","19.3.5.2 多倍图",[19,175],{"style":21,"src":176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[24,178,179],{},"二倍图法，代码如下：",[87,181,185],{"className":182,"code":183,"language":184,"meta":92,"style":92},"language-Css shiki shiki-themes github-light github-dark","\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n","Css",[94,186,187,193],{"__ignoreMap":92},[97,188,189],{"class":99,"line":100},[97,190,192],{"class":191},"sJ8bj","\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[97,194,196,199],{"class":99,"line":195},2,[97,197,198],{"class":107},"background-size",[97,200,201],{"class":103},": 50% 50%;\n",[160,203,205],{"id":204},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[19,207],{"style":21,"src":208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[138,210,211,214,217,220],{},[70,212,213],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[70,215,216],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[70,218,219],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[70,221,222],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[160,224,226],{"id":225},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[19,228],{"style":21,"src":229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[231,232,233],"style",{},"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":92,"searchDepth":195,"depth":195,"links":235},[236,237,238],{"id":16,"depth":195,"text":17},{"id":29,"depth":195,"text":30},{"id":42,"depth":195,"text":43,"children":239},[240,242,243,244,245],{"id":50,"depth":241,"text":51},3,{"id":57,"depth":241,"text":58},{"id":64,"depth":241,"text":65},{"id":84,"depth":241,"text":85},{"id":157,"depth":241,"text":158},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":5,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",[255,5353,6461,7881,10870,12221,13710,14799,23560,23572,24171,24197,24321,24562,24627,24645,24658,24705,24829,24998,25197,25377,25582,25718,25813,25850,25863,26173,26914,27622,27643,28663,30294,30445,30458,30470,30771,50583,50598,50615,50648,53514,76862,93007,93028,93141,93262,94032,94695,95056,95094,95200,95300,95343,95369,95430,97084,97185,97210,97701,98201,99281,99564,100306,100808,100820,102836,104500,106003,107701,109618,111537,113559,117029,117461,117924,118673,121617,121965,121987,122343,125650,125662,126065,126088,126235,126402,126606,126905,127462,128117,130048,131646,132295,133789,135220,136455,138149,139901,142311,142427,143362,143508,144393,145628,145856,145869,147024,149436,151804,155125,157602,159246,161023,163036,166088,168268,170795,172989],{"id":256,"title":257,"body":258,"description":92,"extension":247,"meta":5348,"navigation":249,"path":5349,"seo":5350,"stem":5351,"__hash__":5352},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":259,"toc":5320},[260,263,267,270,274,285,289,293,296,299,302,305,308,337,341,344,347,350,353,404,408,426,428,442,445,453,456,1318,1325,1341,1345,1435,1439,1445,1534,1538,1576,1580,1644,1648,1652,1658,1669,1673,1678,1682,1687,1691,1696,1700,1704,1709,1979,1984,2122,2127,2383,2386,2394,2398,2403,2506,2509,2815,2824,2925,2928,2931,2934,2937,3197,3202,3342,3345,3524,3527,3655,3658,3810,3814,3819,3822,3833,3841,3844,3951,3955,3959,3964,4014,4019,4024,4048,4053,4106,4109,4114,4291,4296,4581,4586,4983,4987,4992,5049,5054,5062,5065,5205,5208,5317],[10,261,257],{"id":262},"_1基础入门",[14,264,266],{"id":265},"_11注释","1.1注释",[24,268,269],{},"\u002F\u002F或者\u002F* *\u002F",[14,271,273],{"id":272},"_12命名","1.2命名",[138,275,276,279,282],{},[70,277,278],{},"字母数字下划线",[70,280,281],{},"开头必须是字母或_",[70,283,284],{},"不能使用关键词",[14,286,288],{"id":287},"_13数据类型","1.3数据类型",[48,290,292],{"id":291},"_131整形","1.3.1整形",[24,294,295],{},"short 短整形 2",[24,297,298],{},"int 整形 4",[24,300,301],{},"long 长整形 win4 linux32位4 linux64位8",[24,303,304],{},"long long 长长整形 8",[24,306,307],{},"利用sizeof可以求数据类型占用的内存空间大小",[87,309,313],{"className":310,"code":311,"language":312,"meta":92,"style":92},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[94,314,315,330],{"__ignoreMap":92},[97,316,317,321,324,327],{"class":99,"line":100},[97,318,320],{"class":319},"szBVR","sizeof",[97,322,323],{"class":103},"(",[97,325,326],{"class":319},"int",[97,328,329],{"class":103},")\n",[97,331,332,334],{"class":99,"line":195},[97,333,320],{"class":319},[97,335,336],{"class":103},"(num)\n",[48,338,340],{"id":339},"_132浮点型","1.3.2浮点型",[24,342,343],{},"float 单精度 4节 7位有效数字",[24,345,346],{},"double 双精度 8节 15-16有效数字",[24,348,349],{},"默认情况下，输出一个小数，会显示6位有效数字",[24,351,352],{},"注意点：",[87,354,356],{"className":310,"code":355,"language":312,"meta":92,"style":92},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[94,357,358,381],{"__ignoreMap":92},[97,359,360,363,366,368,372,375,378],{"class":99,"line":100},[97,361,362],{"class":319},"float",[97,364,365],{"class":103}," f1",[97,367,115],{"class":319},[97,369,371],{"class":370},"sj4cs","3.14",[97,373,374],{"class":319},"f",[97,376,377],{"class":103},";",[97,379,380],{"class":191}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[97,382,383,385,388,390,393,396,399,401],{"class":99,"line":195},[97,384,362],{"class":319},[97,386,387],{"class":103}," f2",[97,389,115],{"class":319},[97,391,392],{"class":370},"3",[97,394,395],{"class":319},"e",[97,397,398],{"class":370},"2",[97,400,377],{"class":103},[97,402,403],{"class":191}," \u002F\u002F科学记数法\n",[48,405,407],{"id":406},"_133字符型","1.3.3字符型",[87,409,411],{"className":310,"code":410,"language":312,"meta":92,"style":92},"char ch='a'\n",[94,412,413],{"__ignoreMap":92},[97,414,415,418,421,423],{"class":99,"line":100},[97,416,417],{"class":319},"char",[97,419,420],{"class":103}," ch",[97,422,115],{"class":319},[97,424,425],{"class":118},"'a'\n",[24,427,352],{},[138,429,430,433,436,439],{},[70,431,432],{},"在显示字符型变量时，只能单引号，双引号x",[70,434,435],{},"单引号内只能一个字符，不能字符串",[70,437,438],{},"c和c++字符型变量只占用一个字符",[70,440,441],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[24,443,444],{},"ASCII码大致由以下两部分组成：",[138,446,447,450],{},[70,448,449],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[70,451,452],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[24,454,455],{},"ASCII码表格：",[457,458,459,503],"table",{},[460,461,462],"thead",{},[463,464,465,473,478,482,487,491,495,499],"tr",{},[466,467,468,472],"th",{},[469,470,471],"strong",{},"ASCII","值",[466,474,475],{},[469,476,477],{},"控制字符",[466,479,480,472],{},[469,481,471],{},[466,483,484],{},[469,485,486],{},"字符",[466,488,489,472],{},[469,490,471],{},[466,492,493],{},[469,494,486],{},[466,496,497,472],{},[469,498,471],{},[466,500,501],{},[469,502,486],{},[504,505,506,533,559,584,609,635,660,685,711,736,762,788,814,839,865,891,917,941,966,991,1016,1041,1066,1091,1116,1141,1166,1192,1217,1241,1266,1292],"tbody",{},[463,507,508,512,515,518,521,524,527,530],{},[509,510,511],"td",{},"0",[509,513,514],{},"NUT",[509,516,517],{},"32",[509,519,520],{},"(space)",[509,522,523],{},"64",[509,525,526],{},"@",[509,528,529],{},"96",[509,531,532],{},"、",[463,534,535,538,541,544,547,550,553,556],{},[509,536,537],{},"1",[509,539,540],{},"SOH",[509,542,543],{},"33",[509,545,546],{},"!",[509,548,549],{},"65",[509,551,552],{},"A",[509,554,555],{},"97",[509,557,558],{},"a",[463,560,561,563,566,569,572,575,578,581],{},[509,562,398],{},[509,564,565],{},"STX",[509,567,568],{},"34",[509,570,571],{},"\"",[509,573,574],{},"66",[509,576,577],{},"B",[509,579,580],{},"98",[509,582,583],{},"b",[463,585,586,588,591,594,597,600,603,606],{},[509,587,392],{},[509,589,590],{},"ETX",[509,592,593],{},"35",[509,595,596],{},"#",[509,598,599],{},"67",[509,601,602],{},"C",[509,604,605],{},"99",[509,607,608],{},"c",[463,610,611,614,617,620,623,626,629,632],{},[509,612,613],{},"4",[509,615,616],{},"EOT",[509,618,619],{},"36",[509,621,622],{},"$",[509,624,625],{},"68",[509,627,628],{},"D",[509,630,631],{},"100",[509,633,634],{},"d",[463,636,637,640,643,646,649,652,655,658],{},[509,638,639],{},"5",[509,641,642],{},"ENQ",[509,644,645],{},"37",[509,647,648],{},"%",[509,650,651],{},"69",[509,653,654],{},"E",[509,656,657],{},"101",[509,659,395],{},[463,661,662,665,668,671,674,677,680,683],{},[509,663,664],{},"6",[509,666,667],{},"ACK",[509,669,670],{},"38",[509,672,673],{},"&",[509,675,676],{},"70",[509,678,679],{},"F",[509,681,682],{},"102",[509,684,374],{},[463,686,687,690,693,696,699,702,705,708],{},[509,688,689],{},"7",[509,691,692],{},"BEL",[509,694,695],{},"39",[509,697,698],{},",",[509,700,701],{},"71",[509,703,704],{},"G",[509,706,707],{},"103",[509,709,710],{},"g",[463,712,713,716,719,722,724,727,730,733],{},[509,714,715],{},"8",[509,717,718],{},"BS",[509,720,721],{},"40",[509,723,323],{},[509,725,726],{},"72",[509,728,729],{},"H",[509,731,732],{},"104",[509,734,735],{},"h",[463,737,738,741,744,747,750,753,756,759],{},[509,739,740],{},"9",[509,742,743],{},"HT",[509,745,746],{},"41",[509,748,749],{},")",[509,751,752],{},"73",[509,754,755],{},"I",[509,757,758],{},"105",[509,760,761],{},"i",[463,763,764,767,770,773,776,779,782,785],{},[509,765,766],{},"10",[509,768,769],{},"LF",[509,771,772],{},"42",[509,774,775],{},"*",[509,777,778],{},"74",[509,780,781],{},"J",[509,783,784],{},"106",[509,786,787],{},"j",[463,789,790,793,796,799,802,805,808,811],{},[509,791,792],{},"11",[509,794,795],{},"VT",[509,797,798],{},"43",[509,800,801],{},"+",[509,803,804],{},"75",[509,806,807],{},"K",[509,809,810],{},"107",[509,812,813],{},"k",[463,815,816,819,822,825,827,830,833,836],{},[509,817,818],{},"12",[509,820,821],{},"FF",[509,823,824],{},"44",[509,826,698],{},[509,828,829],{},"76",[509,831,832],{},"L",[509,834,835],{},"108",[509,837,838],{},"l",[463,840,841,844,847,850,853,856,859,862],{},[509,842,843],{},"13",[509,845,846],{},"CR",[509,848,849],{},"45",[509,851,852],{},"-",[509,854,855],{},"77",[509,857,858],{},"M",[509,860,861],{},"109",[509,863,864],{},"m",[463,866,867,870,873,876,879,882,885,888],{},[509,868,869],{},"14",[509,871,872],{},"SO",[509,874,875],{},"46",[509,877,878],{},".",[509,880,881],{},"78",[509,883,884],{},"N",[509,886,887],{},"110",[509,889,890],{},"n",[463,892,893,896,899,902,905,908,911,914],{},[509,894,895],{},"15",[509,897,898],{},"SI",[509,900,901],{},"47",[509,903,904],{},"\u002F",[509,906,907],{},"79",[509,909,910],{},"O",[509,912,913],{},"111",[509,915,916],{},"o",[463,918,919,922,925,928,930,933,936,939],{},[509,920,921],{},"16",[509,923,924],{},"DLE",[509,926,927],{},"48",[509,929,511],{},[509,931,932],{},"80",[509,934,935],{},"P",[509,937,938],{},"112",[509,940,24],{},[463,942,943,946,949,952,954,957,960,963],{},[509,944,945],{},"17",[509,947,948],{},"DCI",[509,950,951],{},"49",[509,953,537],{},[509,955,956],{},"81",[509,958,959],{},"Q",[509,961,962],{},"113",[509,964,965],{},"q",[463,967,968,971,974,977,979,982,985,988],{},[509,969,970],{},"18",[509,972,973],{},"DC2",[509,975,976],{},"50",[509,978,398],{},[509,980,981],{},"82",[509,983,984],{},"R",[509,986,987],{},"114",[509,989,990],{},"r",[463,992,993,996,999,1002,1004,1007,1010,1013],{},[509,994,995],{},"19",[509,997,998],{},"DC3",[509,1000,1001],{},"51",[509,1003,392],{},[509,1005,1006],{},"83",[509,1008,1009],{},"S",[509,1011,1012],{},"115",[509,1014,1015],{},"s",[463,1017,1018,1021,1024,1027,1029,1032,1035,1038],{},[509,1019,1020],{},"20",[509,1022,1023],{},"DC4",[509,1025,1026],{},"52",[509,1028,613],{},[509,1030,1031],{},"84",[509,1033,1034],{},"T",[509,1036,1037],{},"116",[509,1039,1040],{},"t",[463,1042,1043,1046,1049,1052,1054,1057,1060,1063],{},[509,1044,1045],{},"21",[509,1047,1048],{},"NAK",[509,1050,1051],{},"53",[509,1053,639],{},[509,1055,1056],{},"85",[509,1058,1059],{},"U",[509,1061,1062],{},"117",[509,1064,1065],{},"u",[463,1067,1068,1071,1074,1077,1079,1082,1085,1088],{},[509,1069,1070],{},"22",[509,1072,1073],{},"SYN",[509,1075,1076],{},"54",[509,1078,664],{},[509,1080,1081],{},"86",[509,1083,1084],{},"V",[509,1086,1087],{},"118",[509,1089,1090],{},"v",[463,1092,1093,1096,1099,1102,1104,1107,1110,1113],{},[509,1094,1095],{},"23",[509,1097,1098],{},"TB",[509,1100,1101],{},"55",[509,1103,689],{},[509,1105,1106],{},"87",[509,1108,1109],{},"W",[509,1111,1112],{},"119",[509,1114,1115],{},"w",[463,1117,1118,1121,1124,1127,1129,1132,1135,1138],{},[509,1119,1120],{},"24",[509,1122,1123],{},"CAN",[509,1125,1126],{},"56",[509,1128,715],{},[509,1130,1131],{},"88",[509,1133,1134],{},"X",[509,1136,1137],{},"120",[509,1139,1140],{},"x",[463,1142,1143,1146,1149,1152,1154,1157,1160,1163],{},[509,1144,1145],{},"25",[509,1147,1148],{},"EM",[509,1150,1151],{},"57",[509,1153,740],{},[509,1155,1156],{},"89",[509,1158,1159],{},"Y",[509,1161,1162],{},"121",[509,1164,1165],{},"y",[463,1167,1168,1171,1174,1177,1180,1183,1186,1189],{},[509,1169,1170],{},"26",[509,1172,1173],{},"SUB",[509,1175,1176],{},"58",[509,1178,1179],{},":",[509,1181,1182],{},"90",[509,1184,1185],{},"Z",[509,1187,1188],{},"122",[509,1190,1191],{},"z",[463,1193,1194,1197,1200,1203,1205,1208,1211,1214],{},[509,1195,1196],{},"27",[509,1198,1199],{},"ESC",[509,1201,1202],{},"59",[509,1204,377],{},[509,1206,1207],{},"91",[509,1209,1210],{},"[",[509,1212,1213],{},"123",[509,1215,1216],{},"{",[463,1218,1219,1222,1225,1228,1230,1233,1235,1238],{},[509,1220,1221],{},"28",[509,1223,1224],{},"FS",[509,1226,1227],{},"60",[509,1229,104],{},[509,1231,1232],{},"92",[509,1234,904],{},[509,1236,1237],{},"124",[509,1239,1240],{},"|",[463,1242,1243,1246,1249,1252,1254,1257,1260,1263],{},[509,1244,1245],{},"29",[509,1247,1248],{},"GS",[509,1250,1251],{},"61",[509,1253,115],{},[509,1255,1256],{},"93",[509,1258,1259],{},"]",[509,1261,1262],{},"125",[509,1264,1265],{},"}",[463,1267,1268,1271,1274,1277,1280,1283,1286,1289],{},[509,1269,1270],{},"30",[509,1272,1273],{},"RS",[509,1275,1276],{},"62",[509,1278,1279],{},">",[509,1281,1282],{},"94",[509,1284,1285],{},"^",[509,1287,1288],{},"126",[509,1290,1291],{},"`",[463,1293,1294,1297,1300,1303,1306,1309,1312,1315],{},[509,1295,1296],{},"31",[509,1298,1299],{},"US",[509,1301,1302],{},"63",[509,1304,1305],{},"?",[509,1307,1308],{},"95",[509,1310,1311],{},"_",[509,1313,1314],{},"127",[509,1316,1317],{},"DEL",[24,1319,1320,1321,1324],{},"ASCII 码大致由以下",[469,1322,1323],{},"两部分组","成：",[67,1326,1327,1334],{},[70,1328,1329,1330,1333],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[469,1331,1332],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[70,1335,1336,1337,1340],{},"ASCII 打印字符：数字 ",[469,1338,1339],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[48,1342,1344],{"id":1343},"_134转义字符","1.3.4转义字符",[87,1346,1348],{"className":310,"code":1347,"language":312,"meta":92,"style":92},"\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",[94,1349,1350,1355,1371,1385,1391,1405,1411],{"__ignoreMap":92},[97,1351,1352],{"class":99,"line":100},[97,1353,1354],{"class":191},"\u002F\u002F换行符\n",[97,1356,1357,1360,1363,1366,1368],{"class":99,"line":195},[97,1358,1359],{"class":103},"cout ",[97,1361,1362],{"class":319},"\u003C\u003C",[97,1364,1365],{"class":118},"\"hello world\u002Fn\"",[97,1367,377],{"class":103},[97,1369,1370],{"class":191}," \u002F\u002F就等同于如下：\n",[97,1372,1373,1375,1377,1380,1382],{"class":99,"line":241},[97,1374,1359],{"class":103},[97,1376,1362],{"class":319},[97,1378,1379],{"class":118},"\"hello world\"",[97,1381,1362],{"class":319},[97,1383,1384],{"class":103},"endl;\n",[97,1386,1388],{"class":99,"line":1387},4,[97,1389,1390],{"class":191},"\u002F\u002F反斜杠\n",[97,1392,1394,1396,1398,1401,1403],{"class":99,"line":1393},5,[97,1395,1359],{"class":103},[97,1397,1362],{"class":319},[97,1399,1400],{"class":118},"\"\u002F\u002F\"",[97,1402,1362],{"class":319},[97,1404,1384],{"class":103},[97,1406,1408],{"class":99,"line":1407},6,[97,1409,1410],{"class":191},"\u002F\u002F水平制表符\n",[97,1412,1414,1416,1418,1421,1424,1427,1429,1432],{"class":99,"line":1413},7,[97,1415,1359],{"class":103},[97,1417,1362],{"class":319},[97,1419,1420],{"class":118},"\"aaaa",[97,1422,1423],{"class":370},"\\t",[97,1425,1426],{"class":118},"helloworld\"",[97,1428,1362],{"class":319},[97,1430,1431],{"class":103},"endl;",[97,1433,1434],{"class":191}," \u002F\u002F输出窗口时有对齐效果\n",[48,1436,1438],{"id":1437},"_135字符串型","1.3.5字符串型",[24,1440,1441,1442,1444],{},"char 变量名",[97,1443],{},"=\"字符串值\"",[87,1446,1448],{"className":310,"code":1447,"language":312,"meta":92,"style":92},"\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",[94,1449,1450,1455,1460,1465,1470,1484,1497,1502,1508,1520],{"__ignoreMap":92},[97,1451,1452],{"class":99,"line":100},[97,1453,1454],{"class":191},"\u002F\u002Fc风格字符串\n",[97,1456,1457],{"class":99,"line":195},[97,1458,1459],{"class":191},"\u002F\u002F注意事项：\n",[97,1461,1462],{"class":99,"line":241},[97,1463,1464],{"class":191},"\u002F\u002F1.char字符串名[]\n",[97,1466,1467],{"class":99,"line":1387},[97,1468,1469],{"class":191},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[97,1471,1472,1474,1477,1479,1481],{"class":99,"line":1393},[97,1473,417],{"class":319},[97,1475,1476],{"class":103}," str[]",[97,1478,115],{"class":319},[97,1480,1379],{"class":118},[97,1482,1483],{"class":103},";\n",[97,1485,1486,1488,1490,1493,1495],{"class":99,"line":1407},[97,1487,1359],{"class":103},[97,1489,1362],{"class":319},[97,1491,1492],{"class":103},"str",[97,1494,1362],{"class":319},[97,1496,1384],{"class":103},[97,1498,1499],{"class":99,"line":1413},[97,1500,1501],{"class":191},"\u002F\u002Fc++风格字符串\n",[97,1503,1505],{"class":99,"line":1504},8,[97,1506,1507],{"class":191},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[97,1509,1511,1514,1516,1518],{"class":99,"line":1510},9,[97,1512,1513],{"class":103},"string str2",[97,1515,115],{"class":319},[97,1517,1379],{"class":118},[97,1519,1483],{"class":103},[97,1521,1523,1525,1527,1530,1532],{"class":99,"line":1522},10,[97,1524,1359],{"class":103},[97,1526,1362],{"class":319},[97,1528,1529],{"class":103},"str2",[97,1531,1362],{"class":319},[97,1533,1384],{"class":103},[48,1535,1537],{"id":1536},"_136布尔类型bool","1.3.6布尔类型bool",[87,1539,1541],{"className":310,"code":1540,"language":312,"meta":92,"style":92},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[94,1542,1543,1558],{"__ignoreMap":92},[97,1544,1545,1548,1551,1553,1556],{"class":99,"line":100},[97,1546,1547],{"class":319},"bool",[97,1549,1550],{"class":103}," flag",[97,1552,115],{"class":319},[97,1554,1555],{"class":370},"true",[97,1557,1483],{"class":103},[97,1559,1560,1563,1566,1569,1571,1573],{"class":99,"line":195},[97,1561,1562],{"class":103},"cout",[97,1564,1565],{"class":319},"\u003C\u003Csizeof",[97,1567,1568],{"class":103},"(flag)",[97,1570,1362],{"class":319},[97,1572,1431],{"class":103},[97,1574,1575],{"class":191}," \u002F\u002F查看布尔占内存空间\n",[14,1577,1579],{"id":1578},"_14键盘输入cin","1.4键盘输入cin",[87,1581,1583],{"className":310,"code":1582,"language":312,"meta":92,"style":92},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[94,1584,1585,1598,1615,1626],{"__ignoreMap":92},[97,1586,1587,1589,1592,1594,1596],{"class":99,"line":100},[97,1588,326],{"class":319},[97,1590,1591],{"class":103}," a",[97,1593,115],{"class":319},[97,1595,511],{"class":370},[97,1597,1483],{"class":103},[97,1599,1600,1602,1604,1607,1609,1611,1613],{"class":99,"line":195},[97,1601,1562],{"class":103},[97,1603,1362],{"class":319},[97,1605,1606],{"class":118},"\"请给整型变量a赋值\"",[97,1608,1362],{"class":319},[97,1610,558],{"class":103},[97,1612,1362],{"class":319},[97,1614,1384],{"class":103},[97,1616,1617,1620,1623],{"class":99,"line":241},[97,1618,1619],{"class":103},"cin ",[97,1621,1622],{"class":319},">>",[97,1624,1625],{"class":103}," a;\n",[97,1627,1628,1630,1632,1635,1638,1640,1642],{"class":99,"line":1387},[97,1629,1359],{"class":103},[97,1631,1362],{"class":319},[97,1633,1634],{"class":118}," \"整型变量a=\"",[97,1636,1637],{"class":319}," \u003C\u003C",[97,1639,558],{"class":103},[97,1641,1362],{"class":319},[97,1643,1384],{"class":103},[14,1645,1647],{"id":1646},"_15运算符","1.5运算符",[48,1649,1651],{"id":1650},"_151算术运算符","1.5.1算术运算符",[24,1653,1654,1657],{},[19,1655],{"alt":92,"src":1656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[138,1659,1660,1663,1666],{},[70,1661,1662],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[70,1664,1665],{},"两个小数不可以做取模运算",[70,1667,1668],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[48,1670,1672],{"id":1671},"_152赋值运算符","1.5.2赋值运算符",[24,1674,1675],{},[19,1676],{"alt":92,"src":1677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[48,1679,1681],{"id":1680},"_153比较运算符","1.5.3比较运算符",[24,1683,1684],{},[19,1685],{"alt":92,"src":1686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[48,1688,1690],{"id":1689},"_154逻辑运算符","1.5.4逻辑运算符",[24,1692,1693],{},[19,1694],{"alt":92,"src":1695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1697,1699],{"id":1698},"_16程序流程结构","1.6程序流程结构",[48,1701,1703],{"id":1702},"_161选择结构","1.6.1选择结构",[138,1705,1706],{},[70,1707,1708],{},"if语句\n单行、多行、多条件if语句",[87,1710,1712],{"className":310,"code":1711,"language":312,"meta":92,"style":92},"\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",[94,1713,1714,1719,1734,1739,1753,1758,1763,1772,1785,1789,1802,1807,1813,1818,1832,1837,1843,1864,1869,1883,1888,1917,1922,1939,1944,1949,1954,1968,1973],{"__ignoreMap":92},[97,1715,1716],{"class":99,"line":100},[97,1717,1718],{"class":191},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[97,1720,1721,1724,1727,1729,1732],{"class":99,"line":195},[97,1722,1723],{"class":319},"if",[97,1725,1726],{"class":103},"(score",[97,1728,1279],{"class":319},[97,1730,1731],{"class":370},"600",[97,1733,329],{"class":103},[97,1735,1736],{"class":99,"line":241},[97,1737,1738],{"class":103},"{\n",[97,1740,1741,1744,1746,1749,1751],{"class":99,"line":1387},[97,1742,1743],{"class":103},"    cout",[97,1745,1362],{"class":319},[97,1747,1748],{"class":118},"'这是单行if语句'",[97,1750,1362],{"class":319},[97,1752,1384],{"class":103},[97,1754,1755],{"class":99,"line":1393},[97,1756,1757],{"class":103},"}\n",[97,1759,1760],{"class":99,"line":1407},[97,1761,1762],{"class":191},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[97,1764,1765,1767,1769],{"class":99,"line":1413},[97,1766,1619],{"class":103},[97,1768,1622],{"class":319},[97,1770,1771],{"class":103}," score\n",[97,1773,1774,1776,1778,1781,1783],{"class":99,"line":1504},[97,1775,1723],{"class":319},[97,1777,1726],{"class":103},[97,1779,1780],{"class":319},"\u003C=",[97,1782,1731],{"class":370},[97,1784,329],{"class":103},[97,1786,1787],{"class":99,"line":1510},[97,1788,1738],{"class":103},[97,1790,1791,1793,1795,1798,1800],{"class":99,"line":1522},[97,1792,1743],{"class":103},[97,1794,1622],{"class":319},[97,1796,1797],{"class":118},"\"小于等于600\"",[97,1799,1362],{"class":319},[97,1801,1384],{"class":103},[97,1803,1805],{"class":99,"line":1804},11,[97,1806,1757],{"class":103},[97,1808,1810],{"class":99,"line":1809},12,[97,1811,1812],{"class":319},"else\n",[97,1814,1816],{"class":99,"line":1815},13,[97,1817,1738],{"class":103},[97,1819,1821,1823,1825,1828,1830],{"class":99,"line":1820},14,[97,1822,1743],{"class":103},[97,1824,1622],{"class":319},[97,1826,1827],{"class":118},"\"大于600\"",[97,1829,1622],{"class":319},[97,1831,1384],{"class":103},[97,1833,1835],{"class":99,"line":1834},15,[97,1836,1757],{"class":103},[97,1838,1840],{"class":99,"line":1839},16,[97,1841,1842],{"class":191},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[97,1844,1846,1848,1851,1853,1855,1858,1860,1862],{"class":99,"line":1845},17,[97,1847,1723],{"class":319},[97,1849,1850],{"class":103}," (",[97,1852,511],{"class":370},[97,1854,104],{"class":319},[97,1856,1857],{"class":103},"num",[97,1859,104],{"class":319},[97,1861,631],{"class":370},[97,1863,329],{"class":103},[97,1865,1867],{"class":99,"line":1866},18,[97,1868,1738],{"class":103},[97,1870,1872,1874,1876,1879,1881],{"class":99,"line":1871},19,[97,1873,1743],{"class":103},[97,1875,1362],{"class":319},[97,1877,1878],{"class":118},"\"小于100\"",[97,1880,1362],{"class":319},[97,1882,1384],{"class":103},[97,1884,1886],{"class":99,"line":1885},20,[97,1887,1757],{"class":103},[97,1889,1891,1894,1897,1900,1903,1905,1908,1910,1912,1915],{"class":99,"line":1890},21,[97,1892,1893],{"class":319},"else",[97,1895,1896],{"class":319}," if",[97,1898,1899],{"class":103}," (nmu",[97,1901,1902],{"class":319},">=",[97,1904,631],{"class":370},[97,1906,1907],{"class":319},"&&",[97,1909,1857],{"class":103},[97,1911,104],{"class":319},[97,1913,1914],{"class":370},"200",[97,1916,329],{"class":103},[97,1918,1920],{"class":99,"line":1919},22,[97,1921,1738],{"class":103},[97,1923,1925,1927,1929,1932,1934,1936],{"class":99,"line":1924},23,[97,1926,1743],{"class":103},[97,1928,1362],{"class":319},[97,1930,1931],{"class":118},"\"不小于100且小于200\"",[97,1933,1362],{"class":319},[97,1935,1431],{"class":103},[97,1937,1938],{"class":191}," \u002F\u002F可以无限else if,python中是elif：\n",[97,1940,1942],{"class":99,"line":1941},24,[97,1943,1757],{"class":103},[97,1945,1947],{"class":99,"line":1946},25,[97,1948,1812],{"class":319},[97,1950,1952],{"class":99,"line":1951},26,[97,1953,1738],{"class":103},[97,1955,1957,1959,1961,1964,1966],{"class":99,"line":1956},27,[97,1958,1743],{"class":103},[97,1960,1362],{"class":319},[97,1962,1963],{"class":118},"\"不小于200\"",[97,1965,1362],{"class":319},[97,1967,1384],{"class":103},[97,1969,1971],{"class":99,"line":1970},28,[97,1972,1757],{"class":103},[97,1974,1976],{"class":99,"line":1975},29,[97,1977,1978],{"class":191},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[138,1980,1981],{"start":195},[70,1982,1983],{},"三目运算符",[87,1985,1987],{"className":310,"code":1986,"language":312,"meta":92,"style":92},"\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",[94,1988,1989,1994,1999,2025,2047,2064,2069,2092,2107],{"__ignoreMap":92},[97,1990,1991],{"class":99,"line":100},[97,1992,1993],{"class":191},"\u002F\u002F创建三个变量a,b,c\n",[97,1995,1996],{"class":99,"line":195},[97,1997,1998],{"class":191},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[97,2000,2001,2003,2005,2007,2009,2012,2014,2016,2019,2021,2023],{"class":99,"line":241},[97,2002,326],{"class":319},[97,2004,1591],{"class":103},[97,2006,115],{"class":319},[97,2008,1020],{"class":370},[97,2010,2011],{"class":103},",b",[97,2013,115],{"class":319},[97,2015,766],{"class":370},[97,2017,2018],{"class":103},",c",[97,2020,115],{"class":319},[97,2022,511],{"class":370},[97,2024,1483],{"class":103},[97,2026,2027,2029,2031,2034,2036,2038,2040,2042,2044],{"class":99,"line":1387},[97,2028,608],{"class":103},[97,2030,115],{"class":319},[97,2032,2033],{"class":103},"(a",[97,2035,1279],{"class":319},[97,2037,583],{"class":103},[97,2039,1305],{"class":319},[97,2041,558],{"class":103},[97,2043,1179],{"class":319},[97,2045,2046],{"class":103},"b)\n",[97,2048,2049,2051,2053,2056,2058,2060,2062],{"class":99,"line":1393},[97,2050,1562],{"class":103},[97,2052,1362],{"class":319},[97,2054,2055],{"class":118},"\"c=\"",[97,2057,1362],{"class":319},[97,2059,608],{"class":103},[97,2061,1362],{"class":319},[97,2063,1384],{"class":103},[97,2065,2066],{"class":99,"line":1407},[97,2067,2068],{"class":191},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[97,2070,2071,2073,2075,2077,2079,2081,2083,2086,2088,2090],{"class":99,"line":1413},[97,2072,2033],{"class":103},[97,2074,1279],{"class":319},[97,2076,583],{"class":103},[97,2078,1305],{"class":319},[97,2080,558],{"class":103},[97,2082,1179],{"class":319},[97,2084,2085],{"class":103},"b)",[97,2087,115],{"class":319},[97,2089,631],{"class":370},[97,2091,1483],{"class":103},[97,2093,2094,2096,2098,2100,2102,2104],{"class":99,"line":1504},[97,2095,1562],{"class":103},[97,2097,1362],{"class":319},[97,2099,558],{"class":103},[97,2101,1362],{"class":319},[97,2103,1431],{"class":103},[97,2105,2106],{"class":191}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[97,2108,2109,2111,2113,2115,2117,2119],{"class":99,"line":1510},[97,2110,1562],{"class":103},[97,2112,1362],{"class":319},[97,2114,583],{"class":103},[97,2116,1362],{"class":319},[97,2118,1431],{"class":103},[97,2120,2121],{"class":191}," \u002F\u002F10   a>b,b还是原值\n",[138,2123,2124],{"start":241},[70,2125,2126],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[87,2128,2130],{"className":310,"code":2129,"language":312,"meta":92,"style":92},"\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",[94,2131,2132,2137,2145,2158,2168,2172,2186,2199,2209,2217,2222,2247,2268,2290,2311,2333,2354,2374,2379],{"__ignoreMap":92},[97,2133,2134],{"class":99,"line":100},[97,2135,2136],{"class":191},"\u002F\u002F案例-电影打分\n",[97,2138,2139,2142],{"class":99,"line":195},[97,2140,2141],{"class":319},"#include",[97,2143,2144],{"class":118},"\u003Ciostream>\n",[97,2146,2147,2150,2153,2156],{"class":99,"line":241},[97,2148,2149],{"class":319},"using",[97,2151,2152],{"class":319}," namespace",[97,2154,2155],{"class":111}," std",[97,2157,1483],{"class":103},[97,2159,2160,2162,2165],{"class":99,"line":1387},[97,2161,326],{"class":319},[97,2163,2164],{"class":111}," main",[97,2166,2167],{"class":103},"()\n",[97,2169,2170],{"class":99,"line":1393},[97,2171,1738],{"class":103},[97,2173,2174,2177,2180,2182,2184],{"class":99,"line":1407},[97,2175,2176],{"class":319},"    int",[97,2178,2179],{"class":103}," score",[97,2181,115],{"class":319},[97,2183,511],{"class":370},[97,2185,1483],{"class":103},[97,2187,2188,2190,2192,2195,2197],{"class":99,"line":1413},[97,2189,1743],{"class":103},[97,2191,1362],{"class":319},[97,2193,2194],{"class":118},"\"电影打分：\"",[97,2196,1362],{"class":319},[97,2198,1384],{"class":103},[97,2200,2201,2204,2206],{"class":99,"line":1504},[97,2202,2203],{"class":103},"    cin",[97,2205,1622],{"class":319},[97,2207,2208],{"class":103},"score;\n",[97,2210,2211,2214],{"class":99,"line":1510},[97,2212,2213],{"class":319},"    switch",[97,2215,2216],{"class":103},"(score)\n",[97,2218,2219],{"class":99,"line":1522},[97,2220,2221],{"class":103},"    {\n",[97,2223,2224,2227,2230,2233,2235,2238,2240,2242,2245],{"class":99,"line":1804},[97,2225,2226],{"class":319},"        case",[97,2228,2229],{"class":370}," 10",[97,2231,2232],{"class":103},":cout",[97,2234,1362],{"class":319},[97,2236,2237],{"class":118},"\"经典\"",[97,2239,1362],{"class":319},[97,2241,1431],{"class":103},[97,2243,2244],{"class":319},"break",[97,2246,1483],{"class":103},[97,2248,2249,2251,2254,2256,2258,2260,2262,2264,2266],{"class":99,"line":1809},[97,2250,2226],{"class":319},[97,2252,2253],{"class":370}," 9",[97,2255,2232],{"class":103},[97,2257,1362],{"class":319},[97,2259,2237],{"class":118},[97,2261,1362],{"class":319},[97,2263,1431],{"class":103},[97,2265,2244],{"class":319},[97,2267,1483],{"class":103},[97,2269,2270,2272,2275,2277,2279,2282,2284,2286,2288],{"class":99,"line":1815},[97,2271,2226],{"class":319},[97,2273,2274],{"class":370}," 8",[97,2276,2232],{"class":103},[97,2278,1362],{"class":319},[97,2280,2281],{"class":118},"\"非常好\"",[97,2283,1362],{"class":319},[97,2285,1431],{"class":103},[97,2287,2244],{"class":319},[97,2289,1483],{"class":103},[97,2291,2292,2294,2297,2299,2301,2303,2305,2307,2309],{"class":99,"line":1820},[97,2293,2226],{"class":319},[97,2295,2296],{"class":370}," 7",[97,2298,2232],{"class":103},[97,2300,1362],{"class":319},[97,2302,2281],{"class":118},[97,2304,1362],{"class":319},[97,2306,1431],{"class":103},[97,2308,2244],{"class":319},[97,2310,1483],{"class":103},[97,2312,2313,2315,2318,2320,2322,2325,2327,2329,2331],{"class":99,"line":1834},[97,2314,2226],{"class":319},[97,2316,2317],{"class":370}," 6",[97,2319,2232],{"class":103},[97,2321,1362],{"class":319},[97,2323,2324],{"class":118},"\"一般\"",[97,2326,1362],{"class":319},[97,2328,1431],{"class":103},[97,2330,2244],{"class":319},[97,2332,1483],{"class":103},[97,2334,2335,2337,2340,2342,2344,2346,2348,2350,2352],{"class":99,"line":1839},[97,2336,2226],{"class":319},[97,2338,2339],{"class":370}," 5",[97,2341,2232],{"class":103},[97,2343,1362],{"class":319},[97,2345,2324],{"class":118},[97,2347,1362],{"class":319},[97,2349,1431],{"class":103},[97,2351,2244],{"class":319},[97,2353,1483],{"class":103},[97,2355,2356,2359,2361,2363,2366,2368,2370,2372],{"class":99,"line":1845},[97,2357,2358],{"class":319},"        default",[97,2360,2232],{"class":103},[97,2362,1362],{"class":319},[97,2364,2365],{"class":118},"\"烂片\"",[97,2367,1362],{"class":319},[97,2369,1431],{"class":103},[97,2371,2244],{"class":319},[97,2373,1483],{"class":103},[97,2375,2376],{"class":99,"line":1866},[97,2377,2378],{"class":103},"    }\n",[97,2380,2381],{"class":99,"line":1871},[97,2382,1757],{"class":103},[24,2384,2385],{},"if和switch区别：",[67,2387,2388,2391],{},[70,2389,2390],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[70,2392,2393],{},"switch优点：结构清晰，执行效率高",[48,2395,2397],{"id":2396},"_162循环结构","1.6.2循环结构",[138,2399,2400],{},[70,2401,2402],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[87,2404,2406],{"className":310,"code":2405,"language":312,"meta":92,"style":92},"\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",[94,2407,2408,2413,2421,2425,2438,2452,2456,2476,2486,2490,2502],{"__ignoreMap":92},[97,2409,2410],{"class":99,"line":100},[97,2411,2412],{"class":191},"\u002F\u002F打印0-9数字\n",[97,2414,2415,2417,2419],{"class":99,"line":195},[97,2416,326],{"class":319},[97,2418,2164],{"class":111},[97,2420,2167],{"class":103},[97,2422,2423],{"class":99,"line":241},[97,2424,1738],{"class":103},[97,2426,2427,2429,2432,2434,2436],{"class":99,"line":1387},[97,2428,2176],{"class":319},[97,2430,2431],{"class":103}," num",[97,2433,115],{"class":319},[97,2435,511],{"class":370},[97,2437,1483],{"class":103},[97,2439,2440,2443,2446,2448,2450],{"class":99,"line":1393},[97,2441,2442],{"class":319},"    while",[97,2444,2445],{"class":103},"(num",[97,2447,104],{"class":319},[97,2449,766],{"class":370},[97,2451,329],{"class":103},[97,2453,2454],{"class":99,"line":1407},[97,2455,2221],{"class":103},[97,2457,2458,2461,2464,2466,2468,2470,2473],{"class":99,"line":1413},[97,2459,2460],{"class":111},"       std",[97,2462,2463],{"class":103},"::cout",[97,2465,1362],{"class":319},[97,2467,1857],{"class":103},[97,2469,1362],{"class":319},[97,2471,2472],{"class":111},"std",[97,2474,2475],{"class":103},"::endl;\n",[97,2477,2478,2481,2484],{"class":99,"line":1504},[97,2479,2480],{"class":103},"        num",[97,2482,2483],{"class":319},"++",[97,2485,1483],{"class":103},[97,2487,2488],{"class":99,"line":1510},[97,2489,2378],{"class":103},[97,2491,2492,2495,2497,2500],{"class":99,"line":1522},[97,2493,2494],{"class":111},"    system",[97,2496,323],{"class":103},[97,2498,2499],{"class":118},"\"pause\"",[97,2501,329],{"class":103},[97,2503,2504],{"class":99,"line":1804},[97,2505,1757],{"class":103},[24,2507,2508],{},"注意：写好循环条件，避免死循环情况",[87,2510,2512],{"className":310,"code":2511,"language":312,"meta":92,"style":92},"\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",[94,2513,2514,2519,2526,2533,2543,2551,2555,2560,2587,2592,2597,2605,2632,2637,2642,2655,2665,2669,2679,2684,2697,2702,2716,2721,2736,2740,2753,2757,2762,2766,2780,2788,2793,2799,2805,2810],{"__ignoreMap":92},[97,2515,2516],{"class":99,"line":100},[97,2517,2518],{"class":191},"\u002F\u002F循环结构-猜数字\n",[97,2520,2521,2523],{"class":99,"line":195},[97,2522,2141],{"class":319},[97,2524,2525],{"class":118}," \u003Ciostream>\n",[97,2527,2528,2530],{"class":99,"line":241},[97,2529,2141],{"class":319},[97,2531,2532],{"class":118}," \u003Cctime>\n",[97,2534,2535,2537,2539,2541],{"class":99,"line":1387},[97,2536,2149],{"class":319},[97,2538,2152],{"class":319},[97,2540,2155],{"class":111},[97,2542,1483],{"class":103},[97,2544,2545,2547,2549],{"class":99,"line":1393},[97,2546,326],{"class":319},[97,2548,2164],{"class":111},[97,2550,2167],{"class":103},[97,2552,2553],{"class":99,"line":1407},[97,2554,1738],{"class":103},[97,2556,2557],{"class":99,"line":1413},[97,2558,2559],{"class":191},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[97,2561,2562,2565,2568,2571,2574,2576,2579,2581,2584],{"class":99,"line":1504},[97,2563,2564],{"class":111},"    srand",[97,2566,2567],{"class":103},"((",[97,2569,2570],{"class":319},"unsigned",[97,2572,2573],{"class":319}," int",[97,2575,749],{"class":103},[97,2577,2578],{"class":111},"time",[97,2580,323],{"class":103},[97,2582,2583],{"class":370},"NULL",[97,2585,2586],{"class":103},"));\n",[97,2588,2589],{"class":99,"line":1510},[97,2590,2591],{"emptyLinePlaceholder":249},"\n",[97,2593,2594],{"class":99,"line":1522},[97,2595,2596],{"class":191},"    \u002F\u002F1.系统生成随机数\n",[97,2598,2599,2602],{"class":99,"line":1804},[97,2600,2601],{"class":191},"    \u002F\u002Frand()%100",[97,2603,2604],{"class":191}," \u002F\u002F生成0-99的随机数\n",[97,2606,2607,2609,2611,2613,2616,2619,2621,2623,2625,2627,2629],{"class":99,"line":1809},[97,2608,2176],{"class":319},[97,2610,2431],{"class":103},[97,2612,115],{"class":319},[97,2614,2615],{"class":111},"rand",[97,2617,2618],{"class":103},"()",[97,2620,648],{"class":319},[97,2622,631],{"class":370},[97,2624,801],{"class":319},[97,2626,537],{"class":370},[97,2628,377],{"class":103},[97,2630,2631],{"class":191}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[97,2633,2634],{"class":99,"line":1815},[97,2635,2636],{"class":191},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[97,2638,2639],{"class":99,"line":1820},[97,2640,2641],{"class":191},"    \u002F\u002F2.玩家猜测\n",[97,2643,2644,2646,2649,2651,2653],{"class":99,"line":1834},[97,2645,2176],{"class":319},[97,2647,2648],{"class":103}," val",[97,2650,115],{"class":319},[97,2652,511],{"class":370},[97,2654,1483],{"class":103},[97,2656,2657,2659,2661,2663],{"class":99,"line":1839},[97,2658,2442],{"class":319},[97,2660,1850],{"class":103},[97,2662,537],{"class":370},[97,2664,329],{"class":103},[97,2666,2667],{"class":99,"line":1845},[97,2668,2221],{"class":103},[97,2670,2671,2674,2676],{"class":99,"line":1866},[97,2672,2673],{"class":103},"        cin",[97,2675,1622],{"class":319},[97,2677,2678],{"class":103},"val;\n",[97,2680,2681],{"class":99,"line":1871},[97,2682,2683],{"class":191},"        \u002F\u002F3.判断玩家猜测\n",[97,2685,2686,2689,2692,2694],{"class":99,"line":1885},[97,2687,2688],{"class":319},"        if",[97,2690,2691],{"class":103},"(val",[97,2693,104],{"class":319},[97,2695,2696],{"class":103},"num) \n",[97,2698,2699],{"class":99,"line":1890},[97,2700,2701],{"class":103},"        {\n",[97,2703,2704,2707,2709,2712,2714],{"class":99,"line":1919},[97,2705,2706],{"class":103},"            cout",[97,2708,1362],{"class":319},[97,2710,2711],{"class":118},"\"猜小了！\"",[97,2713,1362],{"class":319},[97,2715,1384],{"class":103},[97,2717,2718],{"class":99,"line":1924},[97,2719,2720],{"class":103},"        }\n",[97,2722,2723,2726,2728,2731,2733],{"class":99,"line":1941},[97,2724,2725],{"class":319},"        else",[97,2727,1896],{"class":319},[97,2729,2730],{"class":103}," (val",[97,2732,1279],{"class":319},[97,2734,2735],{"class":103},"num)\n",[97,2737,2738],{"class":99,"line":1946},[97,2739,2701],{"class":103},[97,2741,2742,2744,2746,2749,2751],{"class":99,"line":1951},[97,2743,2706],{"class":103},[97,2745,1362],{"class":319},[97,2747,2748],{"class":118},"\"猜大了！\"",[97,2750,1362],{"class":319},[97,2752,1384],{"class":103},[97,2754,2755],{"class":99,"line":1956},[97,2756,2720],{"class":103},[97,2758,2759],{"class":99,"line":1970},[97,2760,2761],{"class":319},"        else\n",[97,2763,2764],{"class":99,"line":1975},[97,2765,2701],{"class":103},[97,2767,2769,2771,2773,2776,2778],{"class":99,"line":2768},30,[97,2770,2706],{"class":103},[97,2772,1362],{"class":319},[97,2774,2775],{"class":118},"\"猜对了！\"",[97,2777,1362],{"class":319},[97,2779,1384],{"class":103},[97,2781,2783,2786],{"class":99,"line":2782},31,[97,2784,2785],{"class":319},"            break",[97,2787,1483],{"class":103},[97,2789,2791],{"class":99,"line":2790},32,[97,2792,2720],{"class":103},[97,2794,2796],{"class":99,"line":2795},33,[97,2797,2798],{"class":191},"        \u002F\u002F猜对 退出游戏\n",[97,2800,2802],{"class":99,"line":2801},34,[97,2803,2804],{"class":191},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[97,2806,2808],{"class":99,"line":2807},35,[97,2809,2378],{"class":103},[97,2811,2813],{"class":99,"line":2812},36,[97,2814,1757],{"class":103},[138,2816,2817],{"start":195},[70,2818,2819,2820,2823],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[469,2821,2822],{},"do...while会先执行一次循环语句","，在判断循环语句",[87,2825,2827],{"className":310,"code":2826,"language":312,"meta":92,"style":92},"\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",[94,2828,2829,2834,2842,2846,2858,2866,2870,2887,2894,2898,2911,2921],{"__ignoreMap":92},[97,2830,2831],{"class":99,"line":100},[97,2832,2833],{"class":191},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[97,2835,2836,2838,2840],{"class":99,"line":195},[97,2837,326],{"class":319},[97,2839,2164],{"class":111},[97,2841,2167],{"class":103},[97,2843,2844],{"class":99,"line":241},[97,2845,1738],{"class":103},[97,2847,2848,2850,2852,2854,2856],{"class":99,"line":1387},[97,2849,2176],{"class":319},[97,2851,2431],{"class":103},[97,2853,115],{"class":319},[97,2855,511],{"class":370},[97,2857,1483],{"class":103},[97,2859,2860,2863],{"class":99,"line":1393},[97,2861,2862],{"class":319},"    do",[97,2864,2865],{"class":103}," \n",[97,2867,2868],{"class":99,"line":1407},[97,2869,2221],{"class":103},[97,2871,2872,2875,2877,2879,2881,2883,2885],{"class":99,"line":1413},[97,2873,2874],{"class":111},"        std",[97,2876,2463],{"class":103},[97,2878,1362],{"class":319},[97,2880,1857],{"class":103},[97,2882,1362],{"class":319},[97,2884,2472],{"class":111},[97,2886,2475],{"class":103},[97,2888,2889,2891],{"class":99,"line":1504},[97,2890,2480],{"class":103},[97,2892,2893],{"class":319},"++\n",[97,2895,2896],{"class":99,"line":1510},[97,2897,2378],{"class":103},[97,2899,2900,2902,2904,2906,2908],{"class":99,"line":1522},[97,2901,2442],{"class":319},[97,2903,2445],{"class":103},[97,2905,104],{"class":319},[97,2907,766],{"class":370},[97,2909,2910],{"class":103},");\n",[97,2912,2913,2915,2917,2919],{"class":99,"line":1804},[97,2914,2494],{"class":111},[97,2916,323],{"class":103},[97,2918,2499],{"class":118},[97,2920,2910],{"class":103},[97,2922,2923],{"class":99,"line":1809},[97,2924,1757],{"class":103},[24,2926,2927],{},"案例-水仙花数",[24,2929,2930],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[24,2932,2933],{},"例如：1^3+5^3+3^3=153",[24,2935,2936],{},"请用do...while语句，求出所有3位数的水仙花数",[87,2938,2940],{"className":310,"code":2939,"language":312,"meta":92,"style":92},"#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",[94,2941,2942,2948,2958,2966,2970,2975,2987,2993,2997,3002,3018,3034,3050,3065,3084,3099,3147,3151,3163,3167,3175,3179,3193],{"__ignoreMap":92},[97,2943,2944,2946],{"class":99,"line":100},[97,2945,2141],{"class":319},[97,2947,2525],{"class":118},[97,2949,2950,2952,2954,2956],{"class":99,"line":195},[97,2951,2149],{"class":319},[97,2953,2152],{"class":319},[97,2955,2155],{"class":111},[97,2957,1483],{"class":103},[97,2959,2960,2962,2964],{"class":99,"line":241},[97,2961,326],{"class":319},[97,2963,2164],{"class":111},[97,2965,2167],{"class":103},[97,2967,2968],{"class":99,"line":1387},[97,2969,1738],{"class":103},[97,2971,2972],{"class":99,"line":1393},[97,2973,2974],{"class":191},"    \u002F\u002F1.先打印所有三位数字\n",[97,2976,2977,2979,2981,2983,2985],{"class":99,"line":1407},[97,2978,2176],{"class":319},[97,2980,2431],{"class":103},[97,2982,115],{"class":319},[97,2984,631],{"class":370},[97,2986,1483],{"class":103},[97,2988,2989,2991],{"class":99,"line":1413},[97,2990,2862],{"class":319},[97,2992,2865],{"class":103},[97,2994,2995],{"class":99,"line":1504},[97,2996,2221],{"class":103},[97,2998,2999],{"class":99,"line":1510},[97,3000,3001],{"class":191},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[97,3003,3004,3007,3009,3011,3013,3015],{"class":99,"line":1522},[97,3005,3006],{"class":319},"        int",[97,3008,1591],{"class":103},[97,3010,115],{"class":319},[97,3012,511],{"class":370},[97,3014,377],{"class":103},[97,3016,3017],{"class":191}," \u002F\u002F个位\n",[97,3019,3020,3022,3025,3027,3029,3031],{"class":99,"line":1804},[97,3021,3006],{"class":319},[97,3023,3024],{"class":103}," b",[97,3026,115],{"class":319},[97,3028,511],{"class":370},[97,3030,377],{"class":103},[97,3032,3033],{"class":191}," \u002F\u002F十位\n",[97,3035,3036,3038,3041,3043,3045,3047],{"class":99,"line":1809},[97,3037,3006],{"class":319},[97,3039,3040],{"class":103}," c",[97,3042,115],{"class":319},[97,3044,511],{"class":370},[97,3046,377],{"class":103},[97,3048,3049],{"class":191}," \u002F\u002F百位\n",[97,3051,3052,3055,3057,3059,3061,3063],{"class":99,"line":1815},[97,3053,3054],{"class":103},"        a",[97,3056,115],{"class":319},[97,3058,1857],{"class":103},[97,3060,648],{"class":319},[97,3062,766],{"class":370},[97,3064,1483],{"class":103},[97,3066,3067,3070,3072,3074,3076,3078,3080,3082],{"class":99,"line":1820},[97,3068,3069],{"class":103},"        b",[97,3071,115],{"class":319},[97,3073,1857],{"class":103},[97,3075,904],{"class":319},[97,3077,766],{"class":370},[97,3079,648],{"class":319},[97,3081,766],{"class":370},[97,3083,1483],{"class":103},[97,3085,3086,3089,3091,3093,3095,3097],{"class":99,"line":1834},[97,3087,3088],{"class":103},"        c",[97,3090,115],{"class":319},[97,3092,1857],{"class":103},[97,3094,904],{"class":319},[97,3096,631],{"class":370},[97,3098,1483],{"class":103},[97,3100,3101,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3135,3138,3141,3144],{"class":99,"line":1839},[97,3102,2688],{"class":319},[97,3104,2033],{"class":103},[97,3106,775],{"class":319},[97,3108,558],{"class":103},[97,3110,775],{"class":319},[97,3112,558],{"class":103},[97,3114,801],{"class":319},[97,3116,583],{"class":103},[97,3118,775],{"class":319},[97,3120,583],{"class":103},[97,3122,775],{"class":319},[97,3124,583],{"class":103},[97,3126,801],{"class":319},[97,3128,608],{"class":103},[97,3130,775],{"class":319},[97,3132,608],{"class":103},[97,3134,775],{"class":319},[97,3136,3137],{"class":103},"c ",[97,3139,3140],{"class":319},"==",[97,3142,3143],{"class":103}," num)",[97,3145,3146],{"class":191}," \u002F\u002F如果是水仙花数，才打印\n",[97,3148,3149],{"class":99,"line":1845},[97,3150,2701],{"class":103},[97,3152,3153,3155,3157,3159,3161],{"class":99,"line":1866},[97,3154,2706],{"class":103},[97,3156,1362],{"class":319},[97,3158,1857],{"class":103},[97,3160,1362],{"class":319},[97,3162,1384],{"class":103},[97,3164,3165],{"class":99,"line":1871},[97,3166,2720],{"class":103},[97,3168,3169,3171,3173],{"class":99,"line":1885},[97,3170,2480],{"class":103},[97,3172,2483],{"class":319},[97,3174,1483],{"class":103},[97,3176,3177],{"class":99,"line":1890},[97,3178,2378],{"class":103},[97,3180,3181,3183,3186,3188,3191],{"class":99,"line":1919},[97,3182,2442],{"class":319},[97,3184,3185],{"class":103}," (num ",[97,3187,104],{"class":319},[97,3189,3190],{"class":370}," 1000",[97,3192,2910],{"class":103},[97,3194,3195],{"class":99,"line":1924},[97,3196,1757],{"class":103},[138,3198,3199],{"start":241},[70,3200,3201],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[87,3203,3205],{"className":310,"code":3204,"language":312,"meta":92,"style":92},"\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",[94,3206,3207,3212,3241,3245,3257,3261,3266,3277,3284,3288,3302,3306,3313,3317,3329,3338],{"__ignoreMap":92},[97,3208,3209],{"class":99,"line":100},[97,3210,3211],{"class":191},"\u002F\u002F从数字0-9打印\n",[97,3213,3214,3217,3219,3221,3224,3226,3228,3231,3233,3235,3237,3239],{"class":99,"line":195},[97,3215,3216],{"class":319},"for",[97,3218,323],{"class":103},[97,3220,326],{"class":319},[97,3222,3223],{"class":103}," i",[97,3225,115],{"class":319},[97,3227,511],{"class":370},[97,3229,3230],{"class":103},";i",[97,3232,104],{"class":319},[97,3234,766],{"class":370},[97,3236,3230],{"class":103},[97,3238,2483],{"class":319},[97,3240,329],{"class":103},[97,3242,3243],{"class":99,"line":241},[97,3244,1738],{"class":103},[97,3246,3247,3249,3251,3253,3255],{"class":99,"line":1387},[97,3248,1743],{"class":103},[97,3250,1362],{"class":319},[97,3252,761],{"class":103},[97,3254,1362],{"class":319},[97,3256,1384],{"class":103},[97,3258,3259],{"class":99,"line":1393},[97,3260,1757],{"class":103},[97,3262,3263],{"class":99,"line":1407},[97,3264,3265],{"class":191},"\u002F\u002F上式可以进行拆分\n",[97,3267,3268,3270,3272,3274],{"class":99,"line":1413},[97,3269,326],{"class":319},[97,3271,3223],{"class":103},[97,3273,115],{"class":319},[97,3275,3276],{"class":370},"0\n",[97,3278,3279,3281],{"class":99,"line":1504},[97,3280,3216],{"class":319},[97,3282,3283],{"class":103},"(;;;)\n",[97,3285,3286],{"class":99,"line":1510},[97,3287,1738],{"class":103},[97,3289,3290,3293,3296,3298,3300],{"class":99,"line":1522},[97,3291,3292],{"class":319},"    if",[97,3294,3295],{"class":103},"(i",[97,3297,1902],{"class":319},[97,3299,766],{"class":370},[97,3301,329],{"class":103},[97,3303,3304],{"class":99,"line":1804},[97,3305,2221],{"class":103},[97,3307,3308,3311],{"class":99,"line":1809},[97,3309,3310],{"class":319},"        break",[97,3312,1483],{"class":103},[97,3314,3315],{"class":99,"line":1815},[97,3316,2378],{"class":103},[97,3318,3319,3321,3323,3325,3327],{"class":99,"line":1820},[97,3320,1743],{"class":103},[97,3322,1362],{"class":319},[97,3324,761],{"class":103},[97,3326,1362],{"class":319},[97,3328,1384],{"class":103},[97,3330,3331,3334,3336],{"class":99,"line":1834},[97,3332,3333],{"class":103},"    i",[97,3335,2483],{"class":319},[97,3337,1483],{"class":103},[97,3339,3340],{"class":99,"line":1839},[97,3341,1757],{"class":103},[24,3343,3344],{},"小练习",[87,3346,3348],{"className":310,"code":3347,"language":312,"meta":92,"style":92},"#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",[94,3349,3350,3356,3366,3374,3378,3383,3388,3416,3420,3425,3430,3471,3475,3488,3492,3496,3500,3512,3516,3520],{"__ignoreMap":92},[97,3351,3352,3354],{"class":99,"line":100},[97,3353,2141],{"class":319},[97,3355,2144],{"class":118},[97,3357,3358,3360,3362,3364],{"class":99,"line":195},[97,3359,2149],{"class":319},[97,3361,2152],{"class":319},[97,3363,2155],{"class":111},[97,3365,1483],{"class":103},[97,3367,3368,3370,3372],{"class":99,"line":241},[97,3369,326],{"class":319},[97,3371,2164],{"class":111},[97,3373,2167],{"class":103},[97,3375,3376],{"class":99,"line":1387},[97,3377,1738],{"class":103},[97,3379,3380],{"class":99,"line":1393},[97,3381,3382],{"class":191},"    \u002F\u002F敲桌子案例\n",[97,3384,3385],{"class":99,"line":1407},[97,3386,3387],{"class":191},"    \u002F\u002F1.先输出1-100的数字\n",[97,3389,3390,3393,3395,3397,3399,3401,3403,3406,3408,3410,3412,3414],{"class":99,"line":1413},[97,3391,3392],{"class":319},"    for",[97,3394,323],{"class":103},[97,3396,326],{"class":319},[97,3398,3223],{"class":103},[97,3400,115],{"class":319},[97,3402,537],{"class":370},[97,3404,3405],{"class":103},"; i",[97,3407,1780],{"class":319},[97,3409,631],{"class":370},[97,3411,3405],{"class":103},[97,3413,2483],{"class":319},[97,3415,329],{"class":103},[97,3417,3418],{"class":99,"line":1504},[97,3419,2221],{"class":103},[97,3421,3422],{"class":99,"line":1510},[97,3423,3424],{"class":191},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[97,3426,3427],{"class":99,"line":1522},[97,3428,3429],{"class":191},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[97,3431,3432,3434,3436,3438,3440,3442,3444,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469],{"class":99,"line":1804},[97,3433,2688],{"class":319},[97,3435,3295],{"class":103},[97,3437,648],{"class":319},[97,3439,689],{"class":370},[97,3441,3140],{"class":319},[97,3443,511],{"class":370},[97,3445,3446],{"class":319}," ||",[97,3448,3223],{"class":103},[97,3450,648],{"class":319},[97,3452,766],{"class":370},[97,3454,3140],{"class":319},[97,3456,689],{"class":370},[97,3458,3446],{"class":319},[97,3460,3223],{"class":103},[97,3462,904],{"class":319},[97,3464,766],{"class":370},[97,3466,3140],{"class":319},[97,3468,689],{"class":370},[97,3470,329],{"class":103},[97,3472,3473],{"class":99,"line":1809},[97,3474,2701],{"class":103},[97,3476,3477,3479,3481,3484,3486],{"class":99,"line":1815},[97,3478,2706],{"class":103},[97,3480,1362],{"class":319},[97,3482,3483],{"class":118},"\"敲桌子\"",[97,3485,1362],{"class":319},[97,3487,1384],{"class":103},[97,3489,3490],{"class":99,"line":1820},[97,3491,2720],{"class":103},[97,3493,3494],{"class":99,"line":1834},[97,3495,2761],{"class":319},[97,3497,3498],{"class":99,"line":1839},[97,3499,2701],{"class":103},[97,3501,3502,3504,3506,3508,3510],{"class":99,"line":1845},[97,3503,2706],{"class":103},[97,3505,1362],{"class":319},[97,3507,761],{"class":103},[97,3509,1362],{"class":319},[97,3511,1384],{"class":103},[97,3513,3514],{"class":99,"line":1866},[97,3515,2720],{"class":103},[97,3517,3518],{"class":99,"line":1871},[97,3519,2378],{"class":103},[97,3521,3522],{"class":99,"line":1885},[97,3523,1757],{"class":103},[24,3525,3526],{},"嵌套实现星图",[87,3528,3530],{"className":310,"code":3529,"language":312,"meta":92,"style":92},"#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",[94,3531,3532,3538,3548,3556,3560,3586,3590,3619,3623,3634,3638,3647,3651],{"__ignoreMap":92},[97,3533,3534,3536],{"class":99,"line":100},[97,3535,2141],{"class":319},[97,3537,2144],{"class":118},[97,3539,3540,3542,3544,3546],{"class":99,"line":195},[97,3541,2149],{"class":319},[97,3543,2152],{"class":319},[97,3545,2155],{"class":111},[97,3547,1483],{"class":103},[97,3549,3550,3552,3554],{"class":99,"line":241},[97,3551,326],{"class":319},[97,3553,2164],{"class":111},[97,3555,2167],{"class":103},[97,3557,3558],{"class":99,"line":1387},[97,3559,1738],{"class":103},[97,3561,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584],{"class":99,"line":1393},[97,3563,3392],{"class":319},[97,3565,1850],{"class":103},[97,3567,326],{"class":319},[97,3569,3223],{"class":103},[97,3571,115],{"class":319},[97,3573,511],{"class":370},[97,3575,3230],{"class":103},[97,3577,104],{"class":319},[97,3579,766],{"class":370},[97,3581,3230],{"class":103},[97,3583,2483],{"class":319},[97,3585,329],{"class":103},[97,3587,3588],{"class":99,"line":1407},[97,3589,2221],{"class":103},[97,3591,3592,3595,3597,3599,3602,3604,3606,3609,3611,3613,3615,3617],{"class":99,"line":1413},[97,3593,3594],{"class":319},"        for",[97,3596,1850],{"class":103},[97,3598,326],{"class":319},[97,3600,3601],{"class":103}," j",[97,3603,115],{"class":319},[97,3605,511],{"class":370},[97,3607,3608],{"class":103},";j",[97,3610,104],{"class":319},[97,3612,766],{"class":370},[97,3614,3608],{"class":103},[97,3616,2483],{"class":319},[97,3618,329],{"class":103},[97,3620,3621],{"class":99,"line":1504},[97,3622,2701],{"class":103},[97,3624,3625,3627,3629,3632],{"class":99,"line":1510},[97,3626,2706],{"class":103},[97,3628,1362],{"class":319},[97,3630,3631],{"class":118},"\"*\"",[97,3633,1483],{"class":103},[97,3635,3636],{"class":99,"line":1522},[97,3637,2720],{"class":103},[97,3639,3640,3643,3645],{"class":99,"line":1804},[97,3641,3642],{"class":103},"        cout",[97,3644,1362],{"class":319},[97,3646,1384],{"class":103},[97,3648,3649],{"class":99,"line":1809},[97,3650,2378],{"class":103},[97,3652,3653],{"class":99,"line":1815},[97,3654,1757],{"class":103},[24,3656,3657],{},"乘法口诀表",[87,3659,3661],{"className":310,"code":3660,"language":312,"meta":92,"style":92},"#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",[94,3662,3663,3669,3679,3687,3691,3717,3721,3746,3750,3790,3794,3802,3806],{"__ignoreMap":92},[97,3664,3665,3667],{"class":99,"line":100},[97,3666,2141],{"class":319},[97,3668,2525],{"class":118},[97,3670,3671,3673,3675,3677],{"class":99,"line":195},[97,3672,2149],{"class":319},[97,3674,2152],{"class":319},[97,3676,2155],{"class":111},[97,3678,1483],{"class":103},[97,3680,3681,3683,3685],{"class":99,"line":241},[97,3682,326],{"class":319},[97,3684,2164],{"class":111},[97,3686,2167],{"class":103},[97,3688,3689],{"class":99,"line":1387},[97,3690,1738],{"class":103},[97,3692,3693,3695,3697,3699,3701,3703,3705,3707,3709,3711,3713,3715],{"class":99,"line":1393},[97,3694,3392],{"class":319},[97,3696,323],{"class":103},[97,3698,326],{"class":319},[97,3700,3223],{"class":103},[97,3702,115],{"class":319},[97,3704,537],{"class":370},[97,3706,3230],{"class":103},[97,3708,104],{"class":319},[97,3710,766],{"class":370},[97,3712,3230],{"class":103},[97,3714,2483],{"class":319},[97,3716,329],{"class":103},[97,3718,3719],{"class":99,"line":1407},[97,3720,2221],{"class":103},[97,3722,3723,3725,3727,3729,3731,3733,3735,3737,3739,3742,3744],{"class":99,"line":1413},[97,3724,3594],{"class":319},[97,3726,323],{"class":103},[97,3728,326],{"class":319},[97,3730,3601],{"class":103},[97,3732,115],{"class":319},[97,3734,537],{"class":370},[97,3736,3608],{"class":103},[97,3738,1780],{"class":319},[97,3740,3741],{"class":103},"i;j",[97,3743,2483],{"class":319},[97,3745,329],{"class":103},[97,3747,3748],{"class":99,"line":1504},[97,3749,2701],{"class":103},[97,3751,3752,3754,3756,3758,3760,3762,3764,3766,3768,3771,3773,3775,3777,3779,3781,3784,3786,3788],{"class":99,"line":1510},[97,3753,2706],{"class":103},[97,3755,1362],{"class":319},[97,3757,787],{"class":103},[97,3759,1362],{"class":319},[97,3761,3631],{"class":118},[97,3763,1362],{"class":319},[97,3765,761],{"class":103},[97,3767,1362],{"class":319},[97,3769,3770],{"class":118},"\"=\"",[97,3772,1362],{"class":319},[97,3774,761],{"class":103},[97,3776,775],{"class":319},[97,3778,787],{"class":103},[97,3780,1362],{"class":319},[97,3782,3783],{"class":118},"'",[97,3785,1423],{"class":370},[97,3787,3783],{"class":118},[97,3789,1483],{"class":103},[97,3791,3792],{"class":99,"line":1522},[97,3793,2720],{"class":103},[97,3795,3796,3798,3800],{"class":99,"line":1804},[97,3797,3642],{"class":103},[97,3799,1362],{"class":319},[97,3801,1384],{"class":103},[97,3803,3804],{"class":99,"line":1809},[97,3805,2378],{"class":103},[97,3807,3808],{"class":99,"line":1815},[97,3809,1757],{"class":103},[48,3811,3813],{"id":3812},"_163跳出语句","1.6.3跳出语句",[138,3815,3816],{},[70,3817,3818],{},"break语句\n作用：用于跳出选择结构或者循环结构",[24,3820,3821],{},"break使用时机：",[67,3823,3824,3827,3830],{},[70,3825,3826],{},"出现在switch条件语句中，作用是终止case并跳出switch",[70,3828,3829],{},"出现在循环结构中，作用是跳出当前的循环结构",[70,3831,3832],{},"出现在嵌套循环中，跳出最近的内层循环语句",[138,3834,3835,3838],{"start":195},[70,3836,3837],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[70,3839,3840],{},"goto语句\n语法：goto 标记;",[24,3842,3843],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[87,3845,3847],{"className":310,"code":3846,"language":312,"meta":92,"style":92},"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",[94,3848,3849,3857,3861,3874,3884,3897,3910,3923,3931,3947],{"__ignoreMap":92},[97,3850,3851,3853,3855],{"class":99,"line":100},[97,3852,326],{"class":319},[97,3854,2164],{"class":111},[97,3856,2167],{"class":103},[97,3858,3859],{"class":99,"line":195},[97,3860,1738],{"class":103},[97,3862,3863,3865,3867,3870,3872],{"class":99,"line":241},[97,3864,1743],{"class":103},[97,3866,1362],{"class":319},[97,3868,3869],{"class":118},"\"1\"",[97,3871,1362],{"class":319},[97,3873,1384],{"class":103},[97,3875,3876,3879,3882],{"class":99,"line":1387},[97,3877,3878],{"class":319},"    goto",[97,3880,3881],{"class":111}," FLAG",[97,3883,1483],{"class":103},[97,3885,3886,3888,3890,3893,3895],{"class":99,"line":1393},[97,3887,1743],{"class":103},[97,3889,1362],{"class":319},[97,3891,3892],{"class":118},"\"2\"",[97,3894,1362],{"class":319},[97,3896,1384],{"class":103},[97,3898,3899,3901,3903,3906,3908],{"class":99,"line":1407},[97,3900,1743],{"class":103},[97,3902,1362],{"class":319},[97,3904,3905],{"class":118},"\"3\"",[97,3907,1362],{"class":319},[97,3909,1384],{"class":103},[97,3911,3912,3914,3916,3919,3921],{"class":99,"line":1413},[97,3913,1743],{"class":103},[97,3915,1362],{"class":319},[97,3917,3918],{"class":118},"\"4\"",[97,3920,1362],{"class":319},[97,3922,1384],{"class":103},[97,3924,3925,3928],{"class":99,"line":1504},[97,3926,3927],{"class":111},"    FLAG",[97,3929,3930],{"class":103},":\n",[97,3932,3933,3935,3937,3940,3942,3944],{"class":99,"line":1510},[97,3934,1743],{"class":103},[97,3936,1362],{"class":319},[97,3938,3939],{"class":118},"\"5\"",[97,3941,1362],{"class":319},[97,3943,1431],{"class":103},[97,3945,3946],{"class":191},"\u002F\u002F跳过了2,3,4,直接到5\n",[97,3948,3949],{"class":99,"line":1522},[97,3950,1757],{"class":103},[14,3952,3954],{"id":3953},"_17数组","1.7数组",[48,3956,3958],{"id":3957},"_171一维数组","1.7.1一维数组",[138,3960,3961],{},[70,3962,3963],{},"一维数组定义方式",[457,3965,3966,3976],{},[460,3967,3968],{},[463,3969,3970,3973],{},[466,3971,3972],{},"方式",[466,3974,3975],{},"注意事项",[504,3977,3978,3992,4002],{},[463,3979,3980,3986],{},[509,3981,3982,3983,377],{},"数据类型 数组名",[97,3984,3985],{},"数组长度",[509,3987,3988,3989,3991],{},"这种方式是先定义再arr",[97,3990,761],{},"赋值",[463,3993,3994,3999],{},[509,3995,3982,3996,3998],{},[97,3997,3985],{},"={值1,值2....};",[509,4000,4001],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[463,4003,4004,4008],{},[509,4005,3982,4006,3998],{},[97,4007],{},[509,4009,4010,4011,4013],{},"int arr",[97,4012],{},";这是不正确的，按照这样的方式定义必须有初始长度",[138,4015,4016],{"start":195},[70,4017,4018],{},"一维数组数组名\n用途：",[67,4020,4021],{},[70,4022,4023],{},"1.可以统计整个数组在内存中的长度：",[87,4025,4027],{"className":310,"code":4026,"language":312,"meta":92,"style":92},"sizeof(arr);\nsizeof(arr[0]);\n",[94,4028,4029,4036],{"__ignoreMap":92},[97,4030,4031,4033],{"class":99,"line":100},[97,4032,320],{"class":319},[97,4034,4035],{"class":103},"(arr);\n",[97,4037,4038,4040,4043,4045],{"class":99,"line":195},[97,4039,320],{"class":319},[97,4041,4042],{"class":103},"(arr[",[97,4044,511],{"class":370},[97,4046,4047],{"class":103},"]);\n",[67,4049,4050],{},[70,4051,4052],{},"2.可以获取数组在内存中的首地址:",[87,4054,4056],{"className":310,"code":4055,"language":312,"meta":92,"style":92},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[94,4057,4058,4063,4076,4081],{"__ignoreMap":92},[97,4059,4060],{"class":99,"line":100},[97,4061,4062],{"class":191},"\u002F\u002F查看16进制的首地址\n",[97,4064,4065,4067,4069,4072,4074],{"class":99,"line":195},[97,4066,1562],{"class":103},[97,4068,1362],{"class":319},[97,4070,4071],{"class":103},"arr",[97,4073,1362],{"class":319},[97,4075,1384],{"class":103},[97,4077,4078],{"class":99,"line":241},[97,4079,4080],{"class":191},"\u002F\u002F看10进制数\n",[97,4082,4083,4085,4087,4089,4091,4093,4095,4098,4100,4102,4104],{"class":99,"line":1387},[97,4084,1562],{"class":103},[97,4086,1362],{"class":319},[97,4088,323],{"class":103},[97,4090,326],{"class":319},[97,4092,749],{"class":103},[97,4094,673],{"class":319},[97,4096,4097],{"class":103},"arr[",[97,4099,511],{"class":370},[97,4101,1259],{"class":103},[97,4103,1362],{"class":319},[97,4105,1384],{"class":103},[24,4107,4108],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[67,4110,4111],{},[70,4112,4113],{},"1️⃣五只小猪称体重",[87,4115,4117],{"className":310,"code":4116,"language":312,"meta":92,"style":92},"#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",[94,4118,4119,4125,4135,4143,4147,4187,4200,4226,4230,4242,4246,4256,4260,4264,4277,4287],{"__ignoreMap":92},[97,4120,4121,4123],{"class":99,"line":100},[97,4122,2141],{"class":319},[97,4124,2144],{"class":118},[97,4126,4127,4129,4131,4133],{"class":99,"line":195},[97,4128,2149],{"class":319},[97,4130,2152],{"class":319},[97,4132,2155],{"class":111},[97,4134,1483],{"class":103},[97,4136,4137,4139,4141],{"class":99,"line":241},[97,4138,326],{"class":319},[97,4140,2164],{"class":111},[97,4142,2167],{"class":103},[97,4144,4145],{"class":99,"line":1387},[97,4146,1738],{"class":103},[97,4148,4149,4151,4154,4156,4158,4160,4162,4165,4167,4170,4172,4174,4176,4179,4181,4184],{"class":99,"line":1393},[97,4150,2176],{"class":319},[97,4152,4153],{"class":103}," arr[",[97,4155,639],{"class":370},[97,4157,1259],{"class":103},[97,4159,115],{"class":319},[97,4161,1216],{"class":103},[97,4163,4164],{"class":370},"300",[97,4166,698],{"class":103},[97,4168,4169],{"class":370},"350",[97,4171,698],{"class":103},[97,4173,1914],{"class":370},[97,4175,698],{"class":103},[97,4177,4178],{"class":370},"400",[97,4180,698],{"class":103},[97,4182,4183],{"class":370},"250",[97,4185,4186],{"class":103},"};\n",[97,4188,4189,4191,4194,4196,4198],{"class":99,"line":1407},[97,4190,2176],{"class":319},[97,4192,4193],{"class":103}," tmp",[97,4195,115],{"class":319},[97,4197,511],{"class":370},[97,4199,1483],{"class":103},[97,4201,4202,4204,4206,4208,4210,4212,4214,4216,4218,4220,4222,4224],{"class":99,"line":1413},[97,4203,3392],{"class":319},[97,4205,1850],{"class":103},[97,4207,326],{"class":319},[97,4209,3223],{"class":103},[97,4211,115],{"class":319},[97,4213,511],{"class":370},[97,4215,3230],{"class":103},[97,4217,104],{"class":319},[97,4219,639],{"class":370},[97,4221,3230],{"class":103},[97,4223,2483],{"class":319},[97,4225,329],{"class":103},[97,4227,4228],{"class":99,"line":1504},[97,4229,2221],{"class":103},[97,4231,4232,4234,4237,4239],{"class":99,"line":1510},[97,4233,2688],{"class":319},[97,4235,4236],{"class":103},"(tmp",[97,4238,104],{"class":319},[97,4240,4241],{"class":103},"arr[i])\n",[97,4243,4244],{"class":99,"line":1522},[97,4245,2701],{"class":103},[97,4247,4248,4251,4253],{"class":99,"line":1804},[97,4249,4250],{"class":103},"            tmp",[97,4252,115],{"class":319},[97,4254,4255],{"class":103},"arr[i];\n",[97,4257,4258],{"class":99,"line":1809},[97,4259,2720],{"class":103},[97,4261,4262],{"class":99,"line":1815},[97,4263,2378],{"class":103},[97,4265,4266,4268,4270,4273,4275],{"class":99,"line":1820},[97,4267,1743],{"class":103},[97,4269,1362],{"class":319},[97,4271,4272],{"class":103},"tmp",[97,4274,1362],{"class":319},[97,4276,1384],{"class":103},[97,4278,4279,4282,4285],{"class":99,"line":1834},[97,4280,4281],{"class":319},"    return",[97,4283,4284],{"class":370}," 0",[97,4286,1483],{"class":103},[97,4288,4289],{"class":99,"line":1839},[97,4290,1757],{"class":103},[67,4292,4293],{},[70,4294,4295],{},"2️⃣数组元素逆置",[87,4297,4299],{"className":310,"code":4298,"language":312,"meta":92,"style":92},"\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",[94,4300,4301,4306,4312,4322,4330,4334,4369,4385,4417,4430,4435,4440,4452,4462,4472,4477,4486,4496,4501,4506,4533,4537,4553,4557,4568,4577],{"__ignoreMap":92},[97,4302,4303],{"class":99,"line":100},[97,4304,4305],{"class":191},"\u002F\u002F元素逆置\n",[97,4307,4308,4310],{"class":99,"line":195},[97,4309,2141],{"class":319},[97,4311,2144],{"class":118},[97,4313,4314,4316,4318,4320],{"class":99,"line":241},[97,4315,2149],{"class":319},[97,4317,2152],{"class":319},[97,4319,2155],{"class":111},[97,4321,1483],{"class":103},[97,4323,4324,4326,4328],{"class":99,"line":1387},[97,4325,326],{"class":319},[97,4327,2164],{"class":111},[97,4329,2167],{"class":103},[97,4331,4332],{"class":99,"line":1393},[97,4333,1738],{"class":103},[97,4335,4336,4339,4341,4343,4345,4347,4349,4351,4353,4355,4357,4359,4361,4363,4365,4367],{"class":99,"line":1407},[97,4337,4338],{"class":319},"   int",[97,4340,4153],{"class":103},[97,4342,639],{"class":370},[97,4344,1259],{"class":103},[97,4346,115],{"class":319},[97,4348,1216],{"class":103},[97,4350,537],{"class":370},[97,4352,698],{"class":103},[97,4354,398],{"class":370},[97,4356,698],{"class":103},[97,4358,392],{"class":370},[97,4360,698],{"class":103},[97,4362,613],{"class":370},[97,4364,698],{"class":103},[97,4366,639],{"class":370},[97,4368,4186],{"class":103},[97,4370,4371,4373,4376,4378,4380,4382],{"class":99,"line":1413},[97,4372,4338],{"class":319},[97,4374,4375],{"class":103}," start",[97,4377,115],{"class":319},[97,4379,511],{"class":370},[97,4381,377],{"class":103},[97,4383,4384],{"class":191},"\u002F\u002F起始下标\n",[97,4386,4387,4389,4392,4395,4398,4401,4403,4405,4408,4410,4412,4414],{"class":99,"line":1504},[97,4388,4338],{"class":319},[97,4390,4391],{"class":103}," end",[97,4393,4394],{"class":319},"=sizeof",[97,4396,4397],{"class":103},"(arr)",[97,4399,4400],{"class":319},"\u002Fsizeof",[97,4402,4042],{"class":103},[97,4404,511],{"class":370},[97,4406,4407],{"class":103},"])",[97,4409,852],{"class":319},[97,4411,537],{"class":370},[97,4413,377],{"class":103},[97,4415,4416],{"class":191},"\u002F\u002F结束下标\n",[97,4418,4419,4422,4425,4427],{"class":99,"line":1510},[97,4420,4421],{"class":319},"   while",[97,4423,4424],{"class":103}," (start",[97,4426,104],{"class":319},[97,4428,4429],{"class":103},"end)\n",[97,4431,4432],{"class":99,"line":1522},[97,4433,4434],{"class":103},"   {\n",[97,4436,4437],{"class":99,"line":1804},[97,4438,4439],{"class":191},"    \u002F\u002F实现元素互换代码\n",[97,4441,4442,4444,4447,4449],{"class":99,"line":1809},[97,4443,2176],{"class":319},[97,4445,4446],{"class":103}," temp",[97,4448,115],{"class":319},[97,4450,4451],{"class":103},"arr[start];\n",[97,4453,4454,4457,4459],{"class":99,"line":1815},[97,4455,4456],{"class":103},"    arr[start]",[97,4458,115],{"class":319},[97,4460,4461],{"class":103},"arr[end];\n",[97,4463,4464,4467,4469],{"class":99,"line":1820},[97,4465,4466],{"class":103},"    arr[end]",[97,4468,115],{"class":319},[97,4470,4471],{"class":103},"temp;\n",[97,4473,4474],{"class":99,"line":1834},[97,4475,4476],{"class":191},"    \u002F\u002F下标更新\n",[97,4478,4479,4482,4484],{"class":99,"line":1839},[97,4480,4481],{"class":103},"    start",[97,4483,2483],{"class":319},[97,4485,1483],{"class":103},[97,4487,4488,4491,4494],{"class":99,"line":1845},[97,4489,4490],{"class":103},"    end",[97,4492,4493],{"class":319},"--",[97,4495,1483],{"class":103},[97,4497,4498],{"class":99,"line":1866},[97,4499,4500],{"class":103},"   }\n",[97,4502,4503],{"class":99,"line":1871},[97,4504,4505],{"class":191},"   \u002F\u002F输出逆置后的数组\n",[97,4507,4508,4511,4513,4515,4517,4519,4521,4523,4525,4527,4529,4531],{"class":99,"line":1885},[97,4509,4510],{"class":319},"   for",[97,4512,1850],{"class":103},[97,4514,326],{"class":319},[97,4516,3223],{"class":103},[97,4518,115],{"class":319},[97,4520,511],{"class":370},[97,4522,3230],{"class":103},[97,4524,104],{"class":319},[97,4526,639],{"class":370},[97,4528,3230],{"class":103},[97,4530,2483],{"class":319},[97,4532,329],{"class":103},[97,4534,4535],{"class":99,"line":1890},[97,4536,4434],{"class":103},[97,4538,4539,4541,4543,4546,4548,4551],{"class":99,"line":1919},[97,4540,1743],{"class":103},[97,4542,1362],{"class":319},[97,4544,4545],{"class":103},"arr[i]",[97,4547,1362],{"class":319},[97,4549,4550],{"class":118},"\" \"",[97,4552,1483],{"class":103},[97,4554,4555],{"class":99,"line":1924},[97,4556,4500],{"class":103},[97,4558,4559,4562,4564,4566],{"class":99,"line":1941},[97,4560,4561],{"class":111},"   system",[97,4563,323],{"class":103},[97,4565,2499],{"class":118},[97,4567,2910],{"class":103},[97,4569,4570,4573,4575],{"class":99,"line":1946},[97,4571,4572],{"class":319},"   return",[97,4574,4284],{"class":370},[97,4576,1483],{"class":103},[97,4578,4579],{"class":99,"line":1951},[97,4580,1757],{"class":103},[67,4582,4583],{},[70,4584,4585],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[87,4587,4589],{"className":310,"code":4588,"language":312,"meta":92,"style":92},"\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",[94,4590,4591,4596,4602,4612,4620,4624,4676,4689,4715,4719,4733,4737,4742,4747,4777,4781,4786,4820,4824,4829,4849,4854,4866,4882,4897,4902,4906,4910,4923,4949,4953,4967,4971,4979],{"__ignoreMap":92},[97,4592,4593],{"class":99,"line":100},[97,4594,4595],{"class":191},"\u002F\u002F冒泡排序,升序\n",[97,4597,4598,4600],{"class":99,"line":195},[97,4599,2141],{"class":319},[97,4601,2144],{"class":118},[97,4603,4604,4606,4608,4610],{"class":99,"line":241},[97,4605,2149],{"class":319},[97,4607,2152],{"class":319},[97,4609,2155],{"class":111},[97,4611,1483],{"class":103},[97,4613,4614,4616,4618],{"class":99,"line":1387},[97,4615,326],{"class":319},[97,4617,2164],{"class":111},[97,4619,2167],{"class":103},[97,4621,4622],{"class":99,"line":1393},[97,4623,1738],{"class":103},[97,4625,4626,4628,4630,4632,4635,4637,4640,4642,4644,4646,4648,4650,4652,4654,4656,4658,4660,4662,4664,4666,4668,4670,4672,4674],{"class":99,"line":1407},[97,4627,2176],{"class":319},[97,4629,4153],{"class":103},[97,4631,740],{"class":370},[97,4633,4634],{"class":103},"] ",[97,4636,115],{"class":319},[97,4638,4639],{"class":103}," {",[97,4641,613],{"class":370},[97,4643,698],{"class":103},[97,4645,398],{"class":370},[97,4647,698],{"class":103},[97,4649,715],{"class":370},[97,4651,698],{"class":103},[97,4653,511],{"class":370},[97,4655,698],{"class":103},[97,4657,639],{"class":370},[97,4659,698],{"class":103},[97,4661,689],{"class":370},[97,4663,698],{"class":103},[97,4665,537],{"class":370},[97,4667,698],{"class":103},[97,4669,392],{"class":370},[97,4671,698],{"class":103},[97,4673,740],{"class":370},[97,4675,4186],{"class":103},[97,4677,4678,4680,4682,4685,4687],{"class":99,"line":1413},[97,4679,1743],{"class":103},[97,4681,1362],{"class":319},[97,4683,4684],{"class":118},"\"排序前：\"",[97,4686,1362],{"class":319},[97,4688,1384],{"class":103},[97,4690,4691,4693,4695,4697,4699,4701,4703,4705,4707,4709,4711,4713],{"class":99,"line":1504},[97,4692,3392],{"class":319},[97,4694,1850],{"class":103},[97,4696,326],{"class":319},[97,4698,3223],{"class":103},[97,4700,115],{"class":319},[97,4702,511],{"class":370},[97,4704,3230],{"class":103},[97,4706,104],{"class":319},[97,4708,740],{"class":370},[97,4710,3230],{"class":103},[97,4712,2483],{"class":319},[97,4714,329],{"class":103},[97,4716,4717],{"class":99,"line":1510},[97,4718,2221],{"class":103},[97,4720,4721,4723,4725,4727,4729,4731],{"class":99,"line":1522},[97,4722,3642],{"class":103},[97,4724,1362],{"class":319},[97,4726,4545],{"class":103},[97,4728,1362],{"class":319},[97,4730,4550],{"class":118},[97,4732,1483],{"class":103},[97,4734,4735],{"class":99,"line":1804},[97,4736,2378],{"class":103},[97,4738,4739],{"class":99,"line":1809},[97,4740,4741],{"class":191},"    \u002F\u002F开始冒泡排序\n",[97,4743,4744],{"class":99,"line":1815},[97,4745,4746],{"class":191},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[97,4748,4749,4751,4753,4755,4757,4759,4761,4763,4765,4767,4769,4771,4773,4775],{"class":99,"line":1820},[97,4750,3392],{"class":319},[97,4752,1850],{"class":103},[97,4754,326],{"class":319},[97,4756,3223],{"class":103},[97,4758,115],{"class":319},[97,4760,511],{"class":370},[97,4762,3230],{"class":103},[97,4764,104],{"class":319},[97,4766,740],{"class":370},[97,4768,852],{"class":319},[97,4770,537],{"class":370},[97,4772,3230],{"class":103},[97,4774,2483],{"class":319},[97,4776,329],{"class":103},[97,4778,4779],{"class":99,"line":1834},[97,4780,2221],{"class":103},[97,4782,4783],{"class":99,"line":1839},[97,4784,4785],{"class":191},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[97,4787,4788,4790,4792,4794,4796,4798,4800,4802,4804,4806,4808,4810,4812,4814,4816,4818],{"class":99,"line":1845},[97,4789,3594],{"class":319},[97,4791,1850],{"class":103},[97,4793,326],{"class":319},[97,4795,3601],{"class":103},[97,4797,115],{"class":319},[97,4799,511],{"class":370},[97,4801,3608],{"class":103},[97,4803,104],{"class":319},[97,4805,740],{"class":370},[97,4807,852],{"class":319},[97,4809,761],{"class":103},[97,4811,852],{"class":319},[97,4813,537],{"class":370},[97,4815,3608],{"class":103},[97,4817,2483],{"class":319},[97,4819,329],{"class":103},[97,4821,4822],{"class":99,"line":1866},[97,4823,2701],{"class":103},[97,4825,4826],{"class":99,"line":1871},[97,4827,4828],{"class":191},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[97,4830,4831,4834,4837,4839,4842,4844,4846],{"class":99,"line":1885},[97,4832,4833],{"class":319},"            if",[97,4835,4836],{"class":103},"(arr[j]",[97,4838,1279],{"class":319},[97,4840,4841],{"class":103},"arr[j",[97,4843,801],{"class":319},[97,4845,537],{"class":370},[97,4847,4848],{"class":103},"])\n",[97,4850,4851],{"class":99,"line":1890},[97,4852,4853],{"class":103},"            {\n",[97,4855,4856,4859,4861,4863],{"class":99,"line":1919},[97,4857,4858],{"class":319},"                int",[97,4860,4446],{"class":103},[97,4862,115],{"class":319},[97,4864,4865],{"class":103},"arr[j];\n",[97,4867,4868,4871,4873,4875,4877,4879],{"class":99,"line":1924},[97,4869,4870],{"class":103},"                arr[j]",[97,4872,115],{"class":319},[97,4874,4841],{"class":103},[97,4876,801],{"class":319},[97,4878,537],{"class":370},[97,4880,4881],{"class":103},"];\n",[97,4883,4884,4887,4889,4891,4893,4895],{"class":99,"line":1941},[97,4885,4886],{"class":103},"                arr[j",[97,4888,801],{"class":319},[97,4890,537],{"class":370},[97,4892,1259],{"class":103},[97,4894,115],{"class":319},[97,4896,4471],{"class":103},[97,4898,4899],{"class":99,"line":1946},[97,4900,4901],{"class":103},"            }\n",[97,4903,4904],{"class":99,"line":1951},[97,4905,2720],{"class":103},[97,4907,4908],{"class":99,"line":1956},[97,4909,2378],{"class":103},[97,4911,4912,4914,4916,4919,4921],{"class":99,"line":1970},[97,4913,1743],{"class":103},[97,4915,1362],{"class":319},[97,4917,4918],{"class":118},"\"排序后：\"",[97,4920,1362],{"class":319},[97,4922,1384],{"class":103},[97,4924,4925,4927,4929,4931,4933,4935,4937,4939,4941,4943,4945,4947],{"class":99,"line":1975},[97,4926,3392],{"class":319},[97,4928,1850],{"class":103},[97,4930,326],{"class":319},[97,4932,3223],{"class":103},[97,4934,115],{"class":319},[97,4936,511],{"class":370},[97,4938,3230],{"class":103},[97,4940,104],{"class":319},[97,4942,740],{"class":370},[97,4944,3230],{"class":103},[97,4946,2483],{"class":319},[97,4948,329],{"class":103},[97,4950,4951],{"class":99,"line":2768},[97,4952,2221],{"class":103},[97,4954,4955,4957,4959,4961,4963,4965],{"class":99,"line":2782},[97,4956,3642],{"class":103},[97,4958,1362],{"class":319},[97,4960,4545],{"class":103},[97,4962,1362],{"class":319},[97,4964,4550],{"class":118},[97,4966,1483],{"class":103},[97,4968,4969],{"class":99,"line":2790},[97,4970,2378],{"class":103},[97,4972,4973,4975,4977],{"class":99,"line":2795},[97,4974,4281],{"class":319},[97,4976,4284],{"class":370},[97,4978,1483],{"class":103},[97,4980,4981],{"class":99,"line":2801},[97,4982,1757],{"class":103},[48,4984,4986],{"id":4985},"_172二维数组","1.7.2二维数组",[138,4988,4989],{},[70,4990,4991],{},"二维数组的四种定义方式",[457,4993,4994,5003],{},[460,4995,4996],{},[463,4997,4998,5001],{},[466,4999,5000],{},"序号",[466,5002,3972],{},[504,5004,5005,5015,5024,5033,5042],{},[463,5006,5007,5009],{},[509,5008,537],{},[509,5010,5011,5012,377],{},"数据类型 数组名[行数]",[97,5013,5014],{},"列数",[463,5016,5017,5019],{},[509,5018,398],{},[509,5020,5011,5021,5023],{},[97,5022,5014],{},"={ {数据1,数据2}，{数据3，数据4}... }",[463,5025,5026,5028],{},[509,5027,392],{},[509,5029,5011,5030,5032],{},[97,5031,5014],{},"={数据1,数据2,数据3...}",[463,5034,5035,5037],{},[509,5036,613],{},[509,5038,5039,5040,5032],{},"数据类型 数组名[]",[97,5041,5014],{},[463,5043,5044,5047],{},[509,5045,5046],{},"注意：不能只省略列数",[509,5048],{},[138,5050,5051],{"start":195},[70,5052,5053],{},"二维数组数组名",[67,5055,5056,5059],{},[70,5057,5058],{},"1.查看二维数组所占内存空间",[70,5060,5061],{},"2.获取二维数组首地址",[24,5063,5064],{},"已知二维数组，求二维数组的行数与列数",[87,5066,5068],{"className":310,"code":5067,"language":312,"meta":92,"style":92},"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",[94,5069,5070,5078,5082,5100,5104,5122,5138,5143,5168,5201],{"__ignoreMap":92},[97,5071,5072,5074,5076],{"class":99,"line":100},[97,5073,326],{"class":319},[97,5075,2164],{"class":111},[97,5077,2167],{"class":103},[97,5079,5080],{"class":99,"line":195},[97,5081,1738],{"class":103},[97,5083,5084,5086,5088,5090,5093,5095,5097],{"class":99,"line":241},[97,5085,2176],{"class":319},[97,5087,4153],{"class":103},[97,5089,398],{"class":370},[97,5091,5092],{"class":103},"][",[97,5094,392],{"class":370},[97,5096,1259],{"class":103},[97,5098,5099],{"class":319},"=\n",[97,5101,5102],{"class":99,"line":1387},[97,5103,2221],{"class":103},[97,5105,5106,5109,5111,5113,5115,5117,5119],{"class":99,"line":1393},[97,5107,5108],{"class":103},"        {",[97,5110,537],{"class":370},[97,5112,698],{"class":103},[97,5114,398],{"class":370},[97,5116,698],{"class":103},[97,5118,392],{"class":370},[97,5120,5121],{"class":103},"},\n",[97,5123,5124,5126,5128,5130,5132,5134,5136],{"class":99,"line":1407},[97,5125,5108],{"class":103},[97,5127,613],{"class":370},[97,5129,698],{"class":103},[97,5131,639],{"class":370},[97,5133,698],{"class":103},[97,5135,664],{"class":370},[97,5137,1757],{"class":103},[97,5139,5140],{"class":99,"line":1413},[97,5141,5142],{"class":103},"    };\n",[97,5144,5145,5147,5149,5152,5154,5156,5158,5160,5162,5164,5166],{"class":99,"line":1504},[97,5146,1743],{"class":103},[97,5148,1362],{"class":319},[97,5150,5151],{"class":118},"\"二维数组的行数\"",[97,5153,1565],{"class":319},[97,5155,4397],{"class":103},[97,5157,4400],{"class":319},[97,5159,4042],{"class":103},[97,5161,511],{"class":370},[97,5163,4407],{"class":103},[97,5165,1362],{"class":319},[97,5167,1384],{"class":103},[97,5169,5170,5172,5174,5177,5179,5181,5183,5185,5187,5189,5191,5193,5195,5197,5199],{"class":99,"line":1510},[97,5171,1743],{"class":103},[97,5173,1362],{"class":319},[97,5175,5176],{"class":118},"\"二维数组的列数\"",[97,5178,1565],{"class":319},[97,5180,4042],{"class":103},[97,5182,511],{"class":370},[97,5184,4407],{"class":103},[97,5186,4400],{"class":319},[97,5188,4042],{"class":103},[97,5190,511],{"class":370},[97,5192,5092],{"class":103},[97,5194,511],{"class":370},[97,5196,4407],{"class":103},[97,5198,1362],{"class":319},[97,5200,1384],{"class":103},[97,5202,5203],{"class":99,"line":1522},[97,5204,1757],{"class":103},[24,5206,5207],{},"查看二维数组首地址",[87,5209,5211],{"className":310,"code":5210,"language":312,"meta":92,"style":92},"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",[94,5212,5213,5230,5256,5281],{"__ignoreMap":92},[97,5214,5215,5217,5219,5222,5224,5226,5228],{"class":99,"line":100},[97,5216,1562],{"class":103},[97,5218,1362],{"class":319},[97,5220,5221],{"class":118},"\"二维数组首地址：\"",[97,5223,1362],{"class":319},[97,5225,4071],{"class":103},[97,5227,1362],{"class":319},[97,5229,1384],{"class":103},[97,5231,5232,5234,5236,5239,5241,5243,5245,5248,5250,5252,5254],{"class":99,"line":195},[97,5233,1562],{"class":103},[97,5235,1362],{"class":319},[97,5237,5238],{"class":118},"\"二维数组第一行的首地址：\"",[97,5240,1362],{"class":319},[97,5242,323],{"class":103},[97,5244,326],{"class":319},[97,5246,5247],{"class":103},")arr[",[97,5249,511],{"class":370},[97,5251,1259],{"class":103},[97,5253,1362],{"class":319},[97,5255,1384],{"class":103},[97,5257,5258,5260,5262,5265,5267,5269,5271,5273,5275,5277,5279],{"class":99,"line":241},[97,5259,1562],{"class":103},[97,5261,1362],{"class":319},[97,5263,5264],{"class":118},"\"二维数组第二行的首地址：\"",[97,5266,1362],{"class":319},[97,5268,323],{"class":103},[97,5270,326],{"class":319},[97,5272,5247],{"class":103},[97,5274,537],{"class":370},[97,5276,1259],{"class":103},[97,5278,1362],{"class":319},[97,5280,1384],{"class":103},[97,5282,5283,5285,5287,5290,5292,5294,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314],{"class":99,"line":1387},[97,5284,1562],{"class":103},[97,5286,1362],{"class":319},[97,5288,5289],{"class":118},"\"二维数组第一个元素的首地址:\"",[97,5291,1362],{"class":319},[97,5293,323],{"class":103},[97,5295,326],{"class":319},[97,5297,749],{"class":103},[97,5299,673],{"class":319},[97,5301,4097],{"class":103},[97,5303,511],{"class":370},[97,5305,5092],{"class":103},[97,5307,511],{"class":370},[97,5309,1259],{"class":103},[97,5311,1362],{"class":319},[97,5313,1431],{"class":103},[97,5315,5316],{"class":191},"\u002F\u002F对于数，要加取址符\n",[231,5318,5319],{},"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":92,"searchDepth":195,"depth":195,"links":5321},[5322,5323,5324,5332,5333,5339,5344],{"id":265,"depth":195,"text":266},{"id":272,"depth":195,"text":273},{"id":287,"depth":195,"text":288,"children":5325},[5326,5327,5328,5329,5330,5331],{"id":291,"depth":241,"text":292},{"id":339,"depth":241,"text":340},{"id":406,"depth":241,"text":407},{"id":1343,"depth":241,"text":1344},{"id":1437,"depth":241,"text":1438},{"id":1536,"depth":241,"text":1537},{"id":1578,"depth":195,"text":1579},{"id":1646,"depth":195,"text":1647,"children":5334},[5335,5336,5337,5338],{"id":1650,"depth":241,"text":1651},{"id":1671,"depth":241,"text":1672},{"id":1680,"depth":241,"text":1681},{"id":1689,"depth":241,"text":1690},{"id":1698,"depth":195,"text":1699,"children":5340},[5341,5342,5343],{"id":1702,"depth":241,"text":1703},{"id":2396,"depth":241,"text":2397},{"id":3812,"depth":241,"text":3813},{"id":3953,"depth":195,"text":3954,"children":5345},[5346,5347],{"id":3957,"depth":241,"text":3958},{"id":4985,"depth":241,"text":4986},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":257,"description":92},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5354,"title":5355,"body":5356,"description":92,"extension":247,"meta":6456,"navigation":249,"path":6457,"seo":6458,"stem":6459,"__hash__":6460},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5357,"toc":6448},[5358,5361,5365,5373,5381,5384,5450,5454,5457,5533,5537,5540,5543,5546,5759,5763,5768,5832,5837,5904,5909,6000,6003,6108,6112,6115,6121,6265,6269,6272,6286,6289,6334,6337,6445],[10,5359,5355],{"id":5360},"_2函数",[14,5362,5364],{"id":5363},"_21函数概述","2.1函数概述",[138,5366,5367,5370],{},[70,5368,5369],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[70,5371,5372],{},"语法：",[87,5374,5379],{"className":5375,"code":5377,"language":5378,"meta":92},[5376],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[94,5380,5377],{"__ignoreMap":92},[24,5382,5383],{},"小案例",[87,5385,5387],{"className":310,"code":5386,"language":312,"meta":92,"style":92},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[94,5388,5389,5394,5418,5422,5439,5446],{"__ignoreMap":92},[97,5390,5391],{"class":99,"line":100},[97,5392,5393],{"class":191},"\u002F\u002Fnum1,num2形参\n",[97,5395,5396,5398,5401,5403,5405,5409,5411,5413,5416],{"class":99,"line":195},[97,5397,326],{"class":319},[97,5399,5400],{"class":111}," add",[97,5402,323],{"class":103},[97,5404,326],{"class":319},[97,5406,5408],{"class":5407},"s4XuR"," num1",[97,5410,698],{"class":103},[97,5412,326],{"class":319},[97,5414,5415],{"class":5407}," num2",[97,5417,329],{"class":103},[97,5419,5420],{"class":99,"line":241},[97,5421,1738],{"class":103},[97,5423,5424,5426,5429,5431,5434,5436],{"class":99,"line":1387},[97,5425,2176],{"class":319},[97,5427,5428],{"class":103}," sum",[97,5430,115],{"class":319},[97,5432,5433],{"class":103},"num1",[97,5435,801],{"class":319},[97,5437,5438],{"class":103},"num2;\n",[97,5440,5441,5443],{"class":99,"line":1393},[97,5442,4281],{"class":319},[97,5444,5445],{"class":103}," sum;\n",[97,5447,5448],{"class":99,"line":1407},[97,5449,1757],{"class":103},[14,5451,5453],{"id":5452},"_22函数调用","2.2函数调用",[24,5455,5456],{},"调用刚刚写的求和函数",[87,5458,5460],{"className":310,"code":5459,"language":312,"meta":92,"style":92},"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",[94,5461,5462,5470,5474,5479,5491,5503,5512,5517,5529],{"__ignoreMap":92},[97,5463,5464,5466,5468],{"class":99,"line":100},[97,5465,326],{"class":319},[97,5467,2164],{"class":111},[97,5469,2167],{"class":103},[97,5471,5472],{"class":99,"line":195},[97,5473,1738],{"class":103},[97,5475,5476],{"class":99,"line":241},[97,5477,5478],{"class":191},"    \u002F\u002Fa,b实参\n",[97,5480,5481,5483,5485,5487,5489],{"class":99,"line":1387},[97,5482,2176],{"class":319},[97,5484,1591],{"class":103},[97,5486,115],{"class":319},[97,5488,511],{"class":370},[97,5490,1483],{"class":103},[97,5492,5493,5495,5497,5499,5501],{"class":99,"line":1393},[97,5494,2176],{"class":319},[97,5496,3024],{"class":103},[97,5498,115],{"class":319},[97,5500,511],{"class":370},[97,5502,1483],{"class":103},[97,5504,5505,5507,5509],{"class":99,"line":1407},[97,5506,2203],{"class":103},[97,5508,1622],{"class":319},[97,5510,5511],{"class":103},"a,b;\n",[97,5513,5514],{"class":99,"line":1413},[97,5515,5516],{"class":191},"    \u002F\u002F调用函数时，实参值传给了形参\n",[97,5518,5519,5521,5523,5526],{"class":99,"line":1504},[97,5520,1743],{"class":103},[97,5522,1362],{"class":319},[97,5524,5525],{"class":111},"add",[97,5527,5528],{"class":103},"(a,b);\n",[97,5530,5531],{"class":99,"line":1510},[97,5532,1757],{"class":103},[14,5534,5536],{"id":5535},"_23值传递","2.3值传递",[24,5538,5539],{},"值传递就是函数调用时实参将数值传给形参",[24,5541,5542],{},"值传递时，如果形参发生任何改变，不会影响实参",[24,5544,5545],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[87,5547,5549],{"className":310,"code":5548,"language":312,"meta":92,"style":92},"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",[94,5550,5551,5573,5577,5590,5607,5625,5636,5645,5654,5667,5683,5699,5708,5712,5720,5724,5736,5748,5755],{"__ignoreMap":92},[97,5552,5553,5556,5559,5561,5563,5565,5567,5569,5571],{"class":99,"line":100},[97,5554,5555],{"class":319},"void",[97,5557,5558],{"class":111}," swap",[97,5560,323],{"class":103},[97,5562,326],{"class":319},[97,5564,5408],{"class":5407},[97,5566,698],{"class":103},[97,5568,326],{"class":319},[97,5570,5415],{"class":5407},[97,5572,329],{"class":103},[97,5574,5575],{"class":99,"line":195},[97,5576,1738],{"class":103},[97,5578,5579,5581,5583,5586,5588],{"class":99,"line":241},[97,5580,1743],{"class":103},[97,5582,1362],{"class":319},[97,5584,5585],{"class":118},"\"交换前：\"",[97,5587,1362],{"class":319},[97,5589,1384],{"class":103},[97,5591,5592,5594,5596,5599,5601,5603,5605],{"class":99,"line":1387},[97,5593,1743],{"class":103},[97,5595,1362],{"class":319},[97,5597,5598],{"class":118},"\"num1=\"",[97,5600,1362],{"class":319},[97,5602,5433],{"class":103},[97,5604,1362],{"class":319},[97,5606,1384],{"class":103},[97,5608,5609,5611,5613,5616,5618,5621,5623],{"class":99,"line":1393},[97,5610,1743],{"class":103},[97,5612,1362],{"class":319},[97,5614,5615],{"class":118},"\"num2=\"",[97,5617,1362],{"class":319},[97,5619,5620],{"class":103},"num2",[97,5622,1362],{"class":319},[97,5624,1384],{"class":103},[97,5626,5627,5629,5631,5633],{"class":99,"line":1407},[97,5628,2176],{"class":319},[97,5630,4446],{"class":103},[97,5632,115],{"class":319},[97,5634,5635],{"class":103},"num1;\n",[97,5637,5638,5641,5643],{"class":99,"line":1413},[97,5639,5640],{"class":103},"    num1",[97,5642,115],{"class":319},[97,5644,5438],{"class":103},[97,5646,5647,5650,5652],{"class":99,"line":1504},[97,5648,5649],{"class":103},"    num2",[97,5651,115],{"class":319},[97,5653,4471],{"class":103},[97,5655,5656,5658,5660,5663,5665],{"class":99,"line":1510},[97,5657,1743],{"class":103},[97,5659,1362],{"class":319},[97,5661,5662],{"class":118},"\"交换后：\"",[97,5664,1362],{"class":319},[97,5666,1384],{"class":103},[97,5668,5669,5671,5673,5675,5677,5679,5681],{"class":99,"line":1522},[97,5670,1743],{"class":103},[97,5672,1362],{"class":319},[97,5674,5598],{"class":118},[97,5676,1362],{"class":319},[97,5678,5433],{"class":103},[97,5680,1362],{"class":319},[97,5682,1384],{"class":103},[97,5684,5685,5687,5689,5691,5693,5695,5697],{"class":99,"line":1804},[97,5686,1743],{"class":103},[97,5688,1362],{"class":319},[97,5690,5615],{"class":118},[97,5692,1362],{"class":319},[97,5694,5620],{"class":103},[97,5696,1362],{"class":319},[97,5698,1384],{"class":103},[97,5700,5701,5703,5705],{"class":99,"line":1809},[97,5702,4281],{"class":319},[97,5704,377],{"class":103},[97,5706,5707],{"class":191},"\u002F\u002F或者不写\n",[97,5709,5710],{"class":99,"line":1815},[97,5711,1757],{"class":103},[97,5713,5714,5716,5718],{"class":99,"line":1820},[97,5715,326],{"class":319},[97,5717,2164],{"class":111},[97,5719,2167],{"class":103},[97,5721,5722],{"class":99,"line":1834},[97,5723,1738],{"class":103},[97,5725,5726,5728,5730,5732,5734],{"class":99,"line":1839},[97,5727,2176],{"class":319},[97,5729,1591],{"class":103},[97,5731,115],{"class":319},[97,5733,766],{"class":370},[97,5735,1483],{"class":103},[97,5737,5738,5740,5742,5744,5746],{"class":99,"line":1845},[97,5739,2176],{"class":319},[97,5741,3024],{"class":103},[97,5743,115],{"class":319},[97,5745,1020],{"class":370},[97,5747,1483],{"class":103},[97,5749,5750,5753],{"class":99,"line":1866},[97,5751,5752],{"class":111},"    swap",[97,5754,5528],{"class":103},[97,5756,5757],{"class":99,"line":1871},[97,5758,1757],{"class":103},[14,5760,5762],{"id":5761},"_24函数的常见形式","2.4函数的常见形式",[138,5764,5765],{},[70,5766,5767],{},"无参无返",[87,5769,5771],{"className":310,"code":5770,"language":312,"meta":92,"style":92},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[94,5772,5773,5782,5786,5799,5803,5811,5815,5820,5828],{"__ignoreMap":92},[97,5774,5775,5777,5780],{"class":99,"line":100},[97,5776,5555],{"class":319},[97,5778,5779],{"class":111}," test01",[97,5781,2167],{"class":103},[97,5783,5784],{"class":99,"line":195},[97,5785,1738],{"class":103},[97,5787,5788,5790,5792,5795,5797],{"class":99,"line":241},[97,5789,1743],{"class":103},[97,5791,1362],{"class":319},[97,5793,5794],{"class":118},"\"你好\"",[97,5796,1362],{"class":319},[97,5798,1384],{"class":103},[97,5800,5801],{"class":99,"line":1387},[97,5802,1757],{"class":103},[97,5804,5805,5807,5809],{"class":99,"line":1393},[97,5806,326],{"class":319},[97,5808,2164],{"class":111},[97,5810,2167],{"class":103},[97,5812,5813],{"class":99,"line":1407},[97,5814,1738],{"class":103},[97,5816,5817],{"class":99,"line":1413},[97,5818,5819],{"class":191},"    \u002F\u002F函数调用\n",[97,5821,5822,5825],{"class":99,"line":1504},[97,5823,5824],{"class":111},"    test01",[97,5826,5827],{"class":103},"();\n",[97,5829,5830],{"class":99,"line":1510},[97,5831,1757],{"class":103},[138,5833,5834],{"start":195},[70,5835,5836],{},"有参无返",[87,5838,5840],{"className":310,"code":5839,"language":312,"meta":92,"style":92},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[94,5841,5842,5857,5861,5873,5877,5885,5889,5900],{"__ignoreMap":92},[97,5843,5844,5846,5849,5851,5853,5855],{"class":99,"line":100},[97,5845,5555],{"class":319},[97,5847,5848],{"class":111}," test02",[97,5850,323],{"class":103},[97,5852,326],{"class":319},[97,5854,1591],{"class":5407},[97,5856,329],{"class":103},[97,5858,5859],{"class":99,"line":195},[97,5860,1738],{"class":103},[97,5862,5863,5865,5867,5869,5871],{"class":99,"line":241},[97,5864,1743],{"class":103},[97,5866,1362],{"class":319},[97,5868,5794],{"class":118},[97,5870,1362],{"class":319},[97,5872,1384],{"class":103},[97,5874,5875],{"class":99,"line":1387},[97,5876,1757],{"class":103},[97,5878,5879,5881,5883],{"class":99,"line":1393},[97,5880,326],{"class":319},[97,5882,2164],{"class":111},[97,5884,2167],{"class":103},[97,5886,5887],{"class":99,"line":1407},[97,5888,1738],{"class":103},[97,5890,5891,5894,5896,5898],{"class":99,"line":1413},[97,5892,5893],{"class":111},"    test02",[97,5895,323],{"class":103},[97,5897,631],{"class":370},[97,5899,2910],{"class":103},[97,5901,5902],{"class":99,"line":1504},[97,5903,1757],{"class":103},[138,5905,5906],{"start":241},[70,5907,5908],{},"无参有返",[87,5910,5912],{"className":310,"code":5911,"language":312,"meta":92,"style":92},"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",[94,5913,5914,5923,5927,5939,5948,5952,5960,5964,5977,5996],{"__ignoreMap":92},[97,5915,5916,5918,5921],{"class":99,"line":100},[97,5917,326],{"class":319},[97,5919,5920],{"class":111}," test03",[97,5922,2167],{"class":103},[97,5924,5925],{"class":99,"line":195},[97,5926,1738],{"class":103},[97,5928,5929,5931,5933,5935,5937],{"class":99,"line":241},[97,5930,1743],{"class":103},[97,5932,1362],{"class":319},[97,5934,5794],{"class":118},[97,5936,1362],{"class":319},[97,5938,1384],{"class":103},[97,5940,5941,5943,5946],{"class":99,"line":1387},[97,5942,4281],{"class":319},[97,5944,5945],{"class":370}," 100",[97,5947,1483],{"class":103},[97,5949,5950],{"class":99,"line":1393},[97,5951,1757],{"class":103},[97,5953,5954,5956,5958],{"class":99,"line":1407},[97,5955,326],{"class":319},[97,5957,2164],{"class":111},[97,5959,2167],{"class":103},[97,5961,5962],{"class":99,"line":1413},[97,5963,1738],{"class":103},[97,5965,5966,5968,5970,5972,5975],{"class":99,"line":1504},[97,5967,2176],{"class":319},[97,5969,5408],{"class":103},[97,5971,115],{"class":319},[97,5973,5974],{"class":111},"test03",[97,5976,5827],{"class":103},[97,5978,5979,5981,5983,5985,5987,5989,5991,5993],{"class":99,"line":1510},[97,5980,1743],{"class":103},[97,5982,1362],{"class":319},[97,5984,5598],{"class":118},[97,5986,1362],{"class":319},[97,5988,5433],{"class":103},[97,5990,1362],{"class":319},[97,5992,1431],{"class":103},[97,5994,5995],{"class":191}," \u002F\u002F100\n",[97,5997,5998],{"class":99,"line":1522},[97,5999,1757],{"class":103},[24,6001,6002],{},"4.有参有返",[87,6004,6006],{"className":310,"code":6005,"language":312,"meta":92,"style":92},"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",[94,6007,6008,6023,6027,6040,6046,6050,6059,6063,6075,6089,6104],{"__ignoreMap":92},[97,6009,6010,6012,6015,6017,6019,6021],{"class":99,"line":100},[97,6011,326],{"class":319},[97,6013,6014],{"class":111}," test04",[97,6016,323],{"class":103},[97,6018,326],{"class":319},[97,6020,1591],{"class":5407},[97,6022,329],{"class":103},[97,6024,6025],{"class":99,"line":195},[97,6026,1738],{"class":103},[97,6028,6029,6031,6033,6036,6038],{"class":99,"line":241},[97,6030,1743],{"class":103},[97,6032,1362],{"class":319},[97,6034,6035],{"class":118},"\"hello\"",[97,6037,1362],{"class":319},[97,6039,1384],{"class":103},[97,6041,6042,6044],{"class":99,"line":1387},[97,6043,4281],{"class":319},[97,6045,1625],{"class":103},[97,6047,6048],{"class":99,"line":1393},[97,6049,1757],{"class":103},[97,6051,6052,6054,6057],{"class":99,"line":1407},[97,6053,326],{"class":319},[97,6055,6056],{"class":111}," mian",[97,6058,2167],{"class":103},[97,6060,6061],{"class":99,"line":1413},[97,6062,1738],{"class":103},[97,6064,6065,6067,6069,6071,6073],{"class":99,"line":1504},[97,6066,2176],{"class":319},[97,6068,3024],{"class":103},[97,6070,115],{"class":319},[97,6072,537],{"class":370},[97,6074,1483],{"class":103},[97,6076,6077,6079,6081,6083,6086],{"class":99,"line":1510},[97,6078,2176],{"class":319},[97,6080,3040],{"class":103},[97,6082,115],{"class":319},[97,6084,6085],{"class":111},"test04",[97,6087,6088],{"class":103},"(b);\n",[97,6090,6091,6093,6095,6097,6099,6101],{"class":99,"line":1522},[97,6092,1743],{"class":103},[97,6094,1362],{"class":319},[97,6096,608],{"class":103},[97,6098,1362],{"class":319},[97,6100,1431],{"class":103},[97,6102,6103],{"class":191}," \u002F\u002F1\n",[97,6105,6106],{"class":99,"line":1804},[97,6107,1757],{"class":103},[14,6109,6111],{"id":6110},"_25函数的声明","2.5函数的声明",[24,6113,6114],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[24,6116,6117,6118],{},"函数的",[469,6119,6120],{},"声明可以多次，但是函数的定义只能有一次",[87,6122,6124],{"className":310,"code":6123,"language":312,"meta":92,"style":92},"\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",[94,6125,6126,6131,6136,6161,6170,6174,6186,6198,6214,6218,6238,6242,6261],{"__ignoreMap":92},[97,6127,6128],{"class":99,"line":100},[97,6129,6130],{"class":191},"\u002F\u002F函数声明\n",[97,6132,6133],{"class":99,"line":195},[97,6134,6135],{"class":191},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[97,6137,6138,6140,6143,6145,6147,6149,6151,6153,6155,6158],{"class":99,"line":241},[97,6139,326],{"class":319},[97,6141,6142],{"class":111}," max",[97,6144,323],{"class":103},[97,6146,326],{"class":319},[97,6148,1591],{"class":5407},[97,6150,698],{"class":103},[97,6152,326],{"class":319},[97,6154,3024],{"class":5407},[97,6156,6157],{"class":103},");",[97,6159,6160],{"class":191},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[97,6162,6163,6165,6167],{"class":99,"line":1387},[97,6164,326],{"class":319},[97,6166,2164],{"class":111},[97,6168,6169],{"class":103},"() \n",[97,6171,6172],{"class":99,"line":1393},[97,6173,1738],{"class":103},[97,6175,6176,6178,6180,6182,6184],{"class":99,"line":1407},[97,6177,2176],{"class":319},[97,6179,1591],{"class":103},[97,6181,115],{"class":319},[97,6183,766],{"class":370},[97,6185,1483],{"class":103},[97,6187,6188,6190,6192,6194,6196],{"class":99,"line":1413},[97,6189,2176],{"class":319},[97,6191,3024],{"class":103},[97,6193,115],{"class":319},[97,6195,1020],{"class":370},[97,6197,1483],{"class":103},[97,6199,6200,6202,6204,6207,6210,6212],{"class":99,"line":1504},[97,6201,1743],{"class":103},[97,6203,1362],{"class":319},[97,6205,6206],{"class":111},"max",[97,6208,6209],{"class":103},"(a,b)",[97,6211,1362],{"class":319},[97,6213,1384],{"class":103},[97,6215,6216],{"class":99,"line":1510},[97,6217,1757],{"class":103},[97,6219,6220,6222,6224,6226,6228,6230,6232,6234,6236],{"class":99,"line":1522},[97,6221,326],{"class":319},[97,6223,6142],{"class":111},[97,6225,323],{"class":103},[97,6227,326],{"class":319},[97,6229,1591],{"class":5407},[97,6231,698],{"class":103},[97,6233,326],{"class":319},[97,6235,3024],{"class":5407},[97,6237,329],{"class":103},[97,6239,6240],{"class":99,"line":1804},[97,6241,1738],{"class":103},[97,6243,6244,6246,6248,6250,6252,6254,6256,6258],{"class":99,"line":1809},[97,6245,4281],{"class":319},[97,6247,1591],{"class":103},[97,6249,1279],{"class":319},[97,6251,583],{"class":103},[97,6253,1305],{"class":319},[97,6255,558],{"class":103},[97,6257,1179],{"class":319},[97,6259,6260],{"class":103},"b;\n",[97,6262,6263],{"class":99,"line":1815},[97,6264,1757],{"class":103},[14,6266,6268],{"id":6267},"_26函数的分文件编写","2.6函数的分文件编写",[24,6270,6271],{},"4个步骤：",[67,6273,6274,6277,6280,6283],{},[70,6275,6276],{},"1.创建后缀名为.h的头文件",[70,6278,6279],{},"2.创建后缀名为.cpp的源文件",[70,6281,6282],{},"3.在头文件中写函数的定义",[70,6284,6285],{},"4.在源文件中写函数的定义\n示例：",[24,6287,6288],{},"头文件：swap.h",[87,6290,6292],{"className":310,"code":6291,"language":312,"meta":92,"style":92},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[94,6293,6294,6300,6310,6314],{"__ignoreMap":92},[97,6295,6296,6298],{"class":99,"line":100},[97,6297,2141],{"class":319},[97,6299,2144],{"class":118},[97,6301,6302,6304,6306,6308],{"class":99,"line":195},[97,6303,2149],{"class":319},[97,6305,2152],{"class":319},[97,6307,2155],{"class":111},[97,6309,1483],{"class":103},[97,6311,6312],{"class":99,"line":241},[97,6313,6130],{"class":191},[97,6315,6316,6318,6320,6322,6324,6326,6328,6330,6332],{"class":99,"line":1387},[97,6317,5555],{"class":319},[97,6319,5558],{"class":111},[97,6321,323],{"class":103},[97,6323,326],{"class":319},[97,6325,1591],{"class":5407},[97,6327,698],{"class":103},[97,6329,326],{"class":319},[97,6331,3024],{"class":5407},[97,6333,2910],{"class":103},[24,6335,6336],{},"源文件：swap.cpp",[87,6338,6340],{"className":310,"code":6339,"language":312,"meta":92,"style":92},"#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",[94,6341,6342,6349,6354,6374,6378,6389,6398,6407,6424,6441],{"__ignoreMap":92},[97,6343,6344,6346],{"class":99,"line":100},[97,6345,2141],{"class":319},[97,6347,6348],{"class":118}," \"swap.h\"\n",[97,6350,6351],{"class":99,"line":195},[97,6352,6353],{"class":191},"\u002F\u002F函数的定义\n",[97,6355,6356,6358,6360,6362,6364,6366,6368,6370,6372],{"class":99,"line":241},[97,6357,5555],{"class":319},[97,6359,5558],{"class":111},[97,6361,323],{"class":103},[97,6363,326],{"class":319},[97,6365,1591],{"class":5407},[97,6367,698],{"class":103},[97,6369,326],{"class":319},[97,6371,3024],{"class":5407},[97,6373,329],{"class":103},[97,6375,6376],{"class":99,"line":1387},[97,6377,1738],{"class":103},[97,6379,6380,6382,6384,6386],{"class":99,"line":1393},[97,6381,2176],{"class":319},[97,6383,4446],{"class":103},[97,6385,115],{"class":319},[97,6387,6388],{"class":103},"a;\n",[97,6390,6391,6394,6396],{"class":99,"line":1407},[97,6392,6393],{"class":103},"    a",[97,6395,115],{"class":319},[97,6397,6260],{"class":103},[97,6399,6400,6403,6405],{"class":99,"line":1413},[97,6401,6402],{"class":103},"    b",[97,6404,115],{"class":319},[97,6406,4471],{"class":103},[97,6408,6409,6411,6413,6416,6418,6420,6422],{"class":99,"line":1504},[97,6410,1743],{"class":103},[97,6412,1362],{"class":319},[97,6414,6415],{"class":118},"\"a=\"",[97,6417,1362],{"class":319},[97,6419,558],{"class":103},[97,6421,1362],{"class":319},[97,6423,1384],{"class":103},[97,6425,6426,6428,6430,6433,6435,6437,6439],{"class":99,"line":1510},[97,6427,1743],{"class":103},[97,6429,1362],{"class":319},[97,6431,6432],{"class":118},"\"b=\"",[97,6434,1362],{"class":319},[97,6436,583],{"class":103},[97,6438,1362],{"class":319},[97,6440,1384],{"class":103},[97,6442,6443],{"class":99,"line":1522},[97,6444,1757],{"class":103},[231,6446,6447],{},"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":92,"searchDepth":195,"depth":195,"links":6449},[6450,6451,6452,6453,6454,6455],{"id":5363,"depth":195,"text":5364},{"id":5452,"depth":195,"text":5453},{"id":5535,"depth":195,"text":5536},{"id":5761,"depth":195,"text":5762},{"id":6110,"depth":195,"text":6111},{"id":6267,"depth":195,"text":6268},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5355,"description":92},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6462,"title":6463,"body":6464,"description":6471,"extension":247,"meta":7876,"navigation":249,"path":7877,"seo":7878,"stem":7879,"__hash__":7880},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6465,"toc":7866},[6466,6469,6472,6476,6638,6642,6645,6648,6651,6654,6794,6798,6801,6804,6807,6872,6876,6881,6948,6951,6955,6958,6969,6974,6994,6997,7002,7021,7024,7028,7047,7050,7054,7289,7293,7296,7299,7302,7464,7467,7471,7474,7480,7863],[10,6467,6463],{"id":6468},"_3指针",[24,6470,6471],{},"通过指针保存一个地址，指针就是个地址",[14,6473,6475],{"id":6474},"_31定义指针","3.1定义指针",[87,6477,6479],{"className":310,"code":6478,"language":312,"meta":92,"style":92},"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",[94,6480,6481,6489,6493,6498,6510,6515,6523,6533,6551,6571,6575,6580,6585,6590,6604,6620,6634],{"__ignoreMap":92},[97,6482,6483,6485,6487],{"class":99,"line":100},[97,6484,326],{"class":319},[97,6486,2164],{"class":111},[97,6488,2167],{"class":103},[97,6490,6491],{"class":99,"line":195},[97,6492,1738],{"class":103},[97,6494,6495],{"class":99,"line":241},[97,6496,6497],{"class":191},"    \u002F\u002F1.定义指针\n",[97,6499,6500,6502,6504,6506,6508],{"class":99,"line":1387},[97,6501,2176],{"class":319},[97,6503,1591],{"class":103},[97,6505,115],{"class":319},[97,6507,766],{"class":370},[97,6509,1483],{"class":103},[97,6511,6512],{"class":99,"line":1393},[97,6513,6514],{"class":191},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[97,6516,6517,6520],{"class":99,"line":1407},[97,6518,6519],{"class":319},"    int*",[97,6521,6522],{"class":103},"p;\n",[97,6524,6525,6528,6531],{"class":99,"line":1413},[97,6526,6527],{"class":103},"    p",[97,6529,6530],{"class":319},"=&",[97,6532,6388],{"class":103},[97,6534,6535,6537,6539,6542,6545,6547,6549],{"class":99,"line":1504},[97,6536,1743],{"class":103},[97,6538,1362],{"class":319},[97,6540,6541],{"class":118},"\"a的地址为：\"",[97,6543,6544],{"class":319},"\u003C\u003C&",[97,6546,558],{"class":103},[97,6548,1362],{"class":319},[97,6550,1384],{"class":103},[97,6552,6553,6555,6557,6560,6562,6564,6566,6568],{"class":99,"line":1510},[97,6554,1743],{"class":103},[97,6556,1362],{"class":319},[97,6558,6559],{"class":118},"\"指针p为：\"",[97,6561,1362],{"class":319},[97,6563,24],{"class":103},[97,6565,1362],{"class":319},[97,6567,1431],{"class":103},[97,6569,6570],{"class":191},"\u002F\u002F指针p表示的就是a的地址\n",[97,6572,6573],{"class":99,"line":1522},[97,6574,2591],{"emptyLinePlaceholder":249},[97,6576,6577],{"class":99,"line":1804},[97,6578,6579],{"class":191},"    \u002F\u002F2.使用指针\n",[97,6581,6582],{"class":99,"line":1809},[97,6583,6584],{"class":191},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[97,6586,6587],{"class":99,"line":1815},[97,6588,6589],{"class":191},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[97,6591,6592,6595,6597,6599,6602],{"class":99,"line":1820},[97,6593,6594],{"class":319},"    *",[97,6596,24],{"class":103},[97,6598,115],{"class":319},[97,6600,6601],{"class":370},"1000",[97,6603,1483],{"class":103},[97,6605,6606,6608,6611,6613,6615,6617],{"class":99,"line":1834},[97,6607,1743],{"class":103},[97,6609,6610],{"class":319},"\u003C\u003C*",[97,6612,24],{"class":103},[97,6614,1362],{"class":319},[97,6616,1431],{"class":103},[97,6618,6619],{"class":191},"\u002F\u002F1000\n",[97,6621,6622,6624,6626,6628,6630,6632],{"class":99,"line":1839},[97,6623,1743],{"class":103},[97,6625,1362],{"class":319},[97,6627,558],{"class":103},[97,6629,1362],{"class":319},[97,6631,1431],{"class":103},[97,6633,6619],{"class":191},[97,6635,6636],{"class":99,"line":1845},[97,6637,1757],{"class":103},[14,6639,6641],{"id":6640},"_32指针所占的内存空间","3.2指针所占的内存空间",[24,6643,6644],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[24,6646,6647],{},"在32位操作系统下：占用4个字节空间",[24,6649,6650],{},"在64位操作系统下：占用8个字节空间",[24,6652,6653],{},"上方是不管啥数据类型的",[87,6655,6657],{"className":310,"code":6656,"language":312,"meta":92,"style":92},"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",[94,6658,6659,6667,6671,6676,6688,6693,6698,6703,6716,6738,6764,6790],{"__ignoreMap":92},[97,6660,6661,6663,6665],{"class":99,"line":100},[97,6662,326],{"class":319},[97,6664,2164],{"class":111},[97,6666,2167],{"class":103},[97,6668,6669],{"class":99,"line":195},[97,6670,1738],{"class":103},[97,6672,6673],{"class":99,"line":241},[97,6674,6675],{"class":191},"    \u002F\u002F指针所占内存空间\n",[97,6677,6678,6680,6682,6684,6686],{"class":99,"line":1387},[97,6679,2176],{"class":319},[97,6681,1591],{"class":103},[97,6683,115],{"class":319},[97,6685,766],{"class":370},[97,6687,1483],{"class":103},[97,6689,6690],{"class":99,"line":1393},[97,6691,6692],{"class":191},"    \u002F\u002Fint *p;\n",[97,6694,6695],{"class":99,"line":1407},[97,6696,6697],{"class":191},"    \u002F\u002Fp=&a;\n",[97,6699,6700],{"class":99,"line":1413},[97,6701,6702],{"class":191},"    \u002F\u002F上述可以写为以下：\n",[97,6704,6705,6707,6710,6712,6714],{"class":99,"line":1504},[97,6706,2176],{"class":319},[97,6708,6709],{"class":319}," *",[97,6711,24],{"class":103},[97,6713,6530],{"class":319},[97,6715,6388],{"class":103},[97,6717,6718,6721,6723,6726,6728,6731,6733,6735],{"class":99,"line":1510},[97,6719,6720],{"class":103},"    cout ",[97,6722,1362],{"class":319},[97,6724,6725],{"class":118},"\"sizeof(int *)\"",[97,6727,1565],{"class":319},[97,6729,6730],{"class":103},"(p)",[97,6732,1362],{"class":319},[97,6734,1431],{"class":103},[97,6736,6737],{"class":191},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[97,6739,6740,6742,6744,6746,6748,6750,6752,6754,6756,6758,6761],{"class":99,"line":1522},[97,6741,6720],{"class":103},[97,6743,1362],{"class":319},[97,6745,6725],{"class":118},[97,6747,1565],{"class":319},[97,6749,323],{"class":103},[97,6751,326],{"class":319},[97,6753,6709],{"class":319},[97,6755,749],{"class":103},[97,6757,1362],{"class":319},[97,6759,6760],{"class":103},"endl",[97,6762,6763],{"class":191},"  \u002F\u002F4字节(32位的话)\n",[97,6765,6766,6768,6770,6773,6775,6777,6779,6781,6783,6785,6787],{"class":99,"line":1804},[97,6767,6720],{"class":103},[97,6769,1362],{"class":319},[97,6771,6772],{"class":118},"\"sizeof(char *)\"",[97,6774,1565],{"class":319},[97,6776,323],{"class":103},[97,6778,417],{"class":319},[97,6780,6709],{"class":319},[97,6782,749],{"class":103},[97,6784,1362],{"class":319},[97,6786,1431],{"class":103},[97,6788,6789],{"class":191}," \u002F\u002F4字节(32位的话)\n",[97,6791,6792],{"class":99,"line":1809},[97,6793,1757],{"class":103},[14,6795,6797],{"id":6796},"_33空指针","3.3空指针",[24,6799,6800],{},"空指针：指针变量指向内存中编号为0的空间",[24,6802,6803],{},"用途：初始化指针变量",[24,6805,6806],{},"注意：空指针指向的内存是不可以访问的",[87,6808,6810],{"className":310,"code":6809,"language":312,"meta":92,"style":92},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[94,6811,6812,6820,6824,6829,6843,6848,6863,6868],{"__ignoreMap":92},[97,6813,6814,6816,6818],{"class":99,"line":100},[97,6815,326],{"class":319},[97,6817,2164],{"class":111},[97,6819,2167],{"class":103},[97,6821,6822],{"class":99,"line":195},[97,6823,1738],{"class":103},[97,6825,6826],{"class":99,"line":241},[97,6827,6828],{"class":191},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[97,6830,6831,6833,6835,6837,6839,6841],{"class":99,"line":1387},[97,6832,2176],{"class":319},[97,6834,6709],{"class":319},[97,6836,24],{"class":103},[97,6838,115],{"class":319},[97,6840,2583],{"class":370},[97,6842,1483],{"class":103},[97,6844,6845],{"class":99,"line":1393},[97,6846,6847],{"class":191},"    \u002F\u002F2.空指针不能进行访问\n",[97,6849,6850,6852,6854,6856,6858,6860],{"class":99,"line":1407},[97,6851,6594],{"class":319},[97,6853,24],{"class":103},[97,6855,115],{"class":319},[97,6857,631],{"class":370},[97,6859,377],{"class":103},[97,6861,6862],{"class":191},"\u002F\u002F直接报错，压根不能访问\n",[97,6864,6865],{"class":99,"line":1413},[97,6866,6867],{"class":191},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[97,6869,6870],{"class":99,"line":1504},[97,6871,1757],{"class":103},[14,6873,6875],{"id":6874},"_34野指针","3.4野指针",[24,6877,6878],{},[469,6879,6880],{},"指针变量指向非法的内存空间",[87,6882,6884],{"className":310,"code":6883,"language":312,"meta":92,"style":92},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[94,6885,6886,6894,6898,6927,6932,6944],{"__ignoreMap":92},[97,6887,6888,6890,6892],{"class":99,"line":100},[97,6889,326],{"class":319},[97,6891,2164],{"class":111},[97,6893,2167],{"class":103},[97,6895,6896],{"class":99,"line":195},[97,6897,1738],{"class":103},[97,6899,6900,6902,6904,6906,6908,6910,6912,6914,6916,6919,6922,6924],{"class":99,"line":241},[97,6901,2176],{"class":319},[97,6903,6709],{"class":319},[97,6905,24],{"class":103},[97,6907,115],{"class":319},[97,6909,323],{"class":103},[97,6911,326],{"class":319},[97,6913,6709],{"class":319},[97,6915,749],{"class":103},[97,6917,6918],{"class":319},"0x",[97,6920,6921],{"class":370},"1100",[97,6923,377],{"class":103},[97,6925,6926],{"class":191}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[97,6928,6929],{"class":99,"line":1387},[97,6930,6931],{"class":191},"    \u002F\u002F访问野指针报错\n",[97,6933,6934,6936,6938,6940,6942],{"class":99,"line":1393},[97,6935,1743],{"class":103},[97,6937,6610],{"class":319},[97,6939,24],{"class":103},[97,6941,1362],{"class":319},[97,6943,1384],{"class":103},[97,6945,6946],{"class":99,"line":1407},[97,6947,1757],{"class":103},[24,6949,6950],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,6952,6954],{"id":6953},"_35const修饰指针","3.5const修饰指针",[24,6956,6957],{},"三种情况：",[67,6959,6960,6963,6966],{},[70,6961,6962],{},"const修饰指针 常量指针",[70,6964,6965],{},"const修饰常量 指针常量",[70,6967,6968],{},"const即修饰指针，又修饰常量",[138,6970,6971],{},[70,6972,6973],{},"常量指针",[87,6975,6977],{"className":310,"code":6976,"language":312,"meta":92,"style":92},"const int *p=&a;\n",[94,6978,6979],{"__ignoreMap":92},[97,6980,6981,6984,6986,6988,6990,6992],{"class":99,"line":100},[97,6982,6983],{"class":319},"const",[97,6985,2573],{"class":319},[97,6987,6709],{"class":319},[97,6989,24],{"class":103},[97,6991,6530],{"class":319},[97,6993,6388],{"class":103},[24,6995,6996],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[138,6998,6999],{"start":195},[70,7000,7001],{},"指针常量",[87,7003,7005],{"className":310,"code":7004,"language":312,"meta":92,"style":92},"int *const p=&a;\n",[94,7006,7007],{"__ignoreMap":92},[97,7008,7009,7011,7014,7017,7019],{"class":99,"line":100},[97,7010,326],{"class":319},[97,7012,7013],{"class":319}," *const",[97,7015,7016],{"class":103}," p",[97,7018,6530],{"class":319},[97,7020,6388],{"class":103},[24,7022,7023],{},"指针的指向不可以改，指针指向的值可以改",[138,7025,7026],{"start":241},[70,7027,6968],{},[87,7029,7031],{"className":310,"code":7030,"language":312,"meta":92,"style":92},"const int *const p=&a;\n",[94,7032,7033],{"__ignoreMap":92},[97,7034,7035,7037,7039,7041,7043,7045],{"class":99,"line":100},[97,7036,6983],{"class":319},[97,7038,2573],{"class":319},[97,7040,7013],{"class":319},[97,7042,7016],{"class":103},[97,7044,6530],{"class":319},[97,7046,6388],{"class":103},[24,7048,7049],{},"指针的指向和指针指向的值都不可以改变",[14,7051,7053],{"id":7052},"_36指针和数组","3.6指针和数组",[87,7055,7057],{"className":310,"code":7056,"language":312,"meta":92,"style":92},"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",[94,7058,7059,7067,7071,7076,7130,7151,7167,7183,7194,7211,7216,7230,7256,7260,7272,7281,7285],{"__ignoreMap":92},[97,7060,7061,7063,7065],{"class":99,"line":100},[97,7062,326],{"class":319},[97,7064,2164],{"class":111},[97,7066,2167],{"class":103},[97,7068,7069],{"class":99,"line":195},[97,7070,1738],{"class":103},[97,7072,7073],{"class":99,"line":241},[97,7074,7075],{"class":191},"    \u002F\u002F利用指针访问数组中的元素\n",[97,7077,7078,7080,7082,7084,7086,7088,7090,7092,7094,7096,7098,7100,7102,7104,7106,7108,7110,7112,7114,7116,7118,7120,7122,7124,7126,7128],{"class":99,"line":1387},[97,7079,2176],{"class":319},[97,7081,4153],{"class":103},[97,7083,766],{"class":370},[97,7085,1259],{"class":103},[97,7087,115],{"class":319},[97,7089,1216],{"class":103},[97,7091,537],{"class":370},[97,7093,698],{"class":103},[97,7095,398],{"class":370},[97,7097,698],{"class":103},[97,7099,392],{"class":370},[97,7101,698],{"class":103},[97,7103,613],{"class":370},[97,7105,698],{"class":103},[97,7107,639],{"class":370},[97,7109,698],{"class":103},[97,7111,664],{"class":370},[97,7113,698],{"class":103},[97,7115,689],{"class":370},[97,7117,698],{"class":103},[97,7119,715],{"class":370},[97,7121,698],{"class":103},[97,7123,740],{"class":370},[97,7125,698],{"class":103},[97,7127,766],{"class":370},[97,7129,4186],{"class":103},[97,7131,7132,7134,7136,7139,7141,7143,7145,7147,7149],{"class":99,"line":1393},[97,7133,1743],{"class":103},[97,7135,1362],{"class":319},[97,7137,7138],{"class":118},"\"数组的第一个元素为：\"",[97,7140,1362],{"class":319},[97,7142,4097],{"class":103},[97,7144,511],{"class":370},[97,7146,1259],{"class":103},[97,7148,1362],{"class":319},[97,7150,1384],{"class":103},[97,7152,7153,7155,7157,7159,7161,7164],{"class":99,"line":1407},[97,7154,2176],{"class":319},[97,7156,6709],{"class":319},[97,7158,24],{"class":103},[97,7160,115],{"class":319},[97,7162,7163],{"class":103},"arr;",[97,7165,7166],{"class":191},"\u002F\u002F注意数才要加取地址符号&\n",[97,7168,7169,7171,7173,7175,7177,7179,7181],{"class":99,"line":1413},[97,7170,1743],{"class":103},[97,7172,1362],{"class":319},[97,7174,7138],{"class":118},[97,7176,6610],{"class":319},[97,7178,24],{"class":103},[97,7180,1362],{"class":319},[97,7182,1384],{"class":103},[97,7184,7185,7187,7189,7191],{"class":99,"line":1504},[97,7186,6527],{"class":103},[97,7188,2483],{"class":319},[97,7190,377],{"class":103},[97,7192,7193],{"class":191}," \u002F\u002F让指针向后偏移4个字节\n",[97,7195,7196,7198,7200,7203,7205,7207,7209],{"class":99,"line":1510},[97,7197,1743],{"class":103},[97,7199,1362],{"class":319},[97,7201,7202],{"class":118},"\"数组的第二个元素为：\"",[97,7204,6610],{"class":319},[97,7206,24],{"class":103},[97,7208,1362],{"class":319},[97,7210,1384],{"class":103},[97,7212,7213],{"class":99,"line":1522},[97,7214,7215],{"class":191},"    \u002F\u002F利用指针遍历数组\n",[97,7217,7218,7220,7222,7225,7227],{"class":99,"line":1804},[97,7219,2176],{"class":319},[97,7221,6709],{"class":319},[97,7223,7224],{"class":103},"p2",[97,7226,115],{"class":319},[97,7228,7229],{"class":103},"arr;\n",[97,7231,7232,7234,7236,7238,7240,7242,7244,7246,7248,7250,7252,7254],{"class":99,"line":1809},[97,7233,3392],{"class":319},[97,7235,1850],{"class":103},[97,7237,326],{"class":319},[97,7239,3223],{"class":103},[97,7241,115],{"class":319},[97,7243,511],{"class":370},[97,7245,3230],{"class":103},[97,7247,104],{"class":319},[97,7249,766],{"class":370},[97,7251,3230],{"class":103},[97,7253,2483],{"class":319},[97,7255,329],{"class":103},[97,7257,7258],{"class":99,"line":1815},[97,7259,2221],{"class":103},[97,7261,7262,7264,7266,7268,7270],{"class":99,"line":1820},[97,7263,3642],{"class":103},[97,7265,6610],{"class":319},[97,7267,7224],{"class":103},[97,7269,1362],{"class":319},[97,7271,1384],{"class":103},[97,7273,7274,7277,7279],{"class":99,"line":1834},[97,7275,7276],{"class":103},"        p2",[97,7278,2483],{"class":319},[97,7280,1483],{"class":103},[97,7282,7283],{"class":99,"line":1839},[97,7284,2378],{"class":103},[97,7286,7287],{"class":99,"line":1845},[97,7288,1757],{"class":103},[14,7290,7292],{"id":7291},"_37指针和函数","3.7指针和函数",[24,7294,7295],{},"利用指针做函数参数，可以修改实参的值",[24,7297,7298],{},"值传递：只改变形参，不改变实参",[24,7300,7301],{},"地址传递：",[87,7303,7305],{"className":310,"code":7304,"language":312,"meta":92,"style":92},"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",[94,7306,7307,7332,7336,7348,7359,7369,7373,7381,7385,7397,7409,7414,7430,7445,7460],{"__ignoreMap":92},[97,7308,7309,7311,7313,7315,7317,7319,7322,7324,7326,7328,7330],{"class":99,"line":100},[97,7310,5555],{"class":319},[97,7312,5558],{"class":111},[97,7314,323],{"class":103},[97,7316,326],{"class":319},[97,7318,6709],{"class":319},[97,7320,7321],{"class":5407},"p1",[97,7323,698],{"class":103},[97,7325,326],{"class":319},[97,7327,6709],{"class":319},[97,7329,7224],{"class":5407},[97,7331,329],{"class":103},[97,7333,7334],{"class":99,"line":195},[97,7335,1738],{"class":103},[97,7337,7338,7340,7342,7345],{"class":99,"line":241},[97,7339,2176],{"class":319},[97,7341,4446],{"class":103},[97,7343,7344],{"class":319},"=*",[97,7346,7347],{"class":103},"p1;\n",[97,7349,7350,7352,7354,7356],{"class":99,"line":1387},[97,7351,6594],{"class":319},[97,7353,7321],{"class":103},[97,7355,7344],{"class":319},[97,7357,7358],{"class":103},"p2;\n",[97,7360,7361,7363,7365,7367],{"class":99,"line":1393},[97,7362,6594],{"class":319},[97,7364,7224],{"class":103},[97,7366,115],{"class":319},[97,7368,4471],{"class":103},[97,7370,7371],{"class":99,"line":1407},[97,7372,1757],{"class":103},[97,7374,7375,7377,7379],{"class":99,"line":1413},[97,7376,326],{"class":319},[97,7378,2164],{"class":111},[97,7380,2167],{"class":103},[97,7382,7383],{"class":99,"line":1504},[97,7384,1738],{"class":103},[97,7386,7387,7389,7391,7393,7395],{"class":99,"line":1510},[97,7388,2176],{"class":319},[97,7390,1591],{"class":103},[97,7392,115],{"class":319},[97,7394,766],{"class":370},[97,7396,1483],{"class":103},[97,7398,7399,7401,7403,7405,7407],{"class":99,"line":1522},[97,7400,2176],{"class":319},[97,7402,3024],{"class":103},[97,7404,115],{"class":319},[97,7406,1020],{"class":370},[97,7408,1483],{"class":103},[97,7410,7411],{"class":99,"line":1804},[97,7412,7413],{"class":191},"    \u002F\u002F地址传递\n",[97,7415,7416,7418,7420,7422,7425,7427],{"class":99,"line":1809},[97,7417,5752],{"class":111},[97,7419,323],{"class":103},[97,7421,673],{"class":319},[97,7423,7424],{"class":103},"a,",[97,7426,673],{"class":319},[97,7428,7429],{"class":103},"b);\n",[97,7431,7432,7434,7436,7438,7440,7442],{"class":99,"line":1815},[97,7433,1743],{"class":103},[97,7435,1362],{"class":319},[97,7437,558],{"class":103},[97,7439,1362],{"class":319},[97,7441,1431],{"class":103},[97,7443,7444],{"class":191},"\u002F\u002F20\n",[97,7446,7447,7449,7451,7453,7455,7457],{"class":99,"line":1820},[97,7448,1743],{"class":103},[97,7450,1362],{"class":319},[97,7452,583],{"class":103},[97,7454,1362],{"class":319},[97,7456,1431],{"class":103},[97,7458,7459],{"class":191},"\u002F\u002F10\n",[97,7461,7462],{"class":99,"line":1834},[97,7463,1757],{"class":103},[24,7465,7466],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7468,7470],{"id":7469},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[24,7472,7473],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[24,7475,7476,7477,7479],{},"例如数组：int arr",[97,7478,766],{},"={4,3,6,9,1,2,10,8,7,5}",[87,7481,7483],{"className":310,"code":7482,"language":312,"meta":92,"style":92},"#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",[94,7484,7485,7491,7501,7525,7529,7560,7564,7598,7602,7620,7624,7635,7650,7665,7669,7673,7677,7681,7685,7693,7697,7702,7756,7768,7780,7785,7793,7797,7802,7827,7831,7846,7855,7859],{"__ignoreMap":92},[97,7486,7487,7489],{"class":99,"line":100},[97,7488,2141],{"class":319},[97,7490,2144],{"class":118},[97,7492,7493,7495,7497,7499],{"class":99,"line":195},[97,7494,2149],{"class":319},[97,7496,2152],{"class":319},[97,7498,2155],{"class":111},[97,7500,1483],{"class":103},[97,7502,7503,7505,7508,7510,7512,7514,7516,7518,7520,7523],{"class":99,"line":241},[97,7504,5555],{"class":319},[97,7506,7507],{"class":111}," bubbleSort",[97,7509,323],{"class":103},[97,7511,326],{"class":319},[97,7513,6709],{"class":319},[97,7515,24],{"class":5407},[97,7517,698],{"class":103},[97,7519,326],{"class":319},[97,7521,7522],{"class":5407}," len",[97,7524,329],{"class":103},[97,7526,7527],{"class":99,"line":1387},[97,7528,1738],{"class":103},[97,7530,7531,7533,7535,7537,7539,7541,7543,7545,7547,7550,7552,7554,7556,7558],{"class":99,"line":1393},[97,7532,3392],{"class":319},[97,7534,323],{"class":103},[97,7536,326],{"class":319},[97,7538,3223],{"class":103},[97,7540,115],{"class":319},[97,7542,511],{"class":370},[97,7544,3230],{"class":103},[97,7546,104],{"class":319},[97,7548,7549],{"class":103},"len",[97,7551,852],{"class":319},[97,7553,537],{"class":370},[97,7555,3230],{"class":103},[97,7557,2483],{"class":319},[97,7559,329],{"class":103},[97,7561,7562],{"class":99,"line":1407},[97,7563,2221],{"class":103},[97,7565,7566,7568,7570,7572,7574,7576,7578,7580,7582,7584,7586,7588,7590,7592,7594,7596],{"class":99,"line":1413},[97,7567,3594],{"class":319},[97,7569,323],{"class":103},[97,7571,326],{"class":319},[97,7573,3601],{"class":103},[97,7575,115],{"class":319},[97,7577,511],{"class":370},[97,7579,3608],{"class":103},[97,7581,104],{"class":319},[97,7583,7549],{"class":103},[97,7585,852],{"class":319},[97,7587,761],{"class":103},[97,7589,852],{"class":319},[97,7591,537],{"class":370},[97,7593,3608],{"class":103},[97,7595,2483],{"class":319},[97,7597,329],{"class":103},[97,7599,7600],{"class":99,"line":1504},[97,7601,2701],{"class":103},[97,7603,7604,7606,7609,7611,7614,7616,7618],{"class":99,"line":1510},[97,7605,4833],{"class":319},[97,7607,7608],{"class":103},"(p[j]",[97,7610,1279],{"class":319},[97,7612,7613],{"class":103},"p[j",[97,7615,801],{"class":319},[97,7617,537],{"class":370},[97,7619,4848],{"class":103},[97,7621,7622],{"class":99,"line":1522},[97,7623,4853],{"class":103},[97,7625,7626,7628,7630,7632],{"class":99,"line":1804},[97,7627,4858],{"class":319},[97,7629,4446],{"class":103},[97,7631,115],{"class":319},[97,7633,7634],{"class":103},"p[j];\n",[97,7636,7637,7640,7642,7644,7646,7648],{"class":99,"line":1809},[97,7638,7639],{"class":103},"                p[j]",[97,7641,115],{"class":319},[97,7643,7613],{"class":103},[97,7645,801],{"class":319},[97,7647,537],{"class":370},[97,7649,4881],{"class":103},[97,7651,7652,7655,7657,7659,7661,7663],{"class":99,"line":1815},[97,7653,7654],{"class":103},"                p[j",[97,7656,801],{"class":319},[97,7658,537],{"class":370},[97,7660,1259],{"class":103},[97,7662,115],{"class":319},[97,7664,4471],{"class":103},[97,7666,7667],{"class":99,"line":1820},[97,7668,4901],{"class":103},[97,7670,7671],{"class":99,"line":1834},[97,7672,2720],{"class":103},[97,7674,7675],{"class":99,"line":1839},[97,7676,2378],{"class":103},[97,7678,7679],{"class":99,"line":1845},[97,7680,1757],{"class":103},[97,7682,7683],{"class":99,"line":1866},[97,7684,2591],{"emptyLinePlaceholder":249},[97,7686,7687,7689,7691],{"class":99,"line":1871},[97,7688,326],{"class":319},[97,7690,2164],{"class":111},[97,7692,2167],{"class":103},[97,7694,7695],{"class":99,"line":1885},[97,7696,1738],{"class":103},[97,7698,7699],{"class":99,"line":1890},[97,7700,7701],{"class":191},"    \u002F\u002F 1.创建数组\n",[97,7703,7704,7706,7708,7710,7712,7714,7716,7718,7720,7722,7724,7726,7728,7730,7732,7734,7736,7738,7740,7742,7744,7746,7748,7750,7752,7754],{"class":99,"line":1919},[97,7705,2176],{"class":319},[97,7707,4153],{"class":103},[97,7709,766],{"class":370},[97,7711,1259],{"class":103},[97,7713,115],{"class":319},[97,7715,1216],{"class":103},[97,7717,613],{"class":370},[97,7719,698],{"class":103},[97,7721,392],{"class":370},[97,7723,698],{"class":103},[97,7725,664],{"class":370},[97,7727,698],{"class":103},[97,7729,740],{"class":370},[97,7731,698],{"class":103},[97,7733,537],{"class":370},[97,7735,698],{"class":103},[97,7737,398],{"class":370},[97,7739,698],{"class":103},[97,7741,766],{"class":370},[97,7743,698],{"class":103},[97,7745,715],{"class":370},[97,7747,698],{"class":103},[97,7749,689],{"class":370},[97,7751,698],{"class":103},[97,7753,639],{"class":370},[97,7755,4186],{"class":103},[97,7757,7758,7760,7762,7764,7766],{"class":99,"line":1924},[97,7759,2176],{"class":319},[97,7761,7522],{"class":103},[97,7763,115],{"class":319},[97,7765,766],{"class":370},[97,7767,1483],{"class":103},[97,7769,7770,7772,7774,7776,7778],{"class":99,"line":1941},[97,7771,2176],{"class":319},[97,7773,6709],{"class":319},[97,7775,24],{"class":103},[97,7777,115],{"class":319},[97,7779,7229],{"class":103},[97,7781,7782],{"class":99,"line":1946},[97,7783,7784],{"class":191},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[97,7786,7787,7790],{"class":99,"line":1951},[97,7788,7789],{"class":111},"    bubbleSort",[97,7791,7792],{"class":103},"(p,len);\n",[97,7794,7795],{"class":99,"line":1956},[97,7796,2591],{"emptyLinePlaceholder":249},[97,7798,7799],{"class":99,"line":1970},[97,7800,7801],{"class":191},"    \u002F\u002F 3.打印排序后的数组\n",[97,7803,7804,7806,7808,7810,7812,7814,7816,7818,7820,7823,7825],{"class":99,"line":1975},[97,7805,3392],{"class":319},[97,7807,1850],{"class":103},[97,7809,326],{"class":319},[97,7811,3223],{"class":103},[97,7813,115],{"class":319},[97,7815,511],{"class":370},[97,7817,3405],{"class":103},[97,7819,104],{"class":319},[97,7821,7822],{"class":103},"len; i",[97,7824,2483],{"class":319},[97,7826,329],{"class":103},[97,7828,7829],{"class":99,"line":2768},[97,7830,2221],{"class":103},[97,7832,7833,7835,7837,7839,7841,7844],{"class":99,"line":2782},[97,7834,3642],{"class":103},[97,7836,6610],{"class":319},[97,7838,24],{"class":103},[97,7840,1362],{"class":319},[97,7842,7843],{"class":118},"\"\"",[97,7845,1483],{"class":103},[97,7847,7848,7851,7853],{"class":99,"line":2790},[97,7849,7850],{"class":103},"        p",[97,7852,2483],{"class":319},[97,7854,1483],{"class":103},[97,7856,7857],{"class":99,"line":2795},[97,7858,2378],{"class":103},[97,7860,7861],{"class":99,"line":2801},[97,7862,1757],{"class":103},[231,7864,7865],{},"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":92,"searchDepth":195,"depth":195,"links":7867},[7868,7869,7870,7871,7872,7873,7874,7875],{"id":6474,"depth":195,"text":6475},{"id":6640,"depth":195,"text":6641},{"id":6796,"depth":195,"text":6797},{"id":6874,"depth":195,"text":6875},{"id":6953,"depth":195,"text":6954},{"id":7052,"depth":195,"text":7053},{"id":7291,"depth":195,"text":7292},{"id":7469,"depth":195,"text":7470},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6463,"description":6471},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7882,"title":7883,"body":7884,"description":7891,"extension":247,"meta":10865,"navigation":249,"path":10866,"seo":10867,"stem":10868,"__hash__":10869},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7885,"toc":10856},[7886,7889,7892,7896,7899,7902,7913,8251,8254,8258,8261,8268,8523,8527,8530,8533,8688,8692,8695,8698,8904,8908,8911,9214,9217,9225,9229,9232,9383,9385,9396,9453,9457,9462,10119,10127,10130,10224,10227,10847,10853],[10,7887,7883],{"id":7888},"_4结构体",[24,7890,7891],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7893,7895],{"id":7894},"_41结构体定义与使用","4.1结构体定义与使用",[24,7897,7898],{},"语法：struct 结构体名 {结构体成员列表}；",[24,7900,7901],{},"通过结构体创建变量的方式：",[67,7903,7904,7907,7910],{},[70,7905,7906],{},"struct 结构体名 变量名",[70,7908,7909],{},"struct 结构体名 变量名={成员1值，成员2值...}",[70,7911,7912],{},"定义结构体时顺便创建变量",[87,7914,7916],{"className":310,"code":7915,"language":312,"meta":92,"style":92},"#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",[94,7917,7918,7924,7934,7941,7946,7954,7958,7963,7967,7972,7977,7982,7989,7994,8001,8005,8012,8016,8020,8024,8028,8032,8036,8042,8046,8052,8060,8068,8072,8077,8082,8093,8098,8110,8121,8132,8137,8161,8166,8172,8199,8204,8210,8222,8234,8246],{"__ignoreMap":92},[97,7919,7920,7922],{"class":99,"line":100},[97,7921,2141],{"class":319},[97,7923,2144],{"class":118},[97,7925,7926,7928,7930,7932],{"class":99,"line":195},[97,7927,2149],{"class":319},[97,7929,2152],{"class":319},[97,7931,2155],{"class":111},[97,7933,1483],{"class":103},[97,7935,7936,7938],{"class":99,"line":241},[97,7937,2141],{"class":319},[97,7939,7940],{"class":118},"\u003Cstring>\n",[97,7942,7943],{"class":99,"line":1387},[97,7944,7945],{"class":191},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[97,7947,7948,7951],{"class":99,"line":1393},[97,7949,7950],{"class":319},"struct",[97,7952,7953],{"class":111}," Student\n",[97,7955,7956],{"class":99,"line":1407},[97,7957,1738],{"class":103},[97,7959,7960],{"class":99,"line":1413},[97,7961,7962],{"class":191},"    \u002F\u002F成员列表\n",[97,7964,7965],{"class":99,"line":1504},[97,7966,2591],{"emptyLinePlaceholder":249},[97,7968,7969],{"class":99,"line":1510},[97,7970,7971],{"class":191},"    \u002F\u002F姓名\n",[97,7973,7974],{"class":99,"line":1522},[97,7975,7976],{"class":103},"    string name;\n",[97,7978,7979],{"class":99,"line":1804},[97,7980,7981],{"class":191},"    \u002F\u002F年龄\n",[97,7983,7984,7986],{"class":99,"line":1809},[97,7985,2176],{"class":319},[97,7987,7988],{"class":103}," age;\n",[97,7990,7991],{"class":99,"line":1815},[97,7992,7993],{"class":191},"    \u002F\u002F分数\n",[97,7995,7996,7998],{"class":99,"line":1820},[97,7997,2176],{"class":319},[97,7999,8000],{"class":103}," score;\n",[97,8002,8003],{"class":99,"line":1834},[97,8004,4186],{"class":103},[97,8006,8007,8009],{"class":99,"line":1839},[97,8008,7950],{"class":319},[97,8010,8011],{"class":111}," School\n",[97,8013,8014],{"class":99,"line":1845},[97,8015,1738],{"class":103},[97,8017,8018],{"class":99,"line":1866},[97,8019,7962],{"class":191},[97,8021,8022],{"class":99,"line":1871},[97,8023,2591],{"emptyLinePlaceholder":249},[97,8025,8026],{"class":99,"line":1885},[97,8027,7971],{"class":191},[97,8029,8030],{"class":99,"line":1890},[97,8031,7976],{"class":103},[97,8033,8034],{"class":99,"line":1919},[97,8035,7981],{"class":191},[97,8037,8038,8040],{"class":99,"line":1924},[97,8039,2176],{"class":319},[97,8041,7988],{"class":103},[97,8043,8044],{"class":99,"line":1941},[97,8045,7993],{"class":191},[97,8047,8048,8050],{"class":99,"line":1946},[97,8049,2176],{"class":319},[97,8051,8000],{"class":103},[97,8053,8054,8057],{"class":99,"line":1951},[97,8055,8056],{"class":103},"} s3;",[97,8058,8059],{"class":191}," \u002F\u002F创建结构体时就创建了变量\n",[97,8061,8062,8064,8066],{"class":99,"line":1956},[97,8063,326],{"class":319},[97,8065,2164],{"class":111},[97,8067,2167],{"class":103},[97,8069,8070],{"class":99,"line":1970},[97,8071,1738],{"class":103},[97,8073,8074],{"class":99,"line":1975},[97,8075,8076],{"class":191},"    \u002F\u002F2.通过学生类型创建具体学生\n",[97,8078,8079],{"class":99,"line":2768},[97,8080,8081],{"class":191},"    \u002F\u002F2.1 struct Student s1;\n",[97,8083,8084,8087,8090],{"class":99,"line":2782},[97,8085,8086],{"class":319},"    struct",[97,8088,8089],{"class":111}," Student",[97,8091,8092],{"class":103}," s1;\n",[97,8094,8095],{"class":99,"line":2790},[97,8096,8097],{"class":191},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[97,8099,8100,8103,8105,8108],{"class":99,"line":2795},[97,8101,8102],{"class":103},"    s1.name",[97,8104,115],{"class":319},[97,8106,8107],{"class":118},"\"张三\"",[97,8109,1483],{"class":103},[97,8111,8112,8115,8117,8119],{"class":99,"line":2801},[97,8113,8114],{"class":103},"    s1.age",[97,8116,115],{"class":319},[97,8118,970],{"class":370},[97,8120,1483],{"class":103},[97,8122,8123,8126,8128,8130],{"class":99,"line":2807},[97,8124,8125],{"class":103},"    s1.score",[97,8127,115],{"class":319},[97,8129,574],{"class":370},[97,8131,1483],{"class":103},[97,8133,8134],{"class":99,"line":2812},[97,8135,8136],{"class":191},"    \u002F\u002F输出结果\n",[97,8138,8140,8142,8144,8147,8149,8152,8154,8157,8159],{"class":99,"line":8139},37,[97,8141,1743],{"class":103},[97,8143,1362],{"class":319},[97,8145,8146],{"class":103},"s1.name",[97,8148,1362],{"class":319},[97,8150,8151],{"class":103},"s1.age",[97,8153,1362],{"class":319},[97,8155,8156],{"class":103},"s1.score",[97,8158,1362],{"class":319},[97,8160,1384],{"class":103},[97,8162,8164],{"class":99,"line":8163},38,[97,8165,2591],{"emptyLinePlaceholder":249},[97,8167,8169],{"class":99,"line":8168},39,[97,8170,8171],{"class":191},"    \u002F\u002F2.2 struct Student s2={...}\n",[97,8173,8175,8177,8179,8182,8184,8186,8189,8191,8193,8195,8197],{"class":99,"line":8174},40,[97,8176,8086],{"class":319},[97,8178,8089],{"class":111},[97,8180,8181],{"class":103}," s2",[97,8183,115],{"class":319},[97,8185,1216],{"class":103},[97,8187,8188],{"class":118},"\"王五\"",[97,8190,698],{"class":103},[97,8192,970],{"class":370},[97,8194,698],{"class":103},[97,8196,574],{"class":370},[97,8198,4186],{"class":103},[97,8200,8202],{"class":99,"line":8201},41,[97,8203,2591],{"emptyLinePlaceholder":249},[97,8205,8207],{"class":99,"line":8206},42,[97,8208,8209],{"class":191},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[97,8211,8213,8216,8218,8220],{"class":99,"line":8212},43,[97,8214,8215],{"class":103},"    s3.name",[97,8217,115],{"class":319},[97,8219,3869],{"class":118},[97,8221,1483],{"class":103},[97,8223,8225,8228,8230,8232],{"class":99,"line":8224},44,[97,8226,8227],{"class":103},"    s3.age",[97,8229,115],{"class":319},[97,8231,970],{"class":370},[97,8233,1483],{"class":103},[97,8235,8237,8240,8242,8244],{"class":99,"line":8236},45,[97,8238,8239],{"class":103},"    s3.score",[97,8241,115],{"class":319},[97,8243,1020],{"class":370},[97,8245,1483],{"class":103},[97,8247,8249],{"class":99,"line":8248},46,[97,8250,1757],{"class":103},[24,8252,8253],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8255,8257],{"id":8256},"_42结构体数组","4.2结构体数组",[24,8259,8260],{},"将自定义的结构体放入到数组中方便维护",[24,8262,8263,8264,8267],{},"语法：struct 结构体名 数组名",[97,8265,8266],{},"元素个数","={ {}，{},...{} };",[87,8269,8271],{"className":310,"code":8270,"language":312,"meta":92,"style":92},"#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",[94,8272,8273,8279,8289,8295,8300,8306,8310,8314,8320,8326,8330,8334,8342,8346,8351,8366,8370,8386,8402,8406,8411,8427,8442,8457,8462,8488,8492,8515,8519],{"__ignoreMap":92},[97,8274,8275,8277],{"class":99,"line":100},[97,8276,2141],{"class":319},[97,8278,2144],{"class":118},[97,8280,8281,8283,8285,8287],{"class":99,"line":195},[97,8282,2149],{"class":319},[97,8284,2152],{"class":319},[97,8286,2155],{"class":111},[97,8288,1483],{"class":103},[97,8290,8291,8293],{"class":99,"line":241},[97,8292,2141],{"class":319},[97,8294,7940],{"class":118},[97,8296,8297],{"class":99,"line":1387},[97,8298,8299],{"class":191},"\u002F\u002F1.定义结构体\n",[97,8301,8302,8304],{"class":99,"line":1393},[97,8303,7950],{"class":319},[97,8305,7953],{"class":111},[97,8307,8308],{"class":99,"line":1407},[97,8309,1738],{"class":103},[97,8311,8312],{"class":99,"line":1413},[97,8313,7976],{"class":103},[97,8315,8316,8318],{"class":99,"line":1504},[97,8317,2176],{"class":319},[97,8319,7988],{"class":103},[97,8321,8322,8324],{"class":99,"line":1510},[97,8323,2176],{"class":319},[97,8325,8000],{"class":103},[97,8327,8328],{"class":99,"line":1522},[97,8329,2591],{"emptyLinePlaceholder":249},[97,8331,8332],{"class":99,"line":1804},[97,8333,4186],{"class":103},[97,8335,8336,8338,8340],{"class":99,"line":1809},[97,8337,326],{"class":319},[97,8339,2164],{"class":111},[97,8341,2167],{"class":103},[97,8343,8344],{"class":99,"line":1815},[97,8345,1738],{"class":103},[97,8347,8348],{"class":99,"line":1820},[97,8349,8350],{"class":191},"    \u002F\u002F2.创建结构体数组\n",[97,8352,8353,8355,8357,8360,8362,8364],{"class":99,"line":1834},[97,8354,8086],{"class":319},[97,8356,8089],{"class":111},[97,8358,8359],{"class":103}," stuArray[",[97,8361,398],{"class":370},[97,8363,1259],{"class":103},[97,8365,5099],{"class":319},[97,8367,8368],{"class":99,"line":1839},[97,8369,2221],{"class":103},[97,8371,8372,8374,8376,8378,8380,8382,8384],{"class":99,"line":1845},[97,8373,5108],{"class":103},[97,8375,8107],{"class":118},[97,8377,698],{"class":103},[97,8379,970],{"class":370},[97,8381,698],{"class":103},[97,8383,631],{"class":370},[97,8385,5121],{"class":103},[97,8387,8388,8390,8392,8394,8396,8398,8400],{"class":99,"line":1866},[97,8389,5108],{"class":103},[97,8391,3869],{"class":118},[97,8393,698],{"class":103},[97,8395,895],{"class":370},[97,8397,698],{"class":103},[97,8399,895],{"class":370},[97,8401,1757],{"class":103},[97,8403,8404],{"class":99,"line":1871},[97,8405,2378],{"class":103},[97,8407,8408],{"class":99,"line":1885},[97,8409,8410],{"class":191},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[97,8412,8413,8416,8418,8421,8423,8425],{"class":99,"line":1890},[97,8414,8415],{"class":103},"    stuArray[",[97,8417,537],{"class":370},[97,8419,8420],{"class":103},"].name",[97,8422,115],{"class":319},[97,8424,3892],{"class":118},[97,8426,1483],{"class":103},[97,8428,8429,8431,8433,8436,8438,8440],{"class":99,"line":1919},[97,8430,8415],{"class":103},[97,8432,537],{"class":370},[97,8434,8435],{"class":103},"].age",[97,8437,115],{"class":319},[97,8439,398],{"class":370},[97,8441,1483],{"class":103},[97,8443,8444,8446,8448,8451,8453,8455],{"class":99,"line":1924},[97,8445,8415],{"class":103},[97,8447,537],{"class":370},[97,8449,8450],{"class":103},"].score",[97,8452,115],{"class":319},[97,8454,398],{"class":370},[97,8456,1483],{"class":103},[97,8458,8459],{"class":99,"line":1941},[97,8460,8461],{"class":191},"    \u002F\u002F4.遍历结构体数组\n",[97,8463,8464,8466,8468,8470,8472,8474,8476,8478,8480,8482,8484,8486],{"class":99,"line":1946},[97,8465,3392],{"class":319},[97,8467,1850],{"class":103},[97,8469,326],{"class":319},[97,8471,3223],{"class":103},[97,8473,115],{"class":319},[97,8475,511],{"class":370},[97,8477,3230],{"class":103},[97,8479,104],{"class":319},[97,8481,398],{"class":370},[97,8483,3230],{"class":103},[97,8485,2483],{"class":319},[97,8487,329],{"class":103},[97,8489,8490],{"class":99,"line":1951},[97,8491,2221],{"class":103},[97,8493,8494,8496,8498,8501,8503,8506,8508,8511,8513],{"class":99,"line":1956},[97,8495,3642],{"class":103},[97,8497,1362],{"class":319},[97,8499,8500],{"class":103},"stuArray[i].name",[97,8502,1362],{"class":319},[97,8504,8505],{"class":103},"stuArray[i].age",[97,8507,1362],{"class":319},[97,8509,8510],{"class":103},"stuArray[i].score",[97,8512,1362],{"class":319},[97,8514,1384],{"class":103},[97,8516,8517],{"class":99,"line":1970},[97,8518,2378],{"class":103},[97,8520,8521],{"class":99,"line":1975},[97,8522,1757],{"class":103},[14,8524,8526],{"id":8525},"_43结构体指针","4.3结构体指针",[24,8528,8529],{},"作用：通过指针访问结构体中的成员",[24,8531,8532],{},"利用操作符->可以通过结构体指针访问结构体属性",[87,8534,8536],{"className":310,"code":8535,"language":312,"meta":92,"style":92},"#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",[94,8537,8538,8544,8554,8560,8564,8570,8574,8578,8584,8590,8594,8602,8606,8611,8636,8641,8656,8661,8684],{"__ignoreMap":92},[97,8539,8540,8542],{"class":99,"line":100},[97,8541,2141],{"class":319},[97,8543,2144],{"class":118},[97,8545,8546,8548,8550,8552],{"class":99,"line":195},[97,8547,2149],{"class":319},[97,8549,2152],{"class":319},[97,8551,2155],{"class":111},[97,8553,1483],{"class":103},[97,8555,8556,8558],{"class":99,"line":241},[97,8557,2141],{"class":319},[97,8559,7940],{"class":118},[97,8561,8562],{"class":99,"line":1387},[97,8563,8299],{"class":191},[97,8565,8566,8568],{"class":99,"line":1393},[97,8567,7950],{"class":319},[97,8569,7953],{"class":111},[97,8571,8572],{"class":99,"line":1407},[97,8573,1738],{"class":103},[97,8575,8576],{"class":99,"line":1413},[97,8577,7976],{"class":103},[97,8579,8580,8582],{"class":99,"line":1504},[97,8581,2176],{"class":319},[97,8583,7988],{"class":103},[97,8585,8586,8588],{"class":99,"line":1510},[97,8587,2176],{"class":319},[97,8589,8000],{"class":103},[97,8591,8592],{"class":99,"line":1522},[97,8593,4186],{"class":103},[97,8595,8596,8598,8600],{"class":99,"line":1804},[97,8597,326],{"class":319},[97,8599,2164],{"class":111},[97,8601,2167],{"class":103},[97,8603,8604],{"class":99,"line":1809},[97,8605,1738],{"class":103},[97,8607,8608],{"class":99,"line":1815},[97,8609,8610],{"class":191},"    \u002F\u002F创建学生结构体变量\n",[97,8612,8613,8615,8617,8620,8622,8624,8626,8628,8630,8632,8634],{"class":99,"line":1820},[97,8614,8086],{"class":319},[97,8616,8089],{"class":111},[97,8618,8619],{"class":103}," s",[97,8621,115],{"class":319},[97,8623,1216],{"class":103},[97,8625,8107],{"class":118},[97,8627,698],{"class":103},[97,8629,970],{"class":370},[97,8631,698],{"class":103},[97,8633,1914],{"class":370},[97,8635,4186],{"class":103},[97,8637,8638],{"class":99,"line":1834},[97,8639,8640],{"class":191},"    \u002F\u002F通过指针指向结构体变量\n",[97,8642,8643,8645,8647,8649,8651,8653],{"class":99,"line":1839},[97,8644,8086],{"class":319},[97,8646,8089],{"class":111},[97,8648,6709],{"class":319},[97,8650,24],{"class":103},[97,8652,6530],{"class":319},[97,8654,8655],{"class":103},"s\n",[97,8657,8658],{"class":99,"line":1845},[97,8659,8660],{"class":191},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[97,8662,8663,8665,8667,8670,8672,8675,8677,8680,8682],{"class":99,"line":1866},[97,8664,1743],{"class":103},[97,8666,1362],{"class":319},[97,8668,8669],{"class":103},"p->name",[97,8671,1362],{"class":319},[97,8673,8674],{"class":103},"p->age",[97,8676,1362],{"class":319},[97,8678,8679],{"class":103},"p->score",[97,8681,1362],{"class":319},[97,8683,1384],{"class":103},[97,8685,8686],{"class":99,"line":1871},[97,8687,1757],{"class":103},[14,8689,8691],{"id":8690},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[24,8693,8694],{},"作用：结构体中的成员可以是另一个结构体",[24,8696,8697],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[87,8699,8701],{"className":310,"code":8700,"language":312,"meta":92,"style":92},"#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",[94,8702,8703,8709,8719,8725,8730,8738,8742,8746,8752,8758,8762,8767,8774,8778,8785,8789,8795,8800,8804,8812,8816,8821,8826,8831,8842,8854,8865,8878,8889,8900],{"__ignoreMap":92},[97,8704,8705,8707],{"class":99,"line":100},[97,8706,2141],{"class":319},[97,8708,2144],{"class":118},[97,8710,8711,8713,8715,8717],{"class":99,"line":195},[97,8712,2149],{"class":319},[97,8714,2152],{"class":319},[97,8716,2155],{"class":111},[97,8718,1483],{"class":103},[97,8720,8721,8723],{"class":99,"line":241},[97,8722,2141],{"class":319},[97,8724,7940],{"class":118},[97,8726,8727],{"class":99,"line":1387},[97,8728,8729],{"class":191},"\u002F\u002F定义学生结构体\n",[97,8731,8732,8734,8736],{"class":99,"line":1393},[97,8733,7950],{"class":319},[97,8735,8089],{"class":111},[97,8737,2865],{"class":103},[97,8739,8740],{"class":99,"line":1407},[97,8741,1738],{"class":103},[97,8743,8744],{"class":99,"line":1413},[97,8745,7976],{"class":103},[97,8747,8748,8750],{"class":99,"line":1504},[97,8749,2176],{"class":319},[97,8751,7988],{"class":103},[97,8753,8754,8756],{"class":99,"line":1510},[97,8755,2176],{"class":319},[97,8757,8000],{"class":103},[97,8759,8760],{"class":99,"line":1522},[97,8761,1757],{"class":103},[97,8763,8764],{"class":99,"line":1804},[97,8765,8766],{"class":191},"\u002F\u002F定义老师结构体\n",[97,8768,8769,8771],{"class":99,"line":1809},[97,8770,7950],{"class":319},[97,8772,8773],{"class":111}," Teacher\n",[97,8775,8776],{"class":99,"line":1815},[97,8777,1738],{"class":103},[97,8779,8780,8782],{"class":99,"line":1820},[97,8781,2176],{"class":319},[97,8783,8784],{"class":103}," id;\n",[97,8786,8787],{"class":99,"line":1834},[97,8788,7976],{"class":103},[97,8790,8791,8793],{"class":99,"line":1839},[97,8792,2176],{"class":319},[97,8794,7988],{"class":103},[97,8796,8797],{"class":99,"line":1845},[97,8798,8799],{"class":103},"    Student stu;\n",[97,8801,8802],{"class":99,"line":1866},[97,8803,1757],{"class":103},[97,8805,8806,8808,8810],{"class":99,"line":1871},[97,8807,326],{"class":319},[97,8809,2164],{"class":111},[97,8811,6169],{"class":103},[97,8813,8814],{"class":99,"line":1885},[97,8815,1738],{"class":103},[97,8817,8818],{"class":99,"line":1890},[97,8819,8820],{"class":191},"    \u002F\u002F结构体嵌套结构体\n",[97,8822,8823],{"class":99,"line":1919},[97,8824,8825],{"class":191},"    \u002F\u002F创建老师\n",[97,8827,8828],{"class":99,"line":1924},[97,8829,8830],{"class":103},"    Teacher t;\n",[97,8832,8833,8836,8838,8840],{"class":99,"line":1941},[97,8834,8835],{"class":103},"    t.id",[97,8837,115],{"class":319},[97,8839,631],{"class":370},[97,8841,1483],{"class":103},[97,8843,8844,8847,8849,8852],{"class":99,"line":1946},[97,8845,8846],{"class":103},"    t.name",[97,8848,115],{"class":319},[97,8850,8851],{"class":118},"\"老王\"",[97,8853,1483],{"class":103},[97,8855,8856,8859,8861,8863],{"class":99,"line":1951},[97,8857,8858],{"class":103},"    t.age",[97,8860,115],{"class":319},[97,8862,970],{"class":370},[97,8864,1483],{"class":103},[97,8866,8867,8870,8872,8875],{"class":99,"line":1956},[97,8868,8869],{"class":103},"    t.stu.name",[97,8871,115],{"class":319},[97,8873,8874],{"class":118},"\"小王\"",[97,8876,8877],{"class":103},"；\n",[97,8879,8880,8883,8885,8887],{"class":99,"line":1970},[97,8881,8882],{"class":103},"    t.stu.age",[97,8884,115],{"class":319},[97,8886,1020],{"class":370},[97,8888,1483],{"class":103},[97,8890,8891,8894,8896,8898],{"class":99,"line":1975},[97,8892,8893],{"class":103},"    t.stu.score",[97,8895,115],{"class":319},[97,8897,664],{"class":370},[97,8899,1483],{"class":103},[97,8901,8902],{"class":99,"line":2768},[97,8903,1757],{"class":103},[14,8905,8907],{"id":8906},"_45结构体做函数参数","4.5结构体做函数参数",[24,8909,8910],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[87,8912,8914],{"className":310,"code":8913,"language":312,"meta":92,"style":92},"#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",[94,8915,8916,8922,8932,8938,8944,8948,8952,8958,8964,8968,8973,8978,8995,8999,9032,9036,9041,9060,9064,9095,9099,9107,9111,9120,9132,9144,9156,9169,9177,9190,9202,9210],{"__ignoreMap":92},[97,8917,8918,8920],{"class":99,"line":100},[97,8919,2141],{"class":319},[97,8921,2144],{"class":118},[97,8923,8924,8926,8928,8930],{"class":99,"line":195},[97,8925,2149],{"class":319},[97,8927,2152],{"class":319},[97,8929,2155],{"class":111},[97,8931,1483],{"class":103},[97,8933,8934,8936],{"class":99,"line":241},[97,8935,2141],{"class":319},[97,8937,7940],{"class":118},[97,8939,8940,8942],{"class":99,"line":1387},[97,8941,7950],{"class":319},[97,8943,7953],{"class":111},[97,8945,8946],{"class":99,"line":1393},[97,8947,1738],{"class":103},[97,8949,8950],{"class":99,"line":1407},[97,8951,7976],{"class":103},[97,8953,8954,8956],{"class":99,"line":1413},[97,8955,2176],{"class":319},[97,8957,7988],{"class":103},[97,8959,8960,8962],{"class":99,"line":1504},[97,8961,2176],{"class":319},[97,8963,8000],{"class":103},[97,8965,8966],{"class":99,"line":1510},[97,8967,4186],{"class":103},[97,8969,8970],{"class":99,"line":1522},[97,8971,8972],{"class":191},"\u002F\u002F打印学生信息的函数\n",[97,8974,8975],{"class":99,"line":1804},[97,8976,8977],{"class":191},"\u002F\u002F值传递\n",[97,8979,8980,8982,8985,8987,8989,8991,8993],{"class":99,"line":1809},[97,8981,5555],{"class":319},[97,8983,8984],{"class":111}," printStudent1",[97,8986,323],{"class":103},[97,8988,7950],{"class":319},[97,8990,8089],{"class":111},[97,8992,8619],{"class":5407},[97,8994,329],{"class":103},[97,8996,8997],{"class":99,"line":1815},[97,8998,1738],{"class":103},[97,9000,9001,9003,9005,9008,9010,9013,9015,9018,9020,9022,9024,9027,9029],{"class":99,"line":1820},[97,9002,6720],{"class":103},[97,9004,1362],{"class":319},[97,9006,9007],{"class":103}," s.name ",[97,9009,1362],{"class":319},[97,9011,9012],{"class":118}," \" \"",[97,9014,1637],{"class":319},[97,9016,9017],{"class":103}," s.age ",[97,9019,1362],{"class":319},[97,9021,9012],{"class":118},[97,9023,1637],{"class":319},[97,9025,9026],{"class":103}," s.score ",[97,9028,1362],{"class":319},[97,9030,9031],{"class":103}," endl;\n",[97,9033,9034],{"class":99,"line":1834},[97,9035,1757],{"class":103},[97,9037,9038],{"class":99,"line":1839},[97,9039,9040],{"class":191},"\u002F\u002F地址传递\n",[97,9042,9043,9045,9048,9050,9052,9054,9056,9058],{"class":99,"line":1845},[97,9044,5555],{"class":319},[97,9046,9047],{"class":111}," printStudent2",[97,9049,323],{"class":103},[97,9051,7950],{"class":319},[97,9053,8089],{"class":111},[97,9055,6709],{"class":319},[97,9057,1015],{"class":5407},[97,9059,329],{"class":103},[97,9061,9062],{"class":99,"line":1866},[97,9063,1738],{"class":103},[97,9065,9066,9068,9070,9073,9075,9077,9079,9082,9084,9086,9088,9091,9093],{"class":99,"line":1871},[97,9067,6720],{"class":103},[97,9069,1362],{"class":319},[97,9071,9072],{"class":103}," s->name ",[97,9074,1362],{"class":319},[97,9076,9012],{"class":118},[97,9078,1637],{"class":319},[97,9080,9081],{"class":103}," s->age ",[97,9083,1362],{"class":319},[97,9085,9012],{"class":118},[97,9087,1637],{"class":319},[97,9089,9090],{"class":103}," s->score ",[97,9092,1362],{"class":319},[97,9094,9031],{"class":103},[97,9096,9097],{"class":99,"line":1885},[97,9098,1757],{"class":103},[97,9100,9101,9103,9105],{"class":99,"line":1890},[97,9102,326],{"class":319},[97,9104,2164],{"class":111},[97,9106,2167],{"class":103},[97,9108,9109],{"class":99,"line":1919},[97,9110,1738],{"class":103},[97,9112,9113,9115,9117],{"class":99,"line":1924},[97,9114,8086],{"class":319},[97,9116,8089],{"class":111},[97,9118,9119],{"class":103}," s;\n",[97,9121,9122,9125,9127,9130],{"class":99,"line":1941},[97,9123,9124],{"class":103},"    s.name ",[97,9126,115],{"class":319},[97,9128,9129],{"class":118}," \"张三\"",[97,9131,1483],{"class":103},[97,9133,9134,9137,9139,9142],{"class":99,"line":1946},[97,9135,9136],{"class":103},"    s.age ",[97,9138,115],{"class":319},[97,9140,9141],{"class":370}," 20",[97,9143,1483],{"class":103},[97,9145,9146,9149,9151,9154],{"class":99,"line":1951},[97,9147,9148],{"class":103},"    s.score ",[97,9150,115],{"class":319},[97,9152,9153],{"class":370}," 85",[97,9155,1483],{"class":103},[97,9157,9158,9160,9162,9165,9167],{"class":99,"line":1956},[97,9159,1743],{"class":103},[97,9161,1362],{"class":319},[97,9163,9164],{"class":118},"\"值传递:\"",[97,9166,1362],{"class":319},[97,9168,1384],{"class":103},[97,9170,9171,9174],{"class":99,"line":1970},[97,9172,9173],{"class":111},"    printStudent1",[97,9175,9176],{"class":103},"(s);\n",[97,9178,9179,9181,9183,9186,9188],{"class":99,"line":1975},[97,9180,1743],{"class":103},[97,9182,1362],{"class":319},[97,9184,9185],{"class":118},"\"地址传递:\"",[97,9187,1362],{"class":319},[97,9189,1384],{"class":103},[97,9191,9192,9195,9197,9199],{"class":99,"line":2768},[97,9193,9194],{"class":111},"    printStudent2",[97,9196,323],{"class":103},[97,9198,673],{"class":319},[97,9200,9201],{"class":103},"s); \n",[97,9203,9204,9206,9208],{"class":99,"line":2782},[97,9205,4281],{"class":319},[97,9207,4284],{"class":370},[97,9209,1483],{"class":103},[97,9211,9212],{"class":99,"line":2790},[97,9213,1757],{"class":103},[24,9215,9216],{},"注意：",[67,9218,9219,9222],{},[70,9220,9221],{},"1.先定义结构体，不要在函数中写结构体的定义",[70,9223,9224],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9226,9228],{"id":9227},"_46结构体中const使用场景","4.6结构体中const使用场景",[24,9230,9231],{},"用const防止误操作",[87,9233,9235],{"className":310,"code":9234,"language":312,"meta":92,"style":92},"#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",[94,9236,9237,9243,9253,9259,9264,9268,9272,9278,9284,9288,9304,9308,9331,9335,9343,9347,9368,9375,9379],{"__ignoreMap":92},[97,9238,9239,9241],{"class":99,"line":100},[97,9240,2141],{"class":319},[97,9242,2144],{"class":118},[97,9244,9245,9247,9249,9251],{"class":99,"line":195},[97,9246,2149],{"class":319},[97,9248,2152],{"class":319},[97,9250,2155],{"class":111},[97,9252,1483],{"class":103},[97,9254,9255,9257],{"class":99,"line":241},[97,9256,2141],{"class":319},[97,9258,7940],{"class":118},[97,9260,9261],{"class":99,"line":1387},[97,9262,9263],{"class":103},"sctuct Student\n",[97,9265,9266],{"class":99,"line":1393},[97,9267,1738],{"class":103},[97,9269,9270],{"class":99,"line":1407},[97,9271,7976],{"class":103},[97,9273,9274,9276],{"class":99,"line":1413},[97,9275,2176],{"class":319},[97,9277,7988],{"class":103},[97,9279,9280,9282],{"class":99,"line":1504},[97,9281,2176],{"class":319},[97,9283,8000],{"class":103},[97,9285,9286],{"class":99,"line":1510},[97,9287,4186],{"class":103},[97,9289,9290,9292,9295,9297,9300,9302],{"class":99,"line":1522},[97,9291,5555],{"class":319},[97,9293,9294],{"class":111}," printStudents",[97,9296,323],{"class":103},[97,9298,9299],{"class":111},"student",[97,9301,8619],{"class":5407},[97,9303,329],{"class":103},[97,9305,9306],{"class":99,"line":1804},[97,9307,1738],{"class":103},[97,9309,9310,9312,9314,9317,9319,9322,9324,9327,9329],{"class":99,"line":1809},[97,9311,1743],{"class":103},[97,9313,1362],{"class":319},[97,9315,9316],{"class":103},"s.name",[97,9318,1362],{"class":319},[97,9320,9321],{"class":103},"s.age",[97,9323,1362],{"class":319},[97,9325,9326],{"class":103},"s.score",[97,9328,1362],{"class":319},[97,9330,1384],{"class":103},[97,9332,9333],{"class":99,"line":1815},[97,9334,1757],{"class":103},[97,9336,9337,9339,9341],{"class":99,"line":1820},[97,9338,326],{"class":319},[97,9340,2164],{"class":111},[97,9342,6169],{"class":103},[97,9344,9345],{"class":99,"line":1834},[97,9346,1738],{"class":103},[97,9348,9349,9352,9354,9356,9358,9360,9362,9364,9366],{"class":99,"line":1839},[97,9350,9351],{"class":103},"    Student s",[97,9353,115],{"class":319},[97,9355,1216],{"class":103},[97,9357,8107],{"class":118},[97,9359,698],{"class":103},[97,9361,970],{"class":370},[97,9363,698],{"class":103},[97,9365,970],{"class":370},[97,9367,4186],{"class":103},[97,9369,9370,9373],{"class":99,"line":1845},[97,9371,9372],{"class":111},"    printStudent",[97,9374,9176],{"class":103},[97,9376,9377],{"class":99,"line":1866},[97,9378,2591],{"emptyLinePlaceholder":249},[97,9380,9381],{"class":99,"line":1871},[97,9382,1757],{"class":103},[24,9384,9216],{},[67,9386,9387,9390,9393],{},[70,9388,9389],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[70,9391,9392],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[70,9394,9395],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[87,9397,9399],{"className":310,"code":9398,"language":312,"meta":92,"style":92},"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",[94,9400,9401,9420,9424,9429,9449],{"__ignoreMap":92},[97,9402,9403,9405,9407,9409,9411,9414,9416,9418],{"class":99,"line":100},[97,9404,5555],{"class":319},[97,9406,9294],{"class":111},[97,9408,323],{"class":103},[97,9410,6983],{"class":319},[97,9412,9413],{"class":111}," student",[97,9415,6709],{"class":319},[97,9417,1015],{"class":5407},[97,9419,329],{"class":103},[97,9421,9422],{"class":99,"line":195},[97,9423,1738],{"class":103},[97,9425,9426],{"class":99,"line":241},[97,9427,9428],{"class":191},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[97,9430,9431,9433,9435,9437,9439,9441,9443,9445,9447],{"class":99,"line":1387},[97,9432,1743],{"class":103},[97,9434,1362],{"class":319},[97,9436,9316],{"class":103},[97,9438,1362],{"class":319},[97,9440,9321],{"class":103},[97,9442,1362],{"class":319},[97,9444,9326],{"class":103},[97,9446,1362],{"class":319},[97,9448,1384],{"class":103},[97,9450,9451],{"class":99,"line":1393},[97,9452,1757],{"class":103},[14,9454,9456],{"id":9455},"_47案例","4.7案例",[138,9458,9459],{},[70,9460,9461],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[87,9463,9465],{"className":310,"code":9464,"language":312,"meta":92,"style":92},"#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",[94,9466,9467,9473,9483,9489,9496,9500,9506,9510,9515,9521,9527,9531,9535,9541,9545,9550,9555,9568,9572,9577,9603,9607,9619,9646,9650,9662,9672,9676,9681,9710,9714,9726,9735,9762,9773,9783,9787,9791,9795,9800,9824,9828,9852,9856,9875,9901,9905,9930,9953,9977,9982,9987,9992,10001,10006,10012,10033,10039,10053,10059,10086,10095,10101,10109,10114],{"__ignoreMap":92},[97,9468,9469,9471],{"class":99,"line":100},[97,9470,2141],{"class":319},[97,9472,2144],{"class":118},[97,9474,9475,9477,9479,9481],{"class":99,"line":195},[97,9476,2149],{"class":319},[97,9478,2152],{"class":319},[97,9480,2155],{"class":111},[97,9482,1483],{"class":103},[97,9484,9485,9487],{"class":99,"line":241},[97,9486,2141],{"class":319},[97,9488,7940],{"class":118},[97,9490,9491,9493],{"class":99,"line":1387},[97,9492,2141],{"class":319},[97,9494,9495],{"class":118},"\u003Cctime>\n",[97,9497,9498],{"class":99,"line":1393},[97,9499,8729],{"class":191},[97,9501,9502,9504],{"class":99,"line":1407},[97,9503,7950],{"class":319},[97,9505,7953],{"class":111},[97,9507,9508],{"class":99,"line":1413},[97,9509,1738],{"class":103},[97,9511,9512],{"class":99,"line":1504},[97,9513,9514],{"class":103},"    string sName;\n",[97,9516,9517,9519],{"class":99,"line":1510},[97,9518,2176],{"class":319},[97,9520,7988],{"class":103},[97,9522,9523,9525],{"class":99,"line":1522},[97,9524,2176],{"class":319},[97,9526,8000],{"class":103},[97,9528,9529],{"class":99,"line":1804},[97,9530,4186],{"class":103},[97,9532,9533],{"class":99,"line":1809},[97,9534,8766],{"class":191},[97,9536,9537,9539],{"class":99,"line":1815},[97,9538,7950],{"class":319},[97,9540,8773],{"class":111},[97,9542,9543],{"class":99,"line":1820},[97,9544,1738],{"class":103},[97,9546,9547],{"class":99,"line":1834},[97,9548,9549],{"class":103},"    string tName;\n",[97,9551,9552],{"class":99,"line":1839},[97,9553,9554],{"class":191},"    \u002F\u002F学生数组\n",[97,9556,9557,9559,9561,9564,9566],{"class":99,"line":1845},[97,9558,8086],{"class":319},[97,9560,8089],{"class":111},[97,9562,9563],{"class":103}," sArray[",[97,9565,639],{"class":370},[97,9567,4881],{"class":103},[97,9569,9570],{"class":99,"line":1866},[97,9571,4186],{"class":103},[97,9573,9574],{"class":99,"line":1871},[97,9575,9576],{"class":191},"\u002F\u002F给老师和学生赋值的函数\n",[97,9578,9579,9581,9584,9586,9588,9591,9594,9597,9599,9601],{"class":99,"line":1885},[97,9580,5555],{"class":319},[97,9582,9583],{"class":111}," allocateSpace",[97,9585,323],{"class":103},[97,9587,7950],{"class":319},[97,9589,9590],{"class":111}," Teacher",[97,9592,9593],{"class":5407}," tArray",[97,9595,9596],{"class":103},"[],",[97,9598,326],{"class":319},[97,9600,7522],{"class":5407},[97,9602,329],{"class":103},[97,9604,9605],{"class":99,"line":1890},[97,9606,1738],{"class":103},[97,9608,9609,9612,9614,9617],{"class":99,"line":1919},[97,9610,9611],{"class":103},"    string nameSeed",[97,9613,115],{"class":319},[97,9615,9616],{"class":118},"\"ABCDE\"",[97,9618,1483],{"class":103},[97,9620,9621,9623,9625,9627,9630,9632,9634,9637,9639,9642,9644],{"class":99,"line":1924},[97,9622,3392],{"class":319},[97,9624,1850],{"class":103},[97,9626,326],{"class":319},[97,9628,9629],{"class":103}," i ",[97,9631,115],{"class":319},[97,9633,4284],{"class":370},[97,9635,9636],{"class":103},"; i ",[97,9638,104],{"class":319},[97,9640,9641],{"class":103}," len; i",[97,9643,2483],{"class":319},[97,9645,329],{"class":103},[97,9647,9648],{"class":99,"line":1941},[97,9649,2221],{"class":103},[97,9651,9652,9655,9657,9660],{"class":99,"line":1946},[97,9653,9654],{"class":103},"        tArray[i].tName ",[97,9656,115],{"class":319},[97,9658,9659],{"class":118}," \"Teacher_\"",[97,9661,1483],{"class":103},[97,9663,9664,9666,9669],{"class":99,"line":1951},[97,9665,9654],{"class":103},[97,9667,9668],{"class":319},"+=",[97,9670,9671],{"class":103},"nameSeed[i];\n",[97,9673,9674],{"class":99,"line":1956},[97,9675,2591],{"emptyLinePlaceholder":249},[97,9677,9678],{"class":99,"line":1970},[97,9679,9680],{"class":191},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[97,9682,9683,9685,9687,9689,9692,9694,9696,9699,9701,9703,9706,9708],{"class":99,"line":1975},[97,9684,3594],{"class":319},[97,9686,1850],{"class":103},[97,9688,326],{"class":319},[97,9690,9691],{"class":103}," j ",[97,9693,115],{"class":319},[97,9695,4284],{"class":370},[97,9697,9698],{"class":103},"; j ",[97,9700,104],{"class":319},[97,9702,2339],{"class":370},[97,9704,9705],{"class":103},"; j",[97,9707,2483],{"class":319},[97,9709,329],{"class":103},[97,9711,9712],{"class":99,"line":2768},[97,9713,2701],{"class":103},[97,9715,9716,9719,9721,9724],{"class":99,"line":2782},[97,9717,9718],{"class":103},"            tArray[i].sArray[j].sName ",[97,9720,115],{"class":319},[97,9722,9723],{"class":118}," \"Student_\"",[97,9725,1483],{"class":103},[97,9727,9728,9730,9732],{"class":99,"line":2790},[97,9729,9718],{"class":103},[97,9731,9668],{"class":319},[97,9733,9734],{"class":103}," nameSeed[j];\n",[97,9736,9737,9740,9743,9745,9747,9749,9751,9753,9755,9757,9759],{"class":99,"line":2795},[97,9738,9739],{"class":319},"            int",[97,9741,9742],{"class":103}," random",[97,9744,115],{"class":319},[97,9746,2615],{"class":111},[97,9748,2618],{"class":103},[97,9750,648],{"class":319},[97,9752,1227],{"class":370},[97,9754,801],{"class":319},[97,9756,721],{"class":370},[97,9758,377],{"class":103},[97,9760,9761],{"class":191},"\u002F\u002F40~99\n",[97,9763,9764,9767,9769,9771],{"class":99,"line":2801},[97,9765,9766],{"class":103},"            tArray[i].sArray[j].age ",[97,9768,115],{"class":319},[97,9770,9141],{"class":370},[97,9772,1483],{"class":103},[97,9774,9775,9778,9780],{"class":99,"line":2807},[97,9776,9777],{"class":103},"            tArray[i].sArray[j].score ",[97,9779,115],{"class":319},[97,9781,9782],{"class":103}," random;\n",[97,9784,9785],{"class":99,"line":2812},[97,9786,2720],{"class":103},[97,9788,9789],{"class":99,"line":8139},[97,9790,2378],{"class":103},[97,9792,9793],{"class":99,"line":8163},[97,9794,1757],{"class":103},[97,9796,9797],{"class":99,"line":8168},[97,9798,9799],{"class":191},"\u002F\u002F打印所有信息的函数\n",[97,9801,9802,9804,9807,9809,9811,9813,9815,9818,9820,9822],{"class":99,"line":8174},[97,9803,5555],{"class":319},[97,9805,9806],{"class":111}," printInfo",[97,9808,323],{"class":103},[97,9810,7950],{"class":319},[97,9812,9590],{"class":111},[97,9814,9593],{"class":5407},[97,9816,9817],{"class":103},"[], ",[97,9819,326],{"class":319},[97,9821,7522],{"class":5407},[97,9823,329],{"class":103},[97,9825,9826],{"class":99,"line":8201},[97,9827,1738],{"class":103},[97,9829,9830,9832,9834,9836,9838,9840,9842,9844,9846,9848,9850],{"class":99,"line":8206},[97,9831,3392],{"class":319},[97,9833,1850],{"class":103},[97,9835,326],{"class":319},[97,9837,9629],{"class":103},[97,9839,115],{"class":319},[97,9841,4284],{"class":370},[97,9843,9636],{"class":103},[97,9845,104],{"class":319},[97,9847,9641],{"class":103},[97,9849,2483],{"class":319},[97,9851,329],{"class":103},[97,9853,9854],{"class":99,"line":8212},[97,9855,2221],{"class":103},[97,9857,9858,9861,9863,9866,9868,9871,9873],{"class":99,"line":8224},[97,9859,9860],{"class":103},"        cout ",[97,9862,1362],{"class":319},[97,9864,9865],{"class":118}," \"Teacher: \"",[97,9867,1637],{"class":319},[97,9869,9870],{"class":103}," tArray[i].tName ",[97,9872,1362],{"class":319},[97,9874,9031],{"class":103},[97,9876,9877,9879,9881,9883,9885,9887,9889,9891,9893,9895,9897,9899],{"class":99,"line":8236},[97,9878,3594],{"class":319},[97,9880,1850],{"class":103},[97,9882,326],{"class":319},[97,9884,9691],{"class":103},[97,9886,115],{"class":319},[97,9888,4284],{"class":370},[97,9890,9698],{"class":103},[97,9892,104],{"class":319},[97,9894,2339],{"class":370},[97,9896,9705],{"class":103},[97,9898,2483],{"class":319},[97,9900,329],{"class":103},[97,9902,9903],{"class":99,"line":8248},[97,9904,2701],{"class":103},[97,9906,9908,9911,9913,9916,9918,9921,9923,9926,9928],{"class":99,"line":9907},47,[97,9909,9910],{"class":103},"            cout ",[97,9912,1362],{"class":319},[97,9914,9915],{"class":118}," \"",[97,9917,1423],{"class":370},[97,9919,9920],{"class":118},"Student: \"",[97,9922,1637],{"class":319},[97,9924,9925],{"class":103}," tArray[i].sArray[j].sName",[97,9927,1362],{"class":319},[97,9929,1384],{"class":103},[97,9931,9933,9935,9937,9939,9941,9944,9946,9949,9951],{"class":99,"line":9932},48,[97,9934,9910],{"class":103},[97,9936,1362],{"class":319},[97,9938,9915],{"class":118},[97,9940,1423],{"class":370},[97,9942,9943],{"class":118},"Age: \"",[97,9945,1637],{"class":319},[97,9947,9948],{"class":103}," tArray[i].sArray[j].age ",[97,9950,1362],{"class":319},[97,9952,9031],{"class":103},[97,9954,9956,9958,9960,9962,9964,9967,9969,9972,9974],{"class":99,"line":9955},49,[97,9957,9910],{"class":103},[97,9959,1362],{"class":319},[97,9961,9915],{"class":118},[97,9963,1423],{"class":370},[97,9965,9966],{"class":118},"Score: \"",[97,9968,1637],{"class":319},[97,9970,9971],{"class":103}," tArray[i].sArray[j].score ",[97,9973,1362],{"class":319},[97,9975,9976],{"class":103}," endl;   \n",[97,9978,9980],{"class":99,"line":9979},50,[97,9981,2720],{"class":103},[97,9983,9985],{"class":99,"line":9984},51,[97,9986,2378],{"class":103},[97,9988,9990],{"class":99,"line":9989},52,[97,9991,1757],{"class":103},[97,9993,9995,9997,9999],{"class":99,"line":9994},53,[97,9996,326],{"class":319},[97,9998,2164],{"class":111},[97,10000,2167],{"class":103},[97,10002,10004],{"class":99,"line":10003},54,[97,10005,1738],{"class":103},[97,10007,10009],{"class":99,"line":10008},55,[97,10010,10011],{"class":191},"    \u002F\u002F随机数种子\n",[97,10013,10015,10017,10019,10021,10023,10025,10027,10029,10031],{"class":99,"line":10014},56,[97,10016,2564],{"class":111},[97,10018,2567],{"class":103},[97,10020,2570],{"class":319},[97,10022,2573],{"class":319},[97,10024,749],{"class":103},[97,10026,2578],{"class":111},[97,10028,323],{"class":103},[97,10030,2583],{"class":370},[97,10032,2586],{"class":103},[97,10034,10036],{"class":99,"line":10035},57,[97,10037,10038],{"class":191},"    \u002F\u002F1.创建3名老师的数组\n",[97,10040,10042,10044,10046,10049,10051],{"class":99,"line":10041},58,[97,10043,8086],{"class":319},[97,10045,9590],{"class":111},[97,10047,10048],{"class":103}," tArray[",[97,10050,392],{"class":370},[97,10052,4881],{"class":103},[97,10054,10056],{"class":99,"line":10055},59,[97,10057,10058],{"class":191},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[97,10060,10062,10064,10067,10069,10072,10075,10077,10079,10082,10084],{"class":99,"line":10061},60,[97,10063,2176],{"class":319},[97,10065,10066],{"class":103}," len ",[97,10068,115],{"class":319},[97,10070,10071],{"class":319}," sizeof",[97,10073,10074],{"class":103},"(tArray) ",[97,10076,904],{"class":319},[97,10078,10071],{"class":319},[97,10080,10081],{"class":103},"(tArray[",[97,10083,511],{"class":370},[97,10085,4047],{"class":103},[97,10087,10089,10092],{"class":99,"line":10088},61,[97,10090,10091],{"class":111},"    allocateSpace",[97,10093,10094],{"class":103},"(tArray, len);\n",[97,10096,10098],{"class":99,"line":10097},62,[97,10099,10100],{"class":191},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[97,10102,10104,10107],{"class":99,"line":10103},63,[97,10105,10106],{"class":111},"    printInfo",[97,10108,10094],{"class":103},[97,10110,10112],{"class":99,"line":10111},64,[97,10113,2591],{"emptyLinePlaceholder":249},[97,10115,10117],{"class":99,"line":10116},65,[97,10118,1757],{"class":103},[138,10120,10121],{"start":195},[70,10122,10123,10126],{},[469,10124,10125],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[24,10128,10129],{},"五名英雄信息如下：",[87,10131,10135],{"className":10132,"code":10133,"language":10134,"meta":92,"style":92},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[94,10136,10137,10155,10172,10189,10206],{"__ignoreMap":92},[97,10138,10139,10141,10144,10146,10148,10150,10153],{"class":99,"line":100},[97,10140,5108],{"class":103},[97,10142,10143],{"class":118},"\"刘备\"",[97,10145,698],{"class":103},[97,10147,1095],{"class":370},[97,10149,698],{"class":103},[97,10151,10152],{"class":118},"\"男\"",[97,10154,5121],{"class":103},[97,10156,10157,10159,10162,10164,10166,10168,10170],{"class":99,"line":195},[97,10158,5108],{"class":103},[97,10160,10161],{"class":118},"\"关羽\"",[97,10163,698],{"class":103},[97,10165,1070],{"class":370},[97,10167,698],{"class":103},[97,10169,10152],{"class":118},[97,10171,5121],{"class":103},[97,10173,10174,10176,10179,10181,10183,10185,10187],{"class":99,"line":241},[97,10175,5108],{"class":103},[97,10177,10178],{"class":118},"\"张飞\"",[97,10180,698],{"class":103},[97,10182,1020],{"class":370},[97,10184,698],{"class":103},[97,10186,10152],{"class":118},[97,10188,5121],{"class":103},[97,10190,10191,10193,10196,10198,10200,10202,10204],{"class":99,"line":1387},[97,10192,5108],{"class":103},[97,10194,10195],{"class":118},"\"赵云\"",[97,10197,698],{"class":103},[97,10199,1045],{"class":370},[97,10201,698],{"class":103},[97,10203,10152],{"class":118},[97,10205,5121],{"class":103},[97,10207,10208,10210,10213,10215,10217,10219,10222],{"class":99,"line":1393},[97,10209,5108],{"class":103},[97,10211,10212],{"class":118},"\"貂蝉\"",[97,10214,698],{"class":103},[97,10216,995],{"class":370},[97,10218,698],{"class":103},[97,10220,10221],{"class":118},"\"女\"",[97,10223,5121],{"class":103},[24,10225,10226],{},"代码：",[87,10228,10230],{"className":310,"code":10229,"language":312,"meta":92,"style":92},"#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",[94,10231,10232,10238,10248,10254,10261,10265,10269,10275,10280,10284,10289,10312,10316,10341,10345,10378,10383,10412,10417,10432,10458,10478,10483,10488,10492,10496,10501,10523,10527,10551,10555,10617,10621,10625,10633,10637,10642,10653,10657,10673,10689,10705,10721,10737,10741,10761,10783,10788,10801,10808,10813,10819,10824,10837,10843],{"__ignoreMap":92},[97,10233,10234,10236],{"class":99,"line":100},[97,10235,2141],{"class":319},[97,10237,2144],{"class":118},[97,10239,10240,10242,10244,10246],{"class":99,"line":195},[97,10241,2149],{"class":319},[97,10243,2152],{"class":319},[97,10245,2155],{"class":111},[97,10247,1483],{"class":103},[97,10249,10250,10252],{"class":99,"line":241},[97,10251,2141],{"class":319},[97,10253,7940],{"class":118},[97,10255,10256,10258],{"class":99,"line":1387},[97,10257,7950],{"class":319},[97,10259,10260],{"class":111}," Sanguo\n",[97,10262,10263],{"class":99,"line":1393},[97,10264,1738],{"class":103},[97,10266,10267],{"class":99,"line":1407},[97,10268,7976],{"class":103},[97,10270,10271,10273],{"class":99,"line":1413},[97,10272,2176],{"class":319},[97,10274,7988],{"class":103},[97,10276,10277],{"class":99,"line":1504},[97,10278,10279],{"class":103},"    string gender;\n",[97,10281,10282],{"class":99,"line":1510},[97,10283,4186],{"class":103},[97,10285,10286],{"class":99,"line":1522},[97,10287,10288],{"class":191},"\u002F\u002F定义排序函数\n",[97,10290,10291,10293,10295,10297,10300,10302,10304,10306,10308,10310],{"class":99,"line":1804},[97,10292,5555],{"class":319},[97,10294,7507],{"class":111},[97,10296,323],{"class":103},[97,10298,10299],{"class":111},"Sanguo",[97,10301,6709],{"class":319},[97,10303,1015],{"class":5407},[97,10305,698],{"class":103},[97,10307,326],{"class":319},[97,10309,7522],{"class":5407},[97,10311,329],{"class":103},[97,10313,10314],{"class":99,"line":1809},[97,10315,1738],{"class":103},[97,10317,10318,10320,10322,10324,10326,10328,10330,10332,10334,10337,10339],{"class":99,"line":1815},[97,10319,3392],{"class":319},[97,10321,323],{"class":103},[97,10323,326],{"class":319},[97,10325,3223],{"class":103},[97,10327,115],{"class":319},[97,10329,511],{"class":370},[97,10331,3230],{"class":103},[97,10333,104],{"class":319},[97,10335,10336],{"class":103},"len;i",[97,10338,2483],{"class":319},[97,10340,329],{"class":103},[97,10342,10343],{"class":99,"line":1820},[97,10344,2221],{"class":103},[97,10346,10347,10350,10352,10354,10356,10358,10360,10362,10364,10366,10368,10370,10372,10374,10376],{"class":99,"line":1834},[97,10348,10349],{"class":319},"     for",[97,10351,1850],{"class":103},[97,10353,326],{"class":319},[97,10355,3601],{"class":103},[97,10357,115],{"class":319},[97,10359,511],{"class":370},[97,10361,3608],{"class":103},[97,10363,104],{"class":319},[97,10365,7549],{"class":103},[97,10367,852],{"class":319},[97,10369,537],{"class":370},[97,10371,852],{"class":319},[97,10373,3741],{"class":103},[97,10375,2483],{"class":319},[97,10377,329],{"class":103},[97,10379,10380],{"class":99,"line":1839},[97,10381,10382],{"class":103},"     {\n",[97,10384,10385,10388,10391,10393,10396,10398,10401,10403,10405,10407,10409],{"class":99,"line":1845},[97,10386,10387],{"class":319},"         if",[97,10389,10390],{"class":103}," ((s",[97,10392,801],{"class":319},[97,10394,10395],{"class":103},"j)->age ",[97,10397,1279],{"class":319},[97,10399,10400],{"class":103}," (s",[97,10402,801],{"class":319},[97,10404,787],{"class":103},[97,10406,801],{"class":319},[97,10408,537],{"class":370},[97,10410,10411],{"class":103},")->age)\n",[97,10413,10414],{"class":99,"line":1866},[97,10415,10416],{"class":103},"         {\n",[97,10418,10419,10422,10424,10427,10429],{"class":99,"line":1871},[97,10420,10421],{"class":103},"             Sanguo temp",[97,10423,7344],{"class":319},[97,10425,10426],{"class":103},"(s",[97,10428,801],{"class":319},[97,10430,10431],{"class":103},"j);\n",[97,10433,10434,10437,10439,10441,10444,10446,10448,10450,10452,10454,10456],{"class":99,"line":1885},[97,10435,10436],{"class":319},"             *",[97,10438,10426],{"class":103},[97,10440,801],{"class":319},[97,10442,10443],{"class":103},"j)",[97,10445,7344],{"class":319},[97,10447,10426],{"class":103},[97,10449,801],{"class":319},[97,10451,787],{"class":103},[97,10453,801],{"class":319},[97,10455,537],{"class":370},[97,10457,2910],{"class":103},[97,10459,10460,10462,10464,10466,10468,10470,10472,10474,10476],{"class":99,"line":1890},[97,10461,10436],{"class":319},[97,10463,10426],{"class":103},[97,10465,801],{"class":319},[97,10467,787],{"class":103},[97,10469,801],{"class":319},[97,10471,537],{"class":370},[97,10473,749],{"class":103},[97,10475,115],{"class":319},[97,10477,4471],{"class":103},[97,10479,10480],{"class":99,"line":1919},[97,10481,10482],{"class":103},"         }\n",[97,10484,10485],{"class":99,"line":1924},[97,10486,10487],{"class":103},"     }\n",[97,10489,10490],{"class":99,"line":1941},[97,10491,2378],{"class":103},[97,10493,10494],{"class":99,"line":1946},[97,10495,1757],{"class":103},[97,10497,10498],{"class":99,"line":1951},[97,10499,10500],{"class":191},"\u002F\u002F定义打印函数\n",[97,10502,10503,10505,10507,10509,10511,10513,10515,10517,10519,10521],{"class":99,"line":1956},[97,10504,5555],{"class":319},[97,10506,9806],{"class":111},[97,10508,323],{"class":103},[97,10510,10299],{"class":111},[97,10512,6709],{"class":319},[97,10514,1015],{"class":5407},[97,10516,698],{"class":103},[97,10518,326],{"class":319},[97,10520,7522],{"class":5407},[97,10522,329],{"class":103},[97,10524,10525],{"class":99,"line":1970},[97,10526,1738],{"class":103},[97,10528,10529,10531,10533,10535,10537,10539,10541,10543,10545,10547,10549],{"class":99,"line":1975},[97,10530,3392],{"class":319},[97,10532,1850],{"class":103},[97,10534,326],{"class":319},[97,10536,3223],{"class":103},[97,10538,115],{"class":319},[97,10540,511],{"class":370},[97,10542,3230],{"class":103},[97,10544,104],{"class":319},[97,10546,10336],{"class":103},[97,10548,2483],{"class":319},[97,10550,329],{"class":103},[97,10552,10553],{"class":99,"line":2768},[97,10554,2221],{"class":103},[97,10556,10557,10559,10561,10563,10565,10568,10570,10572,10574,10577,10579,10581,10583,10586,10588,10590,10592,10595,10597,10599,10601,10604,10606,10608,10610,10613,10615],{"class":99,"line":2782},[97,10558,3642],{"class":103},[97,10560,1362],{"class":319},[97,10562,571],{"class":118},[97,10564,1423],{"class":370},[97,10566,10567],{"class":118},"姓名：\"",[97,10569,1362],{"class":319},[97,10571,10426],{"class":103},[97,10573,801],{"class":319},[97,10575,10576],{"class":103},"i)->name",[97,10578,1362],{"class":319},[97,10580,571],{"class":118},[97,10582,1423],{"class":370},[97,10584,10585],{"class":118},"年龄：\"",[97,10587,1362],{"class":319},[97,10589,10426],{"class":103},[97,10591,801],{"class":319},[97,10593,10594],{"class":103},"i)->age",[97,10596,1362],{"class":319},[97,10598,571],{"class":118},[97,10600,1423],{"class":370},[97,10602,10603],{"class":118},"性别：\"",[97,10605,1362],{"class":319},[97,10607,10426],{"class":103},[97,10609,801],{"class":319},[97,10611,10612],{"class":103},"i)->gender",[97,10614,1362],{"class":319},[97,10616,1384],{"class":103},[97,10618,10619],{"class":99,"line":2790},[97,10620,2378],{"class":103},[97,10622,10623],{"class":99,"line":2795},[97,10624,1757],{"class":103},[97,10626,10627,10629,10631],{"class":99,"line":2801},[97,10628,326],{"class":319},[97,10630,2164],{"class":111},[97,10632,2167],{"class":103},[97,10634,10635],{"class":99,"line":2807},[97,10636,1738],{"class":103},[97,10638,10639],{"class":99,"line":2812},[97,10640,10641],{"class":191},"    \u002F\u002F定义结构体变量\n",[97,10643,10644,10647,10649,10651],{"class":99,"line":8139},[97,10645,10646],{"class":103},"    Sanguo s1[",[97,10648,639],{"class":370},[97,10650,1259],{"class":103},[97,10652,5099],{"class":319},[97,10654,10655],{"class":99,"line":8163},[97,10656,2221],{"class":103},[97,10658,10659,10661,10663,10665,10667,10669,10671],{"class":99,"line":8168},[97,10660,5108],{"class":103},[97,10662,10143],{"class":118},[97,10664,698],{"class":103},[97,10666,1095],{"class":370},[97,10668,698],{"class":103},[97,10670,10152],{"class":118},[97,10672,5121],{"class":103},[97,10674,10675,10677,10679,10681,10683,10685,10687],{"class":99,"line":8174},[97,10676,5108],{"class":103},[97,10678,10161],{"class":118},[97,10680,698],{"class":103},[97,10682,1070],{"class":370},[97,10684,698],{"class":103},[97,10686,10152],{"class":118},[97,10688,5121],{"class":103},[97,10690,10691,10693,10695,10697,10699,10701,10703],{"class":99,"line":8201},[97,10692,5108],{"class":103},[97,10694,10178],{"class":118},[97,10696,698],{"class":103},[97,10698,1020],{"class":370},[97,10700,698],{"class":103},[97,10702,10152],{"class":118},[97,10704,5121],{"class":103},[97,10706,10707,10709,10711,10713,10715,10717,10719],{"class":99,"line":8206},[97,10708,5108],{"class":103},[97,10710,10195],{"class":118},[97,10712,698],{"class":103},[97,10714,1045],{"class":370},[97,10716,698],{"class":103},[97,10718,10152],{"class":118},[97,10720,5121],{"class":103},[97,10722,10723,10725,10727,10729,10731,10733,10735],{"class":99,"line":8212},[97,10724,5108],{"class":103},[97,10726,10212],{"class":118},[97,10728,698],{"class":103},[97,10730,995],{"class":370},[97,10732,698],{"class":103},[97,10734,10221],{"class":118},[97,10736,5121],{"class":103},[97,10738,10739],{"class":99,"line":8224},[97,10740,5142],{"class":103},[97,10742,10743,10745,10747,10749,10752,10754,10757,10759],{"class":99,"line":8236},[97,10744,2176],{"class":319},[97,10746,7522],{"class":103},[97,10748,4394],{"class":319},[97,10750,10751],{"class":103},"(s1)",[97,10753,4400],{"class":319},[97,10755,10756],{"class":103},"(s1[",[97,10758,511],{"class":370},[97,10760,4047],{"class":103},[97,10762,10763,10766,10768,10771,10773,10776,10779,10781],{"class":99,"line":8248},[97,10764,10765],{"class":103},"    Sanguo ",[97,10767,775],{"class":319},[97,10769,10770],{"class":103},"s ",[97,10772,115],{"class":319},[97,10774,10775],{"class":319}," &",[97,10777,10778],{"class":103},"s1[",[97,10780,511],{"class":370},[97,10782,4881],{"class":103},[97,10784,10785],{"class":99,"line":9907},[97,10786,10787],{"class":191},"    \u002F\u002F排序前：\n",[97,10789,10790,10792,10794,10797,10799],{"class":99,"line":9932},[97,10791,6720],{"class":103},[97,10793,1362],{"class":319},[97,10795,10796],{"class":118}," \"排序前：\"",[97,10798,1637],{"class":319},[97,10800,9031],{"class":103},[97,10802,10803,10805],{"class":99,"line":9955},[97,10804,10106],{"class":111},[97,10806,10807],{"class":103},"(s,len);\n",[97,10809,10810],{"class":99,"line":9979},[97,10811,10812],{"class":191},"    \u002F\u002F调用排序函数\n",[97,10814,10815,10817],{"class":99,"line":9984},[97,10816,7789],{"class":111},[97,10818,10807],{"class":103},[97,10820,10821],{"class":99,"line":9989},[97,10822,10823],{"class":191},"    \u002F\u002F排序后\n",[97,10825,10826,10828,10830,10833,10835],{"class":99,"line":9994},[97,10827,6720],{"class":103},[97,10829,1362],{"class":319},[97,10831,10832],{"class":118}," \"排序后：\"",[97,10834,1637],{"class":319},[97,10836,9031],{"class":103},[97,10838,10839,10841],{"class":99,"line":10003},[97,10840,10106],{"class":111},[97,10842,10807],{"class":103},[97,10844,10845],{"class":99,"line":10008},[97,10846,1757],{"class":103},[24,10848,10849,10850,10852],{},"注意：使用指针时直接用传首地址**&s",[97,10851,511],{},"**",[231,10854,10855],{},"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":92,"searchDepth":195,"depth":195,"links":10857},[10858,10859,10860,10861,10862,10863,10864],{"id":7894,"depth":195,"text":7895},{"id":8256,"depth":195,"text":8257},{"id":8525,"depth":195,"text":8526},{"id":8690,"depth":195,"text":8691},{"id":8906,"depth":195,"text":8907},{"id":9227,"depth":195,"text":9228},{"id":9455,"depth":195,"text":9456},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7883,"description":7891},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10871,"title":10872,"body":10873,"description":92,"extension":247,"meta":12216,"navigation":249,"path":12217,"seo":12218,"stem":12219,"__hash__":12220},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10874,"toc":12210},[10875,10878,10882,10888,10902,10907,10910,10914,10921,10927,10930,10937,10943,10948,10951,10954,10957,11521,11524,11538,11542,11547,11563,11703,11706,11712,11715,11720,11728,11836,11839,11844,11847,11852,11855,11861,11864,12207],[10,10876,10872],{"id":10877},"_5程序内存模型",[14,10879,10881],{"id":10880},"_51内存分区模型","5.1内存分区模型",[24,10883,10884,10885],{},"C++程序在执行时，将内存大方向划分为",[469,10886,10887],{},"4个区域",[67,10889,10890,10893,10896,10899],{},[70,10891,10892],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[70,10894,10895],{},"全局区：存放全局变量和静态变量以及常量",[70,10897,10898],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[70,10900,10901],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[24,10903,10904],{},[469,10905,10906],{},"内存四区意义：",[24,10908,10909],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[48,10911,10913],{"id":10912},"_511程序运行前","5.1.1程序运行前",[24,10915,10916,10917,10920],{},"​\t在程序编译后，生成了exe可执行程序，",[469,10918,10919],{},"未执行该程序前","分为两个区域",[24,10922,10923,10924],{},"​\t",[469,10925,10926],{},"代码区：",[24,10928,10929],{},"​\t\t存放 CPU 执行的机器指令",[24,10931,10932,10933,10936],{},"​\t\t代码区是",[469,10934,10935],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[24,10938,10932,10939,10942],{},[469,10940,10941],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[24,10944,10923,10945],{},[469,10946,10947],{},"全局区：",[24,10949,10950],{},"​\t\t全局变量和静态变量存放在此.",[24,10952,10953],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[24,10955,10956],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[87,10958,10960],{"className":310,"code":10959,"language":312,"meta":92,"style":92},"\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",[94,10961,10962,10967,10980,10993,10997,11002,11017,11032,11036,11045,11049,11054,11067,11080,11084,11089,11115,11141,11145,11172,11198,11202,11207,11223,11238,11242,11268,11294,11298,11323,11348,11352,11378,11404,11408,11424,11439,11465,11491,11495,11505,11509,11517],{"__ignoreMap":92},[97,10963,10964],{"class":99,"line":100},[97,10965,10966],{"class":191},"\u002F\u002F全局变量\n",[97,10968,10969,10971,10974,10976,10978],{"class":99,"line":195},[97,10970,326],{"class":319},[97,10972,10973],{"class":103}," g_a ",[97,10975,115],{"class":319},[97,10977,2229],{"class":370},[97,10979,1483],{"class":103},[97,10981,10982,10984,10987,10989,10991],{"class":99,"line":241},[97,10983,326],{"class":319},[97,10985,10986],{"class":103}," g_b ",[97,10988,115],{"class":319},[97,10990,2229],{"class":370},[97,10992,1483],{"class":103},[97,10994,10995],{"class":99,"line":1387},[97,10996,2591],{"emptyLinePlaceholder":249},[97,10998,10999],{"class":99,"line":1393},[97,11000,11001],{"class":191},"\u002F\u002F全局常量\n",[97,11003,11004,11006,11008,11011,11013,11015],{"class":99,"line":1407},[97,11005,6983],{"class":319},[97,11007,2573],{"class":319},[97,11009,11010],{"class":103}," c_g_a ",[97,11012,115],{"class":319},[97,11014,2229],{"class":370},[97,11016,1483],{"class":103},[97,11018,11019,11021,11023,11026,11028,11030],{"class":99,"line":1413},[97,11020,6983],{"class":319},[97,11022,2573],{"class":319},[97,11024,11025],{"class":103}," c_g_b ",[97,11027,115],{"class":319},[97,11029,2229],{"class":370},[97,11031,1483],{"class":103},[97,11033,11034],{"class":99,"line":1504},[97,11035,2591],{"emptyLinePlaceholder":249},[97,11037,11038,11040,11042],{"class":99,"line":1510},[97,11039,326],{"class":319},[97,11041,2164],{"class":111},[97,11043,11044],{"class":103},"() {\n",[97,11046,11047],{"class":99,"line":1522},[97,11048,2591],{"emptyLinePlaceholder":249},[97,11050,11051],{"class":99,"line":1804},[97,11052,11053],{"class":191},"    \u002F\u002F局部变量\n",[97,11055,11056,11058,11061,11063,11065],{"class":99,"line":1809},[97,11057,2176],{"class":319},[97,11059,11060],{"class":103}," a ",[97,11062,115],{"class":319},[97,11064,2229],{"class":370},[97,11066,1483],{"class":103},[97,11068,11069,11071,11074,11076,11078],{"class":99,"line":1815},[97,11070,2176],{"class":319},[97,11072,11073],{"class":103}," b ",[97,11075,115],{"class":319},[97,11077,2229],{"class":370},[97,11079,1483],{"class":103},[97,11081,11082],{"class":99,"line":1820},[97,11083,2591],{"emptyLinePlaceholder":249},[97,11085,11086],{"class":99,"line":1834},[97,11087,11088],{"class":191},"    \u002F\u002F打印地址\n",[97,11090,11091,11093,11095,11098,11100,11102,11104,11106,11108,11111,11113],{"class":99,"line":1839},[97,11092,6720],{"class":103},[97,11094,1362],{"class":319},[97,11096,11097],{"class":118}," \"局部变量a地址为： \"",[97,11099,1637],{"class":319},[97,11101,1850],{"class":103},[97,11103,326],{"class":319},[97,11105,749],{"class":103},[97,11107,673],{"class":319},[97,11109,11110],{"class":103},"a ",[97,11112,1362],{"class":319},[97,11114,9031],{"class":103},[97,11116,11117,11119,11121,11124,11126,11128,11130,11132,11134,11137,11139],{"class":99,"line":1845},[97,11118,6720],{"class":103},[97,11120,1362],{"class":319},[97,11122,11123],{"class":118}," \"局部变量b地址为： \"",[97,11125,1637],{"class":319},[97,11127,1850],{"class":103},[97,11129,326],{"class":319},[97,11131,749],{"class":103},[97,11133,673],{"class":319},[97,11135,11136],{"class":103},"b ",[97,11138,1362],{"class":319},[97,11140,9031],{"class":103},[97,11142,11143],{"class":99,"line":1866},[97,11144,2591],{"emptyLinePlaceholder":249},[97,11146,11147,11149,11151,11154,11156,11159,11161,11163,11165,11168,11170],{"class":99,"line":1871},[97,11148,6720],{"class":103},[97,11150,1362],{"class":319},[97,11152,11153],{"class":118}," \"全局变量g_a地址为： \"",[97,11155,1637],{"class":319},[97,11157,11158],{"class":103},"  (",[97,11160,326],{"class":319},[97,11162,749],{"class":103},[97,11164,673],{"class":319},[97,11166,11167],{"class":103},"g_a ",[97,11169,1362],{"class":319},[97,11171,9031],{"class":103},[97,11173,11174,11176,11178,11181,11183,11185,11187,11189,11191,11194,11196],{"class":99,"line":1885},[97,11175,6720],{"class":103},[97,11177,1362],{"class":319},[97,11179,11180],{"class":118}," \"全局变量g_b地址为： \"",[97,11182,1637],{"class":319},[97,11184,11158],{"class":103},[97,11186,326],{"class":319},[97,11188,749],{"class":103},[97,11190,673],{"class":319},[97,11192,11193],{"class":103},"g_b ",[97,11195,1362],{"class":319},[97,11197,9031],{"class":103},[97,11199,11200],{"class":99,"line":1890},[97,11201,2591],{"emptyLinePlaceholder":249},[97,11203,11204],{"class":99,"line":1919},[97,11205,11206],{"class":191},"    \u002F\u002F静态变量\n",[97,11208,11209,11212,11214,11217,11219,11221],{"class":99,"line":1924},[97,11210,11211],{"class":319},"    static",[97,11213,2573],{"class":319},[97,11215,11216],{"class":103}," s_a ",[97,11218,115],{"class":319},[97,11220,2229],{"class":370},[97,11222,1483],{"class":103},[97,11224,11225,11227,11229,11232,11234,11236],{"class":99,"line":1941},[97,11226,11211],{"class":319},[97,11228,2573],{"class":319},[97,11230,11231],{"class":103}," s_b ",[97,11233,115],{"class":319},[97,11235,2229],{"class":370},[97,11237,1483],{"class":103},[97,11239,11240],{"class":99,"line":1946},[97,11241,2591],{"emptyLinePlaceholder":249},[97,11243,11244,11246,11248,11251,11253,11255,11257,11259,11261,11264,11266],{"class":99,"line":1951},[97,11245,6720],{"class":103},[97,11247,1362],{"class":319},[97,11249,11250],{"class":118}," \"静态变量s_a地址为： \"",[97,11252,1637],{"class":319},[97,11254,1850],{"class":103},[97,11256,326],{"class":319},[97,11258,749],{"class":103},[97,11260,673],{"class":319},[97,11262,11263],{"class":103},"s_a ",[97,11265,1362],{"class":319},[97,11267,9031],{"class":103},[97,11269,11270,11272,11274,11277,11279,11281,11283,11285,11287,11290,11292],{"class":99,"line":1956},[97,11271,6720],{"class":103},[97,11273,1362],{"class":319},[97,11275,11276],{"class":118}," \"静态变量s_b地址为： \"",[97,11278,1637],{"class":319},[97,11280,1850],{"class":103},[97,11282,326],{"class":319},[97,11284,749],{"class":103},[97,11286,673],{"class":319},[97,11288,11289],{"class":103},"s_b ",[97,11291,1362],{"class":319},[97,11293,9031],{"class":103},[97,11295,11296],{"class":99,"line":1970},[97,11297,2591],{"emptyLinePlaceholder":249},[97,11299,11300,11302,11304,11307,11309,11311,11313,11315,11317,11319,11321],{"class":99,"line":1975},[97,11301,6720],{"class":103},[97,11303,1362],{"class":319},[97,11305,11306],{"class":118}," \"字符串常量地址为： \"",[97,11308,1637],{"class":319},[97,11310,1850],{"class":103},[97,11312,326],{"class":319},[97,11314,749],{"class":103},[97,11316,673],{"class":319},[97,11318,1379],{"class":118},[97,11320,1637],{"class":319},[97,11322,9031],{"class":103},[97,11324,11325,11327,11329,11331,11333,11335,11337,11339,11341,11344,11346],{"class":99,"line":2768},[97,11326,6720],{"class":103},[97,11328,1362],{"class":319},[97,11330,11306],{"class":118},[97,11332,1637],{"class":319},[97,11334,1850],{"class":103},[97,11336,326],{"class":319},[97,11338,749],{"class":103},[97,11340,673],{"class":319},[97,11342,11343],{"class":118},"\"hello world1\"",[97,11345,1637],{"class":319},[97,11347,9031],{"class":103},[97,11349,11350],{"class":99,"line":2782},[97,11351,2591],{"emptyLinePlaceholder":249},[97,11353,11354,11356,11358,11361,11363,11365,11367,11369,11371,11374,11376],{"class":99,"line":2790},[97,11355,6720],{"class":103},[97,11357,1362],{"class":319},[97,11359,11360],{"class":118}," \"全局常量c_g_a地址为： \"",[97,11362,1637],{"class":319},[97,11364,1850],{"class":103},[97,11366,326],{"class":319},[97,11368,749],{"class":103},[97,11370,673],{"class":319},[97,11372,11373],{"class":103},"c_g_a ",[97,11375,1362],{"class":319},[97,11377,9031],{"class":103},[97,11379,11380,11382,11384,11387,11389,11391,11393,11395,11397,11400,11402],{"class":99,"line":2795},[97,11381,6720],{"class":103},[97,11383,1362],{"class":319},[97,11385,11386],{"class":118}," \"全局常量c_g_b地址为： \"",[97,11388,1637],{"class":319},[97,11390,1850],{"class":103},[97,11392,326],{"class":319},[97,11394,749],{"class":103},[97,11396,673],{"class":319},[97,11398,11399],{"class":103},"c_g_b ",[97,11401,1362],{"class":319},[97,11403,9031],{"class":103},[97,11405,11406],{"class":99,"line":2801},[97,11407,2591],{"emptyLinePlaceholder":249},[97,11409,11410,11413,11415,11418,11420,11422],{"class":99,"line":2807},[97,11411,11412],{"class":319},"    const",[97,11414,2573],{"class":319},[97,11416,11417],{"class":103}," c_l_a ",[97,11419,115],{"class":319},[97,11421,2229],{"class":370},[97,11423,1483],{"class":103},[97,11425,11426,11428,11430,11433,11435,11437],{"class":99,"line":2812},[97,11427,11412],{"class":319},[97,11429,2573],{"class":319},[97,11431,11432],{"class":103}," c_l_b ",[97,11434,115],{"class":319},[97,11436,2229],{"class":370},[97,11438,1483],{"class":103},[97,11440,11441,11443,11445,11448,11450,11452,11454,11456,11458,11461,11463],{"class":99,"line":8139},[97,11442,6720],{"class":103},[97,11444,1362],{"class":319},[97,11446,11447],{"class":118}," \"局部常量c_l_a地址为： \"",[97,11449,1637],{"class":319},[97,11451,1850],{"class":103},[97,11453,326],{"class":319},[97,11455,749],{"class":103},[97,11457,673],{"class":319},[97,11459,11460],{"class":103},"c_l_a ",[97,11462,1362],{"class":319},[97,11464,9031],{"class":103},[97,11466,11467,11469,11471,11474,11476,11478,11480,11482,11484,11487,11489],{"class":99,"line":8163},[97,11468,6720],{"class":103},[97,11470,1362],{"class":319},[97,11472,11473],{"class":118}," \"局部常量c_l_b地址为： \"",[97,11475,1637],{"class":319},[97,11477,1850],{"class":103},[97,11479,326],{"class":319},[97,11481,749],{"class":103},[97,11483,673],{"class":319},[97,11485,11486],{"class":103},"c_l_b ",[97,11488,1362],{"class":319},[97,11490,9031],{"class":103},[97,11492,11493],{"class":99,"line":8168},[97,11494,2591],{"emptyLinePlaceholder":249},[97,11496,11497,11499,11501,11503],{"class":99,"line":8174},[97,11498,2494],{"class":111},[97,11500,323],{"class":103},[97,11502,2499],{"class":118},[97,11504,2910],{"class":103},[97,11506,11507],{"class":99,"line":8201},[97,11508,2591],{"emptyLinePlaceholder":249},[97,11510,11511,11513,11515],{"class":99,"line":8206},[97,11512,4281],{"class":319},[97,11514,4284],{"class":370},[97,11516,1483],{"class":103},[97,11518,11519],{"class":99,"line":8212},[97,11520,1757],{"class":103},[24,11522,11523],{},"总结：",[67,11525,11526,11529,11532,11535],{},[70,11527,11528],{},"c++中程序运行前分为全局区和代码区",[70,11530,11531],{},"代码区特点是共享和只读",[70,11533,11534],{},"全局区中存放全局变量、静态变量、常量",[70,11536,11537],{},"常量区中存放const修饰的全局常量和字符串常量",[48,11539,11541],{"id":11540},"_512程序运行后","5.1.2程序运行后",[138,11543,11544],{},[70,11545,11546],{},"栈区：",[67,11548,11549,11556],{},[70,11550,11551,11552,11555],{},"由编译器自动分配释放, 存放",[469,11553,11554],{},"函数的参数值,局部变量","等",[70,11557,11558,11559,11562],{},"注意事项：",[469,11560,11561],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[87,11564,11566],{"className":310,"code":11565,"language":312,"meta":92,"style":92},"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",[94,11567,11568,11579,11583,11598,11610,11614,11618,11626,11631,11646,11664,11681,11691,11699],{"__ignoreMap":92},[97,11569,11570,11572,11574,11577],{"class":99,"line":100},[97,11571,326],{"class":319},[97,11573,6709],{"class":319},[97,11575,11576],{"class":111}," func",[97,11578,2167],{"class":103},[97,11580,11581],{"class":99,"line":195},[97,11582,1738],{"class":103},[97,11584,11585,11587,11589,11591,11593,11595],{"class":99,"line":241},[97,11586,2176],{"class":319},[97,11588,11060],{"class":103},[97,11590,115],{"class":319},[97,11592,2229],{"class":370},[97,11594,377],{"class":103},[97,11596,11597],{"class":191}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[97,11599,11600,11602,11604,11607],{"class":99,"line":1387},[97,11601,4281],{"class":319},[97,11603,10775],{"class":319},[97,11605,11606],{"class":103},"a;",[97,11608,11609],{"class":191}," \u002F\u002F放回局部变量的地址\n",[97,11611,11612],{"class":99,"line":1393},[97,11613,1757],{"class":103},[97,11615,11616],{"class":99,"line":1407},[97,11617,2591],{"emptyLinePlaceholder":249},[97,11619,11620,11622,11624],{"class":99,"line":1413},[97,11621,326],{"class":319},[97,11623,2164],{"class":111},[97,11625,11044],{"class":103},[97,11627,11628],{"class":99,"line":1504},[97,11629,11630],{"class":191},"    \u002F\u002F接受func的返回值\n",[97,11632,11633,11635,11637,11640,11642,11644],{"class":99,"line":1510},[97,11634,2176],{"class":319},[97,11636,6709],{"class":319},[97,11638,11639],{"class":103},"p ",[97,11641,115],{"class":319},[97,11643,11576],{"class":111},[97,11645,5827],{"class":103},[97,11647,11648,11650,11652,11654,11656,11658,11661],{"class":99,"line":1522},[97,11649,6720],{"class":103},[97,11651,1362],{"class":319},[97,11653,6709],{"class":319},[97,11655,11639],{"class":103},[97,11657,1362],{"class":319},[97,11659,11660],{"class":103}," endl;",[97,11662,11663],{"class":191}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[97,11665,11666,11668,11670,11672,11674,11676,11678],{"class":99,"line":1804},[97,11667,6720],{"class":103},[97,11669,1362],{"class":319},[97,11671,6709],{"class":319},[97,11673,11639],{"class":103},[97,11675,1362],{"class":319},[97,11677,11660],{"class":103},[97,11679,11680],{"class":191}," \u002F\u002F第二次这个数据不再保留\n",[97,11682,11683,11685,11687,11689],{"class":99,"line":1809},[97,11684,2494],{"class":111},[97,11686,323],{"class":103},[97,11688,2499],{"class":118},[97,11690,2910],{"class":103},[97,11692,11693,11695,11697],{"class":99,"line":1815},[97,11694,4281],{"class":319},[97,11696,4284],{"class":370},[97,11698,1483],{"class":103},[97,11700,11701],{"class":99,"line":1820},[97,11702,1757],{"class":103},[24,11704,11705],{},"输出结果：",[24,11707,11708],{},[19,11709],{"alt":11710,"src":11711},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[24,11713,11714],{},"总结：不要返回局部变量的地址",[138,11716,11717],{"start":195},[70,11718,11719],{},"堆区",[67,11721,11722,11725],{},[70,11723,11724],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[70,11726,11727],{},"在c++中主要利用new在堆区开辟内存",[87,11729,11731],{"className":310,"code":11730,"language":312,"meta":92,"style":92},"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",[94,11732,11733,11748,11752,11757,11778,11785,11789,11797,11801,11806,11820,11832],{"__ignoreMap":92},[97,11734,11735,11737,11740,11743,11745],{"class":99,"line":100},[97,11736,326],{"class":319},[97,11738,11739],{"class":319},"  *",[97,11741,11742],{"class":111},"func",[97,11744,2618],{"class":103},[97,11746,11747],{"class":191},"  \u002F\u002F函数返回指针\n",[97,11749,11750],{"class":99,"line":195},[97,11751,1738],{"class":103},[97,11753,11754],{"class":99,"line":241},[97,11755,11756],{"class":191},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[97,11758,11759,11761,11763,11765,11767,11770,11772,11774,11776],{"class":99,"line":1387},[97,11760,4338],{"class":319},[97,11762,6709],{"class":319},[97,11764,24],{"class":103},[97,11766,115],{"class":319},[97,11768,11769],{"class":319}," new",[97,11771,2573],{"class":319},[97,11773,323],{"class":103},[97,11775,766],{"class":370},[97,11777,2910],{"class":103},[97,11779,11780,11782],{"class":99,"line":1393},[97,11781,4572],{"class":319},[97,11783,11784],{"class":103}," p;\n",[97,11786,11787],{"class":99,"line":1407},[97,11788,1757],{"class":103},[97,11790,11791,11793,11795],{"class":99,"line":1413},[97,11792,326],{"class":319},[97,11794,2164],{"class":111},[97,11796,2167],{"class":103},[97,11798,11799],{"class":99,"line":1504},[97,11800,1738],{"class":103},[97,11802,11803],{"class":99,"line":1510},[97,11804,11805],{"class":191},"    \u002F\u002F在堆区开辟数据\n",[97,11807,11808,11810,11812,11814,11816,11818],{"class":99,"line":1522},[97,11809,2176],{"class":319},[97,11811,6709],{"class":319},[97,11813,24],{"class":103},[97,11815,115],{"class":319},[97,11817,11742],{"class":111},[97,11819,5827],{"class":103},[97,11821,11822,11824,11826,11828,11830],{"class":99,"line":1804},[97,11823,1743],{"class":103},[97,11825,6610],{"class":319},[97,11827,24],{"class":103},[97,11829,1362],{"class":319},[97,11831,1384],{"class":103},[97,11833,11834],{"class":99,"line":1809},[97,11835,1757],{"class":103},[24,11837,11838],{},"图片展示：",[24,11840,11841],{},[19,11842],{"alt":11710,"src":11843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[24,11845,11846],{},"堆区内存由程序员管生死！！！",[138,11848,11849],{"start":241},[70,11850,11851],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[24,11853,11854],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[24,11856,11857,11858],{},"​语法：",[94,11859,11860],{}," new 数据类型",[24,11862,11863],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[87,11865,11867],{"className":310,"code":11866,"language":312,"meta":92,"style":92},"\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",[94,11868,11869,11874,11884,11888,11893,11898,11920,11924,11932,11936,11950,11962,11974,11986,11991,11996,12007,12011,12016,12024,12028,12033,12055,12081,12085,12103,12107,12133,12137,12149,12153,12158,12163,12171,12175,12179,12187,12191,12197,12203],{"__ignoreMap":92},[97,11870,11871],{"class":99,"line":100},[97,11872,11873],{"class":191},"\u002F\u002F1.new的基本语法\n",[97,11875,11876,11878,11880,11882],{"class":99,"line":195},[97,11877,326],{"class":319},[97,11879,6709],{"class":319},[97,11881,11742],{"class":111},[97,11883,2167],{"class":103},[97,11885,11886],{"class":99,"line":241},[97,11887,1738],{"class":103},[97,11889,11890],{"class":99,"line":1387},[97,11891,11892],{"class":191},"    \u002F\u002F在堆区创建整型数据\n",[97,11894,11895],{"class":99,"line":1393},[97,11896,11897],{"class":191},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[97,11899,11900,11902,11904,11906,11909,11911,11913,11915,11917],{"class":99,"line":1407},[97,11901,2176],{"class":319},[97,11903,6709],{"class":319},[97,11905,24],{"class":103},[97,11907,11908],{"class":319},"=new",[97,11910,2573],{"class":319},[97,11912,323],{"class":103},[97,11914,766],{"class":370},[97,11916,6157],{"class":103},[97,11918,11919],{"class":191},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[97,11921,11922],{"class":99,"line":1413},[97,11923,1757],{"class":103},[97,11925,11926,11928,11930],{"class":99,"line":1504},[97,11927,5555],{"class":319},[97,11929,5779],{"class":111},[97,11931,2167],{"class":103},[97,11933,11934],{"class":99,"line":1510},[97,11935,1738],{"class":103},[97,11937,11938,11940,11942,11944,11946,11948],{"class":99,"line":1522},[97,11939,2176],{"class":319},[97,11941,6709],{"class":319},[97,11943,24],{"class":103},[97,11945,115],{"class":319},[97,11947,11742],{"class":111},[97,11949,5827],{"class":103},[97,11951,11952,11954,11956,11958,11960],{"class":99,"line":1804},[97,11953,1743],{"class":103},[97,11955,6610],{"class":319},[97,11957,24],{"class":103},[97,11959,1362],{"class":319},[97,11961,1384],{"class":103},[97,11963,11964,11966,11968,11970,11972],{"class":99,"line":1809},[97,11965,1743],{"class":103},[97,11967,6610],{"class":319},[97,11969,24],{"class":103},[97,11971,1362],{"class":319},[97,11973,1384],{"class":103},[97,11975,11976,11978,11980,11982,11984],{"class":99,"line":1815},[97,11977,1743],{"class":103},[97,11979,6610],{"class":319},[97,11981,24],{"class":103},[97,11983,1362],{"class":319},[97,11985,1384],{"class":103},[97,11987,11988],{"class":99,"line":1820},[97,11989,11990],{"class":191},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[97,11992,11993],{"class":99,"line":1834},[97,11994,11995],{"class":191},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[97,11997,11998,12001,12004],{"class":99,"line":1839},[97,11999,12000],{"class":319},"    delete",[97,12002,12003],{"class":103}," p;",[97,12005,12006],{"class":191},"\u002F\u002F删除这块地址\n",[97,12008,12009],{"class":99,"line":1845},[97,12010,1757],{"class":103},[97,12012,12013],{"class":99,"line":1866},[97,12014,12015],{"class":191},"\u002F\u002F2.在堆区利用new开辟数组\n",[97,12017,12018,12020,12022],{"class":99,"line":1871},[97,12019,5555],{"class":319},[97,12021,5848],{"class":111},[97,12023,2167],{"class":103},[97,12025,12026],{"class":99,"line":1885},[97,12027,1738],{"class":103},[97,12029,12030],{"class":99,"line":1890},[97,12031,12032],{"class":191},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[97,12034,12035,12037,12039,12041,12043,12045,12047,12049,12052],{"class":99,"line":1919},[97,12036,2176],{"class":319},[97,12038,6709],{"class":319},[97,12040,4071],{"class":103},[97,12042,11908],{"class":319},[97,12044,2573],{"class":319},[97,12046,1210],{"class":103},[97,12048,766],{"class":370},[97,12050,12051],{"class":103},"];",[97,12053,12054],{"class":191},"\u002F\u002F10代表数组有10个元素\n",[97,12056,12057,12059,12061,12063,12065,12067,12069,12071,12073,12075,12077,12079],{"class":99,"line":1924},[97,12058,3392],{"class":319},[97,12060,1850],{"class":103},[97,12062,326],{"class":319},[97,12064,3223],{"class":103},[97,12066,115],{"class":319},[97,12068,511],{"class":370},[97,12070,3230],{"class":103},[97,12072,104],{"class":319},[97,12074,766],{"class":370},[97,12076,3230],{"class":103},[97,12078,2483],{"class":319},[97,12080,329],{"class":103},[97,12082,12083],{"class":99,"line":1941},[97,12084,2221],{"class":103},[97,12086,12087,12090,12092,12094,12096,12098,12100],{"class":99,"line":1946},[97,12088,12089],{"class":103},"        arr[i]",[97,12091,115],{"class":319},[97,12093,761],{"class":103},[97,12095,801],{"class":319},[97,12097,631],{"class":370},[97,12099,377],{"class":103},[97,12101,12102],{"class":191},"\u002F\u002F给10个元素赋值100～109\n",[97,12104,12105],{"class":99,"line":1951},[97,12106,2378],{"class":103},[97,12108,12109,12111,12113,12115,12117,12119,12121,12123,12125,12127,12129,12131],{"class":99,"line":1956},[97,12110,3392],{"class":319},[97,12112,1850],{"class":103},[97,12114,326],{"class":319},[97,12116,3223],{"class":103},[97,12118,115],{"class":319},[97,12120,511],{"class":370},[97,12122,3230],{"class":103},[97,12124,104],{"class":319},[97,12126,766],{"class":370},[97,12128,3230],{"class":103},[97,12130,2483],{"class":319},[97,12132,329],{"class":103},[97,12134,12135],{"class":99,"line":1970},[97,12136,2221],{"class":103},[97,12138,12139,12141,12143,12145,12147],{"class":99,"line":1975},[97,12140,3642],{"class":103},[97,12142,1362],{"class":319},[97,12144,4545],{"class":103},[97,12146,1362],{"class":319},[97,12148,1384],{"class":103},[97,12150,12151],{"class":99,"line":2768},[97,12152,2378],{"class":103},[97,12154,12155],{"class":99,"line":2782},[97,12156,12157],{"class":191},"    \u002F\u002F释放堆区数组\n",[97,12159,12160],{"class":99,"line":2790},[97,12161,12162],{"class":191},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[97,12164,12165,12168],{"class":99,"line":2795},[97,12166,12167],{"class":319},"    delete[]",[97,12169,12170],{"class":103}," arr;\n",[97,12172,12173],{"class":99,"line":2801},[97,12174,1757],{"class":103},[97,12176,12177],{"class":99,"line":2807},[97,12178,2591],{"emptyLinePlaceholder":249},[97,12180,12181,12183,12185],{"class":99,"line":2812},[97,12182,326],{"class":319},[97,12184,2164],{"class":111},[97,12186,2167],{"class":103},[97,12188,12189],{"class":99,"line":8139},[97,12190,1738],{"class":103},[97,12192,12193,12195],{"class":99,"line":8163},[97,12194,5824],{"class":111},[97,12196,5827],{"class":103},[97,12198,12199,12201],{"class":99,"line":8168},[97,12200,5893],{"class":111},[97,12202,5827],{"class":103},[97,12204,12205],{"class":99,"line":8174},[97,12206,1757],{"class":103},[231,12208,12209],{},"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":92,"searchDepth":195,"depth":195,"links":12211},[12212],{"id":10880,"depth":195,"text":10881,"children":12213},[12214,12215],{"id":10912,"depth":241,"text":10913},{"id":11540,"depth":241,"text":11541},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10872,"description":92},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12222,"title":12223,"body":12224,"description":92,"extension":247,"meta":13705,"navigation":249,"path":13706,"seo":13707,"stem":13708,"__hash__":13709},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12225,"toc":13697},[12226,12229,12233,12236,12239,12408,12412,12417,12434,12439,12591,12595,12598,12601,12995,12999,13002,13007,13010,13322,13326,13332,13492,13494,13502,13506,13509,13516,13694],[10,12227,12223],{"id":12228},"_6引用",[14,12230,12232],{"id":12231},"_61引用基本用法","6.1引用基本用法",[24,12234,12235],{},"引用的本质：给变量起别名",[24,12237,12238],{},"语法：数据类型 &别名=原名",[87,12240,12242],{"className":310,"code":12241,"language":312,"meta":92,"style":92},"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",[94,12243,12244,12252,12256,12268,12280,12284,12303,12322,12326,12337,12341,12360,12378,12382,12392,12396,12404],{"__ignoreMap":92},[97,12245,12246,12248,12250],{"class":99,"line":100},[97,12247,326],{"class":319},[97,12249,2164],{"class":111},[97,12251,11044],{"class":103},[97,12253,12254],{"class":99,"line":195},[97,12255,2591],{"emptyLinePlaceholder":249},[97,12257,12258,12260,12262,12264,12266],{"class":99,"line":241},[97,12259,2176],{"class":319},[97,12261,11060],{"class":103},[97,12263,115],{"class":319},[97,12265,2229],{"class":370},[97,12267,1483],{"class":103},[97,12269,12270,12272,12274,12276,12278],{"class":99,"line":1387},[97,12271,2176],{"class":319},[97,12273,10775],{"class":319},[97,12275,11136],{"class":103},[97,12277,115],{"class":319},[97,12279,1625],{"class":103},[97,12281,12282],{"class":99,"line":1393},[97,12283,2591],{"emptyLinePlaceholder":249},[97,12285,12286,12288,12290,12293,12295,12297,12299,12301],{"class":99,"line":1407},[97,12287,6720],{"class":103},[97,12289,1362],{"class":319},[97,12291,12292],{"class":118}," \"a = \"",[97,12294,1637],{"class":319},[97,12296,11060],{"class":103},[97,12298,1362],{"class":319},[97,12300,11660],{"class":103},[97,12302,7459],{"class":191},[97,12304,12305,12307,12309,12312,12314,12316,12318,12320],{"class":99,"line":1413},[97,12306,6720],{"class":103},[97,12308,1362],{"class":319},[97,12310,12311],{"class":118}," \"b = \"",[97,12313,1637],{"class":319},[97,12315,11073],{"class":103},[97,12317,1362],{"class":319},[97,12319,11660],{"class":103},[97,12321,7459],{"class":191},[97,12323,12324],{"class":99,"line":1504},[97,12325,2591],{"emptyLinePlaceholder":249},[97,12327,12328,12331,12333,12335],{"class":99,"line":1510},[97,12329,12330],{"class":103},"    b ",[97,12332,115],{"class":319},[97,12334,5945],{"class":370},[97,12336,1483],{"class":103},[97,12338,12339],{"class":99,"line":1522},[97,12340,2591],{"emptyLinePlaceholder":249},[97,12342,12343,12345,12347,12349,12351,12353,12355,12357],{"class":99,"line":1804},[97,12344,6720],{"class":103},[97,12346,1362],{"class":319},[97,12348,12292],{"class":118},[97,12350,1637],{"class":319},[97,12352,11060],{"class":103},[97,12354,1362],{"class":319},[97,12356,11660],{"class":103},[97,12358,12359],{"class":191},"\u002F\u002F100\n",[97,12361,12362,12364,12366,12368,12370,12372,12374,12376],{"class":99,"line":1809},[97,12363,6720],{"class":103},[97,12365,1362],{"class":319},[97,12367,12311],{"class":118},[97,12369,1637],{"class":319},[97,12371,11073],{"class":103},[97,12373,1362],{"class":319},[97,12375,11660],{"class":103},[97,12377,12359],{"class":191},[97,12379,12380],{"class":99,"line":1815},[97,12381,2591],{"emptyLinePlaceholder":249},[97,12383,12384,12386,12388,12390],{"class":99,"line":1820},[97,12385,2494],{"class":111},[97,12387,323],{"class":103},[97,12389,2499],{"class":118},[97,12391,2910],{"class":103},[97,12393,12394],{"class":99,"line":1834},[97,12395,2591],{"emptyLinePlaceholder":249},[97,12397,12398,12400,12402],{"class":99,"line":1839},[97,12399,4281],{"class":319},[97,12401,4284],{"class":370},[97,12403,1483],{"class":103},[97,12405,12406],{"class":99,"line":1845},[97,12407,1757],{"class":103},[14,12409,12411],{"id":12410},"_62引用的注意事项","6.2引用的注意事项",[138,12413,12414],{},[70,12415,12416],{},"引用必须要初始化",[87,12418,12420],{"className":310,"code":12419,"language":312,"meta":92,"style":92},"int &b;\u002F\u002F非常错误！\n",[94,12421,12422],{"__ignoreMap":92},[97,12423,12424,12426,12428,12431],{"class":99,"line":100},[97,12425,326],{"class":319},[97,12427,10775],{"class":319},[97,12429,12430],{"class":103},"b;",[97,12432,12433],{"class":191},"\u002F\u002F非常错误！\n",[138,12435,12436],{"start":195},[70,12437,12438],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[87,12440,12442],{"className":310,"code":12441,"language":312,"meta":92,"style":92},"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",[94,12443,12444,12452,12464,12476,12484,12500,12513,12531,12549,12569,12579,12587],{"__ignoreMap":92},[97,12445,12446,12448,12450],{"class":99,"line":100},[97,12447,326],{"class":319},[97,12449,2164],{"class":111},[97,12451,11044],{"class":103},[97,12453,12454,12456,12458,12460,12462],{"class":99,"line":195},[97,12455,2176],{"class":319},[97,12457,11060],{"class":103},[97,12459,115],{"class":319},[97,12461,2229],{"class":370},[97,12463,1483],{"class":103},[97,12465,12466,12468,12470,12472,12474],{"class":99,"line":241},[97,12467,2176],{"class":319},[97,12469,11073],{"class":103},[97,12471,115],{"class":319},[97,12473,9141],{"class":370},[97,12475,1483],{"class":103},[97,12477,12478,12481],{"class":99,"line":1387},[97,12479,12480],{"class":191},"    \u002F\u002Fint &c;",[97,12482,12483],{"class":191}," \u002F\u002F错误，引用必须初始化\n",[97,12485,12486,12488,12490,12492,12494,12497],{"class":99,"line":1393},[97,12487,2176],{"class":319},[97,12489,10775],{"class":319},[97,12491,3137],{"class":103},[97,12493,115],{"class":319},[97,12495,12496],{"class":103}," a;",[97,12498,12499],{"class":191}," \u002F\u002F一旦初始化后，就不可以更改\n",[97,12501,12502,12505,12507,12510],{"class":99,"line":1407},[97,12503,12504],{"class":103},"    c ",[97,12506,115],{"class":319},[97,12508,12509],{"class":103}," b;",[97,12511,12512],{"class":191}," \u002F\u002F这是赋值操作，不是更改引用\n",[97,12514,12515,12517,12519,12521,12523,12525,12527,12529],{"class":99,"line":1413},[97,12516,6720],{"class":103},[97,12518,1362],{"class":319},[97,12520,12292],{"class":118},[97,12522,1637],{"class":319},[97,12524,11060],{"class":103},[97,12526,1362],{"class":319},[97,12528,11660],{"class":103},[97,12530,7444],{"class":191},[97,12532,12533,12535,12537,12539,12541,12543,12545,12547],{"class":99,"line":1504},[97,12534,6720],{"class":103},[97,12536,1362],{"class":319},[97,12538,12311],{"class":118},[97,12540,1637],{"class":319},[97,12542,11073],{"class":103},[97,12544,1362],{"class":319},[97,12546,11660],{"class":103},[97,12548,7444],{"class":191},[97,12550,12551,12553,12555,12558,12560,12563,12565,12567],{"class":99,"line":1510},[97,12552,6720],{"class":103},[97,12554,1362],{"class":319},[97,12556,12557],{"class":118}," \"c = \"",[97,12559,1637],{"class":319},[97,12561,12562],{"class":103}," c ",[97,12564,1362],{"class":319},[97,12566,11660],{"class":103},[97,12568,7444],{"class":191},[97,12570,12571,12573,12575,12577],{"class":99,"line":1522},[97,12572,2494],{"class":111},[97,12574,323],{"class":103},[97,12576,2499],{"class":118},[97,12578,2910],{"class":103},[97,12580,12581,12583,12585],{"class":99,"line":1804},[97,12582,4281],{"class":319},[97,12584,4284],{"class":370},[97,12586,1483],{"class":103},[97,12588,12589],{"class":99,"line":1809},[97,12590,1757],{"class":103},[14,12592,12594],{"id":12593},"_63引用做函数参数","6.3引用做函数参数",[24,12596,12597],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[24,12599,12600],{},"优点：可以简化指针修改实参",[87,12602,12604],{"className":310,"code":12603,"language":312,"meta":92,"style":92},"\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",[94,12605,12606,12611,12634,12645,12655,12664,12668,12672,12677,12699,12711,12723,12733,12737,12741,12746,12768,12778,12786,12794,12798,12802,12810,12814,12826,12838,12842,12853,12879,12883,12903,12927,12931,12941,12965,12969,12979,12983,12991],{"__ignoreMap":92},[97,12607,12608],{"class":99,"line":100},[97,12609,12610],{"class":191},"\u002F\u002F1. 值传递\n",[97,12612,12613,12615,12618,12620,12622,12624,12627,12629,12631],{"class":99,"line":195},[97,12614,5555],{"class":319},[97,12616,12617],{"class":111}," mySwap01",[97,12619,323],{"class":103},[97,12621,326],{"class":319},[97,12623,1591],{"class":5407},[97,12625,12626],{"class":103},", ",[97,12628,326],{"class":319},[97,12630,3024],{"class":5407},[97,12632,12633],{"class":103},") {\n",[97,12635,12636,12638,12641,12643],{"class":99,"line":241},[97,12637,2176],{"class":319},[97,12639,12640],{"class":103}," temp ",[97,12642,115],{"class":319},[97,12644,1625],{"class":103},[97,12646,12647,12650,12652],{"class":99,"line":1387},[97,12648,12649],{"class":103},"    a ",[97,12651,115],{"class":319},[97,12653,12654],{"class":103}," b;\n",[97,12656,12657,12659,12661],{"class":99,"line":1393},[97,12658,12330],{"class":103},[97,12660,115],{"class":319},[97,12662,12663],{"class":103}," temp;\n",[97,12665,12666],{"class":99,"line":1407},[97,12667,1757],{"class":103},[97,12669,12670],{"class":99,"line":1413},[97,12671,2591],{"emptyLinePlaceholder":249},[97,12673,12674],{"class":99,"line":1504},[97,12675,12676],{"class":191},"\u002F\u002F2. 地址传递\n",[97,12678,12679,12681,12684,12686,12689,12691,12693,12695,12697],{"class":99,"line":1510},[97,12680,5555],{"class":319},[97,12682,12683],{"class":111}," mySwap02",[97,12685,323],{"class":103},[97,12687,12688],{"class":319},"int*",[97,12690,1591],{"class":5407},[97,12692,12626],{"class":103},[97,12694,12688],{"class":319},[97,12696,3024],{"class":5407},[97,12698,12633],{"class":103},[97,12700,12701,12703,12705,12707,12709],{"class":99,"line":1522},[97,12702,2176],{"class":319},[97,12704,12640],{"class":103},[97,12706,115],{"class":319},[97,12708,6709],{"class":319},[97,12710,6388],{"class":103},[97,12712,12713,12715,12717,12719,12721],{"class":99,"line":1804},[97,12714,6594],{"class":319},[97,12716,11110],{"class":103},[97,12718,115],{"class":319},[97,12720,6709],{"class":319},[97,12722,6260],{"class":103},[97,12724,12725,12727,12729,12731],{"class":99,"line":1809},[97,12726,6594],{"class":319},[97,12728,11136],{"class":103},[97,12730,115],{"class":319},[97,12732,12663],{"class":103},[97,12734,12735],{"class":99,"line":1815},[97,12736,1757],{"class":103},[97,12738,12739],{"class":99,"line":1820},[97,12740,2591],{"emptyLinePlaceholder":249},[97,12742,12743],{"class":99,"line":1834},[97,12744,12745],{"class":191},"\u002F\u002F3. 引用传递\n",[97,12747,12748,12750,12753,12755,12758,12760,12762,12764,12766],{"class":99,"line":1839},[97,12749,5555],{"class":319},[97,12751,12752],{"class":111}," mySwap03",[97,12754,323],{"class":103},[97,12756,12757],{"class":319},"int&",[97,12759,1591],{"class":5407},[97,12761,12626],{"class":103},[97,12763,12757],{"class":319},[97,12765,3024],{"class":5407},[97,12767,12633],{"class":103},[97,12769,12770,12772,12774,12776],{"class":99,"line":1845},[97,12771,2176],{"class":319},[97,12773,12640],{"class":103},[97,12775,115],{"class":319},[97,12777,1625],{"class":103},[97,12779,12780,12782,12784],{"class":99,"line":1866},[97,12781,12649],{"class":103},[97,12783,115],{"class":319},[97,12785,12654],{"class":103},[97,12787,12788,12790,12792],{"class":99,"line":1871},[97,12789,12330],{"class":103},[97,12791,115],{"class":319},[97,12793,12663],{"class":103},[97,12795,12796],{"class":99,"line":1885},[97,12797,1757],{"class":103},[97,12799,12800],{"class":99,"line":1890},[97,12801,2591],{"emptyLinePlaceholder":249},[97,12803,12804,12806,12808],{"class":99,"line":1919},[97,12805,326],{"class":319},[97,12807,2164],{"class":111},[97,12809,11044],{"class":103},[97,12811,12812],{"class":99,"line":1924},[97,12813,2591],{"emptyLinePlaceholder":249},[97,12815,12816,12818,12820,12822,12824],{"class":99,"line":1941},[97,12817,2176],{"class":319},[97,12819,11060],{"class":103},[97,12821,115],{"class":319},[97,12823,2229],{"class":370},[97,12825,1483],{"class":103},[97,12827,12828,12830,12832,12834,12836],{"class":99,"line":1946},[97,12829,2176],{"class":319},[97,12831,11073],{"class":103},[97,12833,115],{"class":319},[97,12835,9141],{"class":370},[97,12837,1483],{"class":103},[97,12839,12840],{"class":99,"line":1951},[97,12841,2591],{"emptyLinePlaceholder":249},[97,12843,12844,12847,12850],{"class":99,"line":1956},[97,12845,12846],{"class":111},"    mySwap01",[97,12848,12849],{"class":103},"(a, b);",[97,12851,12852],{"class":191},"\u002F\u002F值传递，形参不会修饰实参\n",[97,12854,12855,12857,12859,12862,12864,12866,12868,12871,12873,12875,12877],{"class":99,"line":1970},[97,12856,6720],{"class":103},[97,12858,1362],{"class":319},[97,12860,12861],{"class":118}," \"a:\"",[97,12863,1637],{"class":319},[97,12865,11060],{"class":103},[97,12867,1362],{"class":319},[97,12869,12870],{"class":118}," \" b:\"",[97,12872,1637],{"class":319},[97,12874,11073],{"class":103},[97,12876,1362],{"class":319},[97,12878,9031],{"class":103},[97,12880,12881],{"class":99,"line":1975},[97,12882,2591],{"emptyLinePlaceholder":249},[97,12884,12885,12888,12890,12892,12895,12897,12900],{"class":99,"line":2768},[97,12886,12887],{"class":111},"    mySwap02",[97,12889,323],{"class":103},[97,12891,673],{"class":319},[97,12893,12894],{"class":103},"a, ",[97,12896,673],{"class":319},[97,12898,12899],{"class":103},"b);",[97,12901,12902],{"class":191},"\u002F\u002F地址传递，形参会修饰实参\n",[97,12904,12905,12907,12909,12911,12913,12915,12917,12919,12921,12923,12925],{"class":99,"line":2782},[97,12906,6720],{"class":103},[97,12908,1362],{"class":319},[97,12910,12861],{"class":118},[97,12912,1637],{"class":319},[97,12914,11060],{"class":103},[97,12916,1362],{"class":319},[97,12918,12870],{"class":118},[97,12920,1637],{"class":319},[97,12922,11073],{"class":103},[97,12924,1362],{"class":319},[97,12926,9031],{"class":103},[97,12928,12929],{"class":99,"line":2790},[97,12930,2591],{"emptyLinePlaceholder":249},[97,12932,12933,12936,12938],{"class":99,"line":2795},[97,12934,12935],{"class":111},"    mySwap03",[97,12937,12849],{"class":103},[97,12939,12940],{"class":191},"\u002F\u002F引用传递，形参会修饰实参\n",[97,12942,12943,12945,12947,12949,12951,12953,12955,12957,12959,12961,12963],{"class":99,"line":2801},[97,12944,6720],{"class":103},[97,12946,1362],{"class":319},[97,12948,12861],{"class":118},[97,12950,1637],{"class":319},[97,12952,11060],{"class":103},[97,12954,1362],{"class":319},[97,12956,12870],{"class":118},[97,12958,1637],{"class":319},[97,12960,11073],{"class":103},[97,12962,1362],{"class":319},[97,12964,9031],{"class":103},[97,12966,12967],{"class":99,"line":2807},[97,12968,2591],{"emptyLinePlaceholder":249},[97,12970,12971,12973,12975,12977],{"class":99,"line":2812},[97,12972,2494],{"class":111},[97,12974,323],{"class":103},[97,12976,2499],{"class":118},[97,12978,2910],{"class":103},[97,12980,12981],{"class":99,"line":8139},[97,12982,2591],{"emptyLinePlaceholder":249},[97,12984,12985,12987,12989],{"class":99,"line":8163},[97,12986,4281],{"class":319},[97,12988,4284],{"class":370},[97,12990,1483],{"class":103},[97,12992,12993],{"class":99,"line":8168},[97,12994,1757],{"class":103},[14,12996,12998],{"id":12997},"_64引用做函数的返回值","6.4引用做函数的返回值",[24,13000,13001],{},"作用：引用是可以作为函数的返回值存在的",[24,13003,9216,13004],{},[469,13005,13006],{},"不要返回局部变量引用",[24,13008,13009],{},"用法：函数调用作为左值",[87,13011,13013],{"className":10132,"code":13012,"language":10134,"meta":92,"style":92},"\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",[94,13014,13015,13020,13028,13043,13049,13053,13057,13062,13070,13087,13093,13097,13101,13109,13113,13118,13132,13152,13171,13175,13180,13193,13213,13231,13235,13251,13255,13274,13292,13296,13306,13310,13318],{"__ignoreMap":92},[97,13016,13017],{"class":99,"line":100},[97,13018,13019],{"class":191},"\u002F\u002F返回局部变量引用\n",[97,13021,13022,13024,13026],{"class":99,"line":195},[97,13023,12757],{"class":319},[97,13025,5779],{"class":111},[97,13027,11044],{"class":103},[97,13029,13030,13032,13034,13036,13038,13040],{"class":99,"line":241},[97,13031,2176],{"class":319},[97,13033,11060],{"class":103},[97,13035,115],{"class":319},[97,13037,2229],{"class":370},[97,13039,377],{"class":103},[97,13041,13042],{"class":191}," \u002F\u002F局部变量\n",[97,13044,13045,13047],{"class":99,"line":1387},[97,13046,4281],{"class":319},[97,13048,1625],{"class":103},[97,13050,13051],{"class":99,"line":1393},[97,13052,1757],{"class":103},[97,13054,13055],{"class":99,"line":1407},[97,13056,2591],{"emptyLinePlaceholder":249},[97,13058,13059],{"class":99,"line":1413},[97,13060,13061],{"class":191},"\u002F\u002F返回静态变量引用\n",[97,13063,13064,13066,13068],{"class":99,"line":1504},[97,13065,12757],{"class":319},[97,13067,5848],{"class":111},[97,13069,11044],{"class":103},[97,13071,13072,13074,13076,13078,13080,13082,13084],{"class":99,"line":1510},[97,13073,11211],{"class":319},[97,13075,2573],{"class":319},[97,13077,11060],{"class":103},[97,13079,115],{"class":319},[97,13081,9141],{"class":370},[97,13083,377],{"class":103},[97,13085,13086],{"class":191},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[97,13088,13089,13091],{"class":99,"line":1522},[97,13090,4281],{"class":319},[97,13092,1625],{"class":103},[97,13094,13095],{"class":99,"line":1804},[97,13096,1757],{"class":103},[97,13098,13099],{"class":99,"line":1809},[97,13100,2591],{"emptyLinePlaceholder":249},[97,13102,13103,13105,13107],{"class":99,"line":1815},[97,13104,326],{"class":319},[97,13106,2164],{"class":111},[97,13108,11044],{"class":103},[97,13110,13111],{"class":99,"line":1820},[97,13112,2591],{"emptyLinePlaceholder":249},[97,13114,13115],{"class":99,"line":1834},[97,13116,13117],{"class":191},"    \u002F\u002F不能返回局部变量的引用\n",[97,13119,13120,13123,13126,13128,13130],{"class":99,"line":1839},[97,13121,13122],{"class":319},"    int&",[97,13124,13125],{"class":103}," ref ",[97,13127,115],{"class":319},[97,13129,5779],{"class":111},[97,13131,5827],{"class":103},[97,13133,13134,13136,13138,13141,13143,13145,13147,13149],{"class":99,"line":1845},[97,13135,6720],{"class":103},[97,13137,1362],{"class":319},[97,13139,13140],{"class":118}," \"ref = \"",[97,13142,1637],{"class":319},[97,13144,13125],{"class":103},[97,13146,1362],{"class":319},[97,13148,11660],{"class":103},[97,13150,13151],{"class":191},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[97,13153,13154,13156,13158,13160,13162,13164,13166,13168],{"class":99,"line":1866},[97,13155,6720],{"class":103},[97,13157,1362],{"class":319},[97,13159,13140],{"class":118},[97,13161,1637],{"class":319},[97,13163,13125],{"class":103},[97,13165,1362],{"class":319},[97,13167,11660],{"class":103},[97,13169,13170],{"class":191},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[97,13172,13173],{"class":99,"line":1871},[97,13174,2591],{"emptyLinePlaceholder":249},[97,13176,13177],{"class":99,"line":1885},[97,13178,13179],{"class":191},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[97,13181,13182,13184,13187,13189,13191],{"class":99,"line":1890},[97,13183,13122],{"class":319},[97,13185,13186],{"class":103}," ref2 ",[97,13188,115],{"class":319},[97,13190,5848],{"class":111},[97,13192,5827],{"class":103},[97,13194,13195,13197,13199,13202,13204,13206,13208,13210],{"class":99,"line":1919},[97,13196,6720],{"class":103},[97,13198,1362],{"class":319},[97,13200,13201],{"class":118}," \"ref2 = \"",[97,13203,1637],{"class":319},[97,13205,13186],{"class":103},[97,13207,1362],{"class":319},[97,13209,11660],{"class":103},[97,13211,13212],{"class":191}," \u002F\u002F20\n",[97,13214,13215,13217,13219,13221,13223,13225,13227,13229],{"class":99,"line":1924},[97,13216,6720],{"class":103},[97,13218,1362],{"class":319},[97,13220,13201],{"class":118},[97,13222,1637],{"class":319},[97,13224,13186],{"class":103},[97,13226,1362],{"class":319},[97,13228,11660],{"class":103},[97,13230,13212],{"class":191},[97,13232,13233],{"class":99,"line":1941},[97,13234,2591],{"emptyLinePlaceholder":249},[97,13236,13237,13239,13242,13244,13246,13248],{"class":99,"line":1946},[97,13238,5893],{"class":111},[97,13240,13241],{"class":103},"() ",[97,13243,115],{"class":319},[97,13245,3190],{"class":370},[97,13247,377],{"class":103},[97,13249,13250],{"class":191},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[97,13252,13253],{"class":99,"line":1951},[97,13254,2591],{"emptyLinePlaceholder":249},[97,13256,13257,13259,13261,13263,13265,13267,13269,13271],{"class":99,"line":1956},[97,13258,6720],{"class":103},[97,13260,1362],{"class":319},[97,13262,13201],{"class":118},[97,13264,1637],{"class":319},[97,13266,13186],{"class":103},[97,13268,1362],{"class":319},[97,13270,11660],{"class":103},[97,13272,13273],{"class":191}," \u002F\u002F1000\n",[97,13275,13276,13278,13280,13282,13284,13286,13288,13290],{"class":99,"line":1970},[97,13277,6720],{"class":103},[97,13279,1362],{"class":319},[97,13281,13201],{"class":118},[97,13283,1637],{"class":319},[97,13285,13186],{"class":103},[97,13287,1362],{"class":319},[97,13289,11660],{"class":103},[97,13291,13273],{"class":191},[97,13293,13294],{"class":99,"line":1975},[97,13295,2591],{"emptyLinePlaceholder":249},[97,13297,13298,13300,13302,13304],{"class":99,"line":2768},[97,13299,2494],{"class":111},[97,13301,323],{"class":103},[97,13303,2499],{"class":118},[97,13305,2910],{"class":103},[97,13307,13308],{"class":99,"line":2782},[97,13309,2591],{"emptyLinePlaceholder":249},[97,13311,13312,13314,13316],{"class":99,"line":2790},[97,13313,4281],{"class":319},[97,13315,4284],{"class":370},[97,13317,1483],{"class":103},[97,13319,13320],{"class":99,"line":2795},[97,13321,1757],{"class":103},[14,13323,13325],{"id":13324},"_65引用的本质","6.5引用的本质",[24,13327,13328,13329],{},"本质：",[469,13330,13331],{},"引用的本质在c++内部实现是一个指针常量.",[87,13333,13335],{"className":310,"code":13334,"language":312,"meta":92,"style":92},"\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",[94,13336,13337,13342,13358,13372,13376,13385,13397,13402,13407,13418,13431,13435,13451,13468,13472,13480,13488],{"__ignoreMap":92},[97,13338,13339],{"class":99,"line":100},[97,13340,13341],{"class":191},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[97,13343,13344,13346,13348,13350,13352,13355],{"class":99,"line":195},[97,13345,5555],{"class":319},[97,13347,11576],{"class":111},[97,13349,323],{"class":103},[97,13351,12757],{"class":319},[97,13353,13354],{"class":5407}," ref",[97,13356,13357],{"class":103},"){\n",[97,13359,13360,13363,13365,13367,13369],{"class":99,"line":241},[97,13361,13362],{"class":103},"    ref ",[97,13364,115],{"class":319},[97,13366,5945],{"class":370},[97,13368,377],{"class":103},[97,13370,13371],{"class":191}," \u002F\u002F ref是引用，转换为*ref = 100\n",[97,13373,13374],{"class":99,"line":1387},[97,13375,1757],{"class":103},[97,13377,13378,13380,13382],{"class":99,"line":1393},[97,13379,326],{"class":319},[97,13381,2164],{"class":111},[97,13383,13384],{"class":103},"(){\n",[97,13386,13387,13389,13391,13393,13395],{"class":99,"line":1407},[97,13388,2176],{"class":319},[97,13390,11060],{"class":103},[97,13392,115],{"class":319},[97,13394,2229],{"class":370},[97,13396,1483],{"class":103},[97,13398,13399],{"class":99,"line":1413},[97,13400,13401],{"class":103},"    \n",[97,13403,13404],{"class":99,"line":1504},[97,13405,13406],{"class":191},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[97,13408,13409,13411,13413,13415],{"class":99,"line":1510},[97,13410,13122],{"class":319},[97,13412,13125],{"class":103},[97,13414,115],{"class":319},[97,13416,13417],{"class":103}," a; \n",[97,13419,13420,13422,13424,13426,13428],{"class":99,"line":1522},[97,13421,13362],{"class":103},[97,13423,115],{"class":319},[97,13425,9141],{"class":370},[97,13427,377],{"class":103},[97,13429,13430],{"class":191}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[97,13432,13433],{"class":99,"line":1804},[97,13434,13401],{"class":103},[97,13436,13437,13439,13441,13443,13445,13447,13449],{"class":99,"line":1809},[97,13438,6720],{"class":103},[97,13440,1362],{"class":319},[97,13442,12861],{"class":118},[97,13444,1637],{"class":319},[97,13446,11060],{"class":103},[97,13448,1362],{"class":319},[97,13450,9031],{"class":103},[97,13452,13453,13455,13457,13460,13462,13464,13466],{"class":99,"line":1815},[97,13454,6720],{"class":103},[97,13456,1362],{"class":319},[97,13458,13459],{"class":118}," \"ref:\"",[97,13461,1637],{"class":319},[97,13463,13125],{"class":103},[97,13465,1362],{"class":319},[97,13467,9031],{"class":103},[97,13469,13470],{"class":99,"line":1820},[97,13471,13401],{"class":103},[97,13473,13474,13477],{"class":99,"line":1834},[97,13475,13476],{"class":111},"    func",[97,13478,13479],{"class":103},"(a);\n",[97,13481,13482,13484,13486],{"class":99,"line":1839},[97,13483,4281],{"class":319},[97,13485,4284],{"class":370},[97,13487,1483],{"class":103},[97,13489,13490],{"class":99,"line":1845},[97,13491,1757],{"class":103},[24,13493,11523],{},[138,13495,13496,13499],{},[70,13497,13498],{},"引用的本质，就是一个指针常量",[70,13500,13501],{},"引用一旦初始化，就不可以发生改变",[14,13503,13505],{"id":13504},"_66常量引用","6.6常量引用",[24,13507,13508],{},"作用：常量引用主要用来修饰形参",[24,13510,13511,13512,13515],{},"在函数形参列表中，可以加",[469,13513,13514],{},"const修饰形参","，防止形参改变实参",[87,13517,13519],{"className":310,"code":13518,"language":312,"meta":92,"style":92},"\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",[94,13520,13521,13526,13531,13550,13555,13568,13572,13576,13584,13588,13593,13598,13612,13616,13624,13636,13640,13645,13657,13664,13668,13678,13682,13690],{"__ignoreMap":92},[97,13522,13523],{"class":99,"line":100},[97,13524,13525],{"class":191},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[97,13527,13528],{"class":99,"line":195},[97,13529,13530],{"class":191},"\u002F\u002F加上const就不能修改实参的\n",[97,13532,13533,13535,13538,13540,13542,13545,13548],{"class":99,"line":241},[97,13534,5555],{"class":319},[97,13536,13537],{"class":111}," showValue",[97,13539,323],{"class":103},[97,13541,6983],{"class":319},[97,13543,13544],{"class":319}," int&",[97,13546,13547],{"class":5407}," v",[97,13549,12633],{"class":103},[97,13551,13552],{"class":99,"line":1387},[97,13553,13554],{"class":191},"    \u002F\u002Fv += 100;\n",[97,13556,13557,13559,13561,13564,13566],{"class":99,"line":1393},[97,13558,6720],{"class":103},[97,13560,1362],{"class":319},[97,13562,13563],{"class":103}," v ",[97,13565,1362],{"class":319},[97,13567,9031],{"class":103},[97,13569,13570],{"class":99,"line":1407},[97,13571,1757],{"class":103},[97,13573,13574],{"class":99,"line":1413},[97,13575,2591],{"emptyLinePlaceholder":249},[97,13577,13578,13580,13582],{"class":99,"line":1504},[97,13579,326],{"class":319},[97,13581,2164],{"class":111},[97,13583,11044],{"class":103},[97,13585,13586],{"class":99,"line":1510},[97,13587,2591],{"emptyLinePlaceholder":249},[97,13589,13590],{"class":99,"line":1522},[97,13591,13592],{"class":191},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[97,13594,13595],{"class":99,"line":1804},[97,13596,13597],{"class":191},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[97,13599,13600,13602,13604,13606,13608,13610],{"class":99,"line":1809},[97,13601,11412],{"class":319},[97,13603,13544],{"class":319},[97,13605,13125],{"class":103},[97,13607,115],{"class":319},[97,13609,2229],{"class":370},[97,13611,1483],{"class":103},[97,13613,13614],{"class":99,"line":1815},[97,13615,2591],{"emptyLinePlaceholder":249},[97,13617,13618,13621],{"class":99,"line":1820},[97,13619,13620],{"class":191},"    \u002F\u002Fref = 100;",[97,13622,13623],{"class":191},"  \u002F\u002F加入const后不可以修改变量\n",[97,13625,13626,13628,13630,13632,13634],{"class":99,"line":1834},[97,13627,6720],{"class":103},[97,13629,1362],{"class":319},[97,13631,13125],{"class":103},[97,13633,1362],{"class":319},[97,13635,9031],{"class":103},[97,13637,13638],{"class":99,"line":1839},[97,13639,2591],{"emptyLinePlaceholder":249},[97,13641,13642],{"class":99,"line":1845},[97,13643,13644],{"class":191},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[97,13646,13647,13649,13651,13653,13655],{"class":99,"line":1866},[97,13648,2176],{"class":319},[97,13650,11060],{"class":103},[97,13652,115],{"class":319},[97,13654,2229],{"class":370},[97,13656,1483],{"class":103},[97,13658,13659,13662],{"class":99,"line":1871},[97,13660,13661],{"class":111},"    showValue",[97,13663,13479],{"class":103},[97,13665,13666],{"class":99,"line":1885},[97,13667,2591],{"emptyLinePlaceholder":249},[97,13669,13670,13672,13674,13676],{"class":99,"line":1890},[97,13671,2494],{"class":111},[97,13673,323],{"class":103},[97,13675,2499],{"class":118},[97,13677,2910],{"class":103},[97,13679,13680],{"class":99,"line":1919},[97,13681,2591],{"emptyLinePlaceholder":249},[97,13683,13684,13686,13688],{"class":99,"line":1924},[97,13685,4281],{"class":319},[97,13687,4284],{"class":370},[97,13689,1483],{"class":103},[97,13691,13692],{"class":99,"line":1941},[97,13693,1757],{"class":103},[231,13695,13696],{},"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":92,"searchDepth":195,"depth":195,"links":13698},[13699,13700,13701,13702,13703,13704],{"id":12231,"depth":195,"text":12232},{"id":12410,"depth":195,"text":12411},{"id":12593,"depth":195,"text":12594},{"id":12997,"depth":195,"text":12998},{"id":13324,"depth":195,"text":13325},{"id":13504,"depth":195,"text":13505},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12223,"description":92},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13711,"title":13712,"body":13713,"description":92,"extension":247,"meta":14794,"navigation":249,"path":14795,"seo":14796,"stem":14797,"__hash__":14798},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13714,"toc":14786},[13715,13718,13722,13725,13730,13962,13964,13975,13979,13982,13990,14094,14097,14101,14104,14108,14111,14116,14138,14144,14471,14474,14478,14486,14783],[10,13716,13712],{"id":13717},"_7函数高级部分",[14,13719,13721],{"id":13720},"_71函数默认参数","7.1函数默认参数",[24,13723,13724],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[24,13726,5372,13727],{},[94,13728,13729],{}," 返回值类型  函数名 （参数= 默认值）{}",[87,13731,13733],{"className":310,"code":13732,"language":312,"meta":92,"style":92},"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",[94,13734,13735,13770,13785,13789,13793,13798,13803,13832,13852,13862,13866,13870,13878,13882,13910,13932,13936,13946,13950,13958],{"__ignoreMap":92},[97,13736,13737,13739,13741,13743,13745,13747,13749,13751,13753,13756,13758,13760,13762,13764,13766,13768],{"class":99,"line":100},[97,13738,326],{"class":319},[97,13740,11576],{"class":111},[97,13742,323],{"class":103},[97,13744,326],{"class":319},[97,13746,1591],{"class":5407},[97,13748,12626],{"class":103},[97,13750,326],{"class":319},[97,13752,3024],{"class":5407},[97,13754,13755],{"class":319}," =",[97,13757,2229],{"class":370},[97,13759,12626],{"class":103},[97,13761,326],{"class":319},[97,13763,3040],{"class":5407},[97,13765,13755],{"class":319},[97,13767,2229],{"class":370},[97,13769,12633],{"class":103},[97,13771,13772,13774,13776,13778,13780,13782],{"class":99,"line":195},[97,13773,4281],{"class":319},[97,13775,11060],{"class":103},[97,13777,801],{"class":319},[97,13779,11073],{"class":103},[97,13781,801],{"class":319},[97,13783,13784],{"class":103}," c;\n",[97,13786,13787],{"class":99,"line":241},[97,13788,1757],{"class":103},[97,13790,13791],{"class":99,"line":1387},[97,13792,2591],{"emptyLinePlaceholder":249},[97,13794,13795],{"class":99,"line":1393},[97,13796,13797],{"class":191},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[97,13799,13800],{"class":99,"line":1407},[97,13801,13802],{"class":191},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[97,13804,13805,13807,13810,13812,13814,13816,13818,13820,13822,13824,13826,13828,13830],{"class":99,"line":1413},[97,13806,326],{"class":319},[97,13808,13809],{"class":111}," func2",[97,13811,323],{"class":103},[97,13813,326],{"class":319},[97,13815,1591],{"class":5407},[97,13817,13755],{"class":319},[97,13819,2229],{"class":370},[97,13821,12626],{"class":103},[97,13823,326],{"class":319},[97,13825,3024],{"class":5407},[97,13827,13755],{"class":319},[97,13829,2229],{"class":370},[97,13831,2910],{"class":103},[97,13833,13834,13836,13838,13840,13842,13844,13846,13848,13850],{"class":99,"line":1504},[97,13835,326],{"class":319},[97,13837,13809],{"class":111},[97,13839,323],{"class":103},[97,13841,326],{"class":319},[97,13843,1591],{"class":5407},[97,13845,12626],{"class":103},[97,13847,326],{"class":319},[97,13849,3024],{"class":5407},[97,13851,12633],{"class":103},[97,13853,13854,13856,13858,13860],{"class":99,"line":1510},[97,13855,4281],{"class":319},[97,13857,11060],{"class":103},[97,13859,801],{"class":319},[97,13861,12654],{"class":103},[97,13863,13864],{"class":99,"line":1522},[97,13865,1757],{"class":103},[97,13867,13868],{"class":99,"line":1804},[97,13869,2591],{"emptyLinePlaceholder":249},[97,13871,13872,13874,13876],{"class":99,"line":1809},[97,13873,326],{"class":319},[97,13875,2164],{"class":111},[97,13877,11044],{"class":103},[97,13879,13880],{"class":99,"line":1815},[97,13881,2591],{"emptyLinePlaceholder":249},[97,13883,13884,13886,13888,13891,13893,13895,13897,13899,13901,13903,13906,13908],{"class":99,"line":1820},[97,13885,6720],{"class":103},[97,13887,1362],{"class":319},[97,13889,13890],{"class":118}," \"ret = \"",[97,13892,1637],{"class":319},[97,13894,11576],{"class":111},[97,13896,323],{"class":103},[97,13898,1020],{"class":370},[97,13900,12626],{"class":103},[97,13902,1020],{"class":370},[97,13904,13905],{"class":103},") ",[97,13907,1362],{"class":319},[97,13909,9031],{"class":103},[97,13911,13912,13914,13916,13918,13920,13922,13924,13926,13928,13930],{"class":99,"line":1834},[97,13913,6720],{"class":103},[97,13915,1362],{"class":319},[97,13917,13890],{"class":118},[97,13919,1637],{"class":319},[97,13921,11576],{"class":111},[97,13923,323],{"class":103},[97,13925,631],{"class":370},[97,13927,13905],{"class":103},[97,13929,1362],{"class":319},[97,13931,9031],{"class":103},[97,13933,13934],{"class":99,"line":1839},[97,13935,2591],{"emptyLinePlaceholder":249},[97,13937,13938,13940,13942,13944],{"class":99,"line":1845},[97,13939,2494],{"class":111},[97,13941,323],{"class":103},[97,13943,2499],{"class":118},[97,13945,2910],{"class":103},[97,13947,13948],{"class":99,"line":1866},[97,13949,2591],{"emptyLinePlaceholder":249},[97,13951,13952,13954,13956],{"class":99,"line":1871},[97,13953,4281],{"class":319},[97,13955,4284],{"class":370},[97,13957,1483],{"class":103},[97,13959,13960],{"class":99,"line":1885},[97,13961,1757],{"class":103},[24,13963,11523],{},[138,13965,13966,13969,13972],{},[70,13967,13968],{},"我传就用我；没传就用你",[70,13970,13971],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[70,13973,13974],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,13976,13978],{"id":13977},"_72函数的占位参数","7.2函数的占位参数",[24,13980,13981],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[24,13983,13984,13986,13987],{},[469,13985,5372],{}," ",[94,13988,13989],{},"返回值类型 函数名 (数据类型){}",[87,13991,13993],{"className":310,"code":13992,"language":312,"meta":92,"style":92},"\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",[94,13994,13995,14000,14018,14031,14035,14043,14047,14064,14068,14078,14082,14090],{"__ignoreMap":92},[97,13996,13997],{"class":99,"line":100},[97,13998,13999],{"class":191},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[97,14001,14002,14004,14006,14008,14010,14012,14014,14016],{"class":99,"line":195},[97,14003,5555],{"class":319},[97,14005,11576],{"class":111},[97,14007,323],{"class":103},[97,14009,326],{"class":319},[97,14011,1591],{"class":5407},[97,14013,12626],{"class":103},[97,14015,326],{"class":319},[97,14017,12633],{"class":103},[97,14019,14020,14022,14024,14027,14029],{"class":99,"line":241},[97,14021,6720],{"class":103},[97,14023,1362],{"class":319},[97,14025,14026],{"class":118}," \"this is func\"",[97,14028,1637],{"class":319},[97,14030,9031],{"class":103},[97,14032,14033],{"class":99,"line":1387},[97,14034,1757],{"class":103},[97,14036,14037,14039,14041],{"class":99,"line":1393},[97,14038,326],{"class":319},[97,14040,2164],{"class":111},[97,14042,11044],{"class":103},[97,14044,14045],{"class":99,"line":1407},[97,14046,2591],{"emptyLinePlaceholder":249},[97,14048,14049,14051,14053,14055,14057,14059,14061],{"class":99,"line":1413},[97,14050,13476],{"class":111},[97,14052,323],{"class":103},[97,14054,766],{"class":370},[97,14056,698],{"class":103},[97,14058,766],{"class":370},[97,14060,6157],{"class":103},[97,14062,14063],{"class":191}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[97,14065,14066],{"class":99,"line":1504},[97,14067,2591],{"emptyLinePlaceholder":249},[97,14069,14070,14072,14074,14076],{"class":99,"line":1510},[97,14071,2494],{"class":111},[97,14073,323],{"class":103},[97,14075,2499],{"class":118},[97,14077,2910],{"class":103},[97,14079,14080],{"class":99,"line":1522},[97,14081,2591],{"emptyLinePlaceholder":249},[97,14083,14084,14086,14088],{"class":99,"line":1804},[97,14085,4281],{"class":319},[97,14087,4284],{"class":370},[97,14089,1483],{"class":103},[97,14091,14092],{"class":99,"line":1809},[97,14093,1757],{"class":103},[24,14095,14096],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14098,14100],{"id":14099},"_73函数重载","7.3函数重载",[24,14102,14103],{},"意思是函数名是可以相同的",[48,14105,14107],{"id":14106},"_731基本语法","7.3.1基本语法",[24,14109,14110],{},"作用：函数名可以相同，提高复用性",[24,14112,14113],{},[469,14114,14115],{},"函数重载满足条件：",[67,14117,14118,14121,14124],{},[70,14119,14120],{},"同一个作用域下",[70,14122,14123],{},"函数名称相同",[70,14125,14126,14127,14130,14131,14134,14135],{},"函数参数",[469,14128,14129],{},"类型不同","  或者 ",[469,14132,14133],{},"个数不同"," 或者 ",[469,14136,14137],{},"顺序不同",[24,14139,14140,14143],{},[469,14141,14142],{},"注意:","  函数的返回值不可以作为函数重载的条件",[87,14145,14147],{"className":10132,"code":14146,"language":10134,"meta":92,"style":92},"\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",[94,14148,14149,14154,14162,14166,14179,14183,14197,14201,14214,14218,14233,14237,14250,14254,14275,14279,14292,14296,14316,14320,14333,14337,14341,14346,14351,14356,14361,14366,14370,14374,14382,14386,14392,14402,14412,14426,14441,14445,14455,14459,14467],{"__ignoreMap":92},[97,14150,14151],{"class":99,"line":100},[97,14152,14153],{"class":191},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[97,14155,14156,14158,14160],{"class":99,"line":195},[97,14157,5555],{"class":319},[97,14159,11576],{"class":111},[97,14161,2167],{"class":103},[97,14163,14164],{"class":99,"line":241},[97,14165,1738],{"class":103},[97,14167,14168,14170,14172,14175,14177],{"class":99,"line":1387},[97,14169,6720],{"class":103},[97,14171,1362],{"class":319},[97,14173,14174],{"class":118}," \"func 的调用！\"",[97,14176,1637],{"class":319},[97,14178,9031],{"class":103},[97,14180,14181],{"class":99,"line":1393},[97,14182,1757],{"class":103},[97,14184,14185,14187,14189,14191,14193,14195],{"class":99,"line":1407},[97,14186,5555],{"class":319},[97,14188,11576],{"class":111},[97,14190,323],{"class":103},[97,14192,326],{"class":319},[97,14194,1591],{"class":5407},[97,14196,329],{"class":103},[97,14198,14199],{"class":99,"line":1413},[97,14200,1738],{"class":103},[97,14202,14203,14205,14207,14210,14212],{"class":99,"line":1504},[97,14204,6720],{"class":103},[97,14206,1362],{"class":319},[97,14208,14209],{"class":118}," \"func (int a) 的调用！\"",[97,14211,1637],{"class":319},[97,14213,9031],{"class":103},[97,14215,14216],{"class":99,"line":1510},[97,14217,1757],{"class":103},[97,14219,14220,14222,14224,14226,14229,14231],{"class":99,"line":1522},[97,14221,5555],{"class":319},[97,14223,11576],{"class":111},[97,14225,323],{"class":103},[97,14227,14228],{"class":319},"double",[97,14230,1591],{"class":5407},[97,14232,329],{"class":103},[97,14234,14235],{"class":99,"line":1804},[97,14236,1738],{"class":103},[97,14238,14239,14241,14243,14246,14248],{"class":99,"line":1809},[97,14240,6720],{"class":103},[97,14242,1362],{"class":319},[97,14244,14245],{"class":118}," \"func (double a)的调用！\"",[97,14247,1637],{"class":319},[97,14249,9031],{"class":103},[97,14251,14252],{"class":99,"line":1815},[97,14253,1757],{"class":103},[97,14255,14256,14258,14260,14262,14264,14266,14269,14271,14273],{"class":99,"line":1820},[97,14257,5555],{"class":319},[97,14259,11576],{"class":111},[97,14261,323],{"class":103},[97,14263,326],{"class":319},[97,14265,1591],{"class":5407},[97,14267,14268],{"class":103}," ,",[97,14270,14228],{"class":319},[97,14272,3024],{"class":5407},[97,14274,329],{"class":103},[97,14276,14277],{"class":99,"line":1834},[97,14278,1738],{"class":103},[97,14280,14281,14283,14285,14288,14290],{"class":99,"line":1839},[97,14282,6720],{"class":103},[97,14284,1362],{"class":319},[97,14286,14287],{"class":118}," \"func (int a ,double b) 的调用！\"",[97,14289,1637],{"class":319},[97,14291,9031],{"class":103},[97,14293,14294],{"class":99,"line":1845},[97,14295,1757],{"class":103},[97,14297,14298,14300,14302,14304,14306,14308,14310,14312,14314],{"class":99,"line":1866},[97,14299,5555],{"class":319},[97,14301,11576],{"class":111},[97,14303,323],{"class":103},[97,14305,14228],{"class":319},[97,14307,1591],{"class":5407},[97,14309,14268],{"class":103},[97,14311,326],{"class":319},[97,14313,3024],{"class":5407},[97,14315,329],{"class":103},[97,14317,14318],{"class":99,"line":1871},[97,14319,1738],{"class":103},[97,14321,14322,14324,14326,14329,14331],{"class":99,"line":1885},[97,14323,6720],{"class":103},[97,14325,1362],{"class":319},[97,14327,14328],{"class":118}," \"func (double a ,int b)的调用！\"",[97,14330,1637],{"class":319},[97,14332,9031],{"class":103},[97,14334,14335],{"class":99,"line":1890},[97,14336,1757],{"class":103},[97,14338,14339],{"class":99,"line":1919},[97,14340,2591],{"emptyLinePlaceholder":249},[97,14342,14343],{"class":99,"line":1924},[97,14344,14345],{"class":191},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[97,14347,14348],{"class":99,"line":1941},[97,14349,14350],{"class":191},"\u002F\u002Fint func(double a, int b)\n",[97,14352,14353],{"class":99,"line":1946},[97,14354,14355],{"class":191},"\u002F\u002F{\n",[97,14357,14358],{"class":99,"line":1951},[97,14359,14360],{"class":191},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[97,14362,14363],{"class":99,"line":1956},[97,14364,14365],{"class":191},"\u002F\u002F}\n",[97,14367,14368],{"class":99,"line":1970},[97,14369,2591],{"emptyLinePlaceholder":249},[97,14371,14372],{"class":99,"line":1975},[97,14373,2591],{"emptyLinePlaceholder":249},[97,14375,14376,14378,14380],{"class":99,"line":2768},[97,14377,326],{"class":319},[97,14379,2164],{"class":111},[97,14381,11044],{"class":103},[97,14383,14384],{"class":99,"line":2782},[97,14385,2591],{"emptyLinePlaceholder":249},[97,14387,14388,14390],{"class":99,"line":2790},[97,14389,13476],{"class":111},[97,14391,5827],{"class":103},[97,14393,14394,14396,14398,14400],{"class":99,"line":2795},[97,14395,13476],{"class":111},[97,14397,323],{"class":103},[97,14399,766],{"class":370},[97,14401,2910],{"class":103},[97,14403,14404,14406,14408,14410],{"class":99,"line":2801},[97,14405,13476],{"class":111},[97,14407,323],{"class":103},[97,14409,371],{"class":370},[97,14411,2910],{"class":103},[97,14413,14414,14416,14418,14420,14422,14424],{"class":99,"line":2807},[97,14415,13476],{"class":111},[97,14417,323],{"class":103},[97,14419,766],{"class":370},[97,14421,698],{"class":103},[97,14423,371],{"class":370},[97,14425,2910],{"class":103},[97,14427,14428,14430,14432,14434,14437,14439],{"class":99,"line":2812},[97,14429,13476],{"class":111},[97,14431,323],{"class":103},[97,14433,371],{"class":370},[97,14435,14436],{"class":103}," , ",[97,14438,766],{"class":370},[97,14440,2910],{"class":103},[97,14442,14443],{"class":99,"line":8139},[97,14444,13401],{"class":103},[97,14446,14447,14449,14451,14453],{"class":99,"line":8163},[97,14448,2494],{"class":111},[97,14450,323],{"class":103},[97,14452,2499],{"class":118},[97,14454,2910],{"class":103},[97,14456,14457],{"class":99,"line":8168},[97,14458,2591],{"emptyLinePlaceholder":249},[97,14460,14461,14463,14465],{"class":99,"line":8174},[97,14462,4281],{"class":319},[97,14464,4284],{"class":370},[97,14466,1483],{"class":103},[97,14468,14469],{"class":99,"line":8201},[97,14470,1757],{"class":103},[24,14472,14473],{},"重点：函数返回值不可以作为函数重载条件！",[48,14475,14477],{"id":14476},"_732注意事项","7.3.2注意事项",[67,14479,14480,14483],{},[70,14481,14482],{},"引用作为重载条件!!!",[70,14484,14485],{},"函数重载碰到函数默认参数",[87,14487,14489],{"className":310,"code":14488,"language":312,"meta":92,"style":92},"\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",[94,14490,14491,14496,14501,14505,14521,14525,14538,14542,14546,14564,14568,14581,14585,14589,14593,14598,14602,14626,14630,14643,14647,14651,14665,14669,14682,14686,14690,14698,14702,14714,14724,14737,14741,14745,14753,14757,14767,14771,14779],{"__ignoreMap":92},[97,14492,14493],{"class":99,"line":100},[97,14494,14495],{"class":191},"\u002F\u002F函数重载注意事项\n",[97,14497,14498],{"class":99,"line":195},[97,14499,14500],{"class":191},"\u002F\u002F1、引用作为重载条件\n",[97,14502,14503],{"class":99,"line":241},[97,14504,2591],{"emptyLinePlaceholder":249},[97,14506,14507,14509,14511,14513,14515,14517,14519],{"class":99,"line":1387},[97,14508,5555],{"class":319},[97,14510,11576],{"class":111},[97,14512,323],{"class":103},[97,14514,326],{"class":319},[97,14516,10775],{"class":319},[97,14518,558],{"class":5407},[97,14520,329],{"class":103},[97,14522,14523],{"class":99,"line":1393},[97,14524,1738],{"class":103},[97,14526,14527,14529,14531,14534,14536],{"class":99,"line":1407},[97,14528,6720],{"class":103},[97,14530,1362],{"class":319},[97,14532,14533],{"class":118}," \"func (int &a) 调用 \"",[97,14535,1637],{"class":319},[97,14537,9031],{"class":103},[97,14539,14540],{"class":99,"line":1413},[97,14541,1757],{"class":103},[97,14543,14544],{"class":99,"line":1504},[97,14545,2591],{"emptyLinePlaceholder":249},[97,14547,14548,14550,14552,14554,14556,14558,14560,14562],{"class":99,"line":1510},[97,14549,5555],{"class":319},[97,14551,11576],{"class":111},[97,14553,323],{"class":103},[97,14555,6983],{"class":319},[97,14557,2573],{"class":319},[97,14559,10775],{"class":319},[97,14561,558],{"class":5407},[97,14563,329],{"class":103},[97,14565,14566],{"class":99,"line":1522},[97,14567,1738],{"class":103},[97,14569,14570,14572,14574,14577,14579],{"class":99,"line":1804},[97,14571,6720],{"class":103},[97,14573,1362],{"class":319},[97,14575,14576],{"class":118}," \"func (const int &a) 调用 \"",[97,14578,1637],{"class":319},[97,14580,9031],{"class":103},[97,14582,14583],{"class":99,"line":1809},[97,14584,1757],{"class":103},[97,14586,14587],{"class":99,"line":1815},[97,14588,2591],{"emptyLinePlaceholder":249},[97,14590,14591],{"class":99,"line":1820},[97,14592,2591],{"emptyLinePlaceholder":249},[97,14594,14595],{"class":99,"line":1834},[97,14596,14597],{"class":191},"\u002F\u002F2、函数重载碰到函数默认参数\n",[97,14599,14600],{"class":99,"line":1839},[97,14601,2591],{"emptyLinePlaceholder":249},[97,14603,14604,14606,14608,14610,14612,14614,14616,14618,14620,14622,14624],{"class":99,"line":1845},[97,14605,5555],{"class":319},[97,14607,13809],{"class":111},[97,14609,323],{"class":103},[97,14611,326],{"class":319},[97,14613,1591],{"class":5407},[97,14615,12626],{"class":103},[97,14617,326],{"class":319},[97,14619,3024],{"class":5407},[97,14621,13755],{"class":319},[97,14623,2229],{"class":370},[97,14625,329],{"class":103},[97,14627,14628],{"class":99,"line":1866},[97,14629,1738],{"class":103},[97,14631,14632,14634,14636,14639,14641],{"class":99,"line":1871},[97,14633,6720],{"class":103},[97,14635,1362],{"class":319},[97,14637,14638],{"class":118}," \"func2(int a, int b = 10) 调用\"",[97,14640,1637],{"class":319},[97,14642,9031],{"class":103},[97,14644,14645],{"class":99,"line":1885},[97,14646,1757],{"class":103},[97,14648,14649],{"class":99,"line":1890},[97,14650,2591],{"emptyLinePlaceholder":249},[97,14652,14653,14655,14657,14659,14661,14663],{"class":99,"line":1919},[97,14654,5555],{"class":319},[97,14656,13809],{"class":111},[97,14658,323],{"class":103},[97,14660,326],{"class":319},[97,14662,1591],{"class":5407},[97,14664,329],{"class":103},[97,14666,14667],{"class":99,"line":1924},[97,14668,1738],{"class":103},[97,14670,14671,14673,14675,14678,14680],{"class":99,"line":1941},[97,14672,6720],{"class":103},[97,14674,1362],{"class":319},[97,14676,14677],{"class":118}," \"func2(int a) 调用\"",[97,14679,1637],{"class":319},[97,14681,9031],{"class":103},[97,14683,14684],{"class":99,"line":1946},[97,14685,1757],{"class":103},[97,14687,14688],{"class":99,"line":1951},[97,14689,2591],{"emptyLinePlaceholder":249},[97,14691,14692,14694,14696],{"class":99,"line":1956},[97,14693,326],{"class":319},[97,14695,2164],{"class":111},[97,14697,11044],{"class":103},[97,14699,14700],{"class":99,"line":1970},[97,14701,13401],{"class":103},[97,14703,14704,14706,14708,14710,14712],{"class":99,"line":1975},[97,14705,2176],{"class":319},[97,14707,11060],{"class":103},[97,14709,115],{"class":319},[97,14711,2229],{"class":370},[97,14713,1483],{"class":103},[97,14715,14716,14718,14721],{"class":99,"line":2768},[97,14717,13476],{"class":111},[97,14719,14720],{"class":103},"(a);",[97,14722,14723],{"class":191}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[97,14725,14726,14728,14730,14732,14734],{"class":99,"line":2782},[97,14727,13476],{"class":111},[97,14729,323],{"class":103},[97,14731,766],{"class":370},[97,14733,6157],{"class":103},[97,14735,14736],{"class":191},"\u002F\u002F调用有const   10是个常量\n",[97,14738,14739],{"class":99,"line":2790},[97,14740,2591],{"emptyLinePlaceholder":249},[97,14742,14743],{"class":99,"line":2795},[97,14744,2591],{"emptyLinePlaceholder":249},[97,14746,14747,14750],{"class":99,"line":2801},[97,14748,14749],{"class":191},"    \u002F\u002Ffunc2(10);",[97,14751,14752],{"class":191}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[97,14754,14755],{"class":99,"line":2807},[97,14756,2591],{"emptyLinePlaceholder":249},[97,14758,14759,14761,14763,14765],{"class":99,"line":2812},[97,14760,2494],{"class":111},[97,14762,323],{"class":103},[97,14764,2499],{"class":118},[97,14766,2910],{"class":103},[97,14768,14769],{"class":99,"line":8139},[97,14770,2591],{"emptyLinePlaceholder":249},[97,14772,14773,14775,14777],{"class":99,"line":8163},[97,14774,4281],{"class":319},[97,14776,4284],{"class":370},[97,14778,1483],{"class":103},[97,14780,14781],{"class":99,"line":8168},[97,14782,1757],{"class":103},[231,14784,14785],{},"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":92,"searchDepth":195,"depth":195,"links":14787},[14788,14789,14790],{"id":13720,"depth":195,"text":13721},{"id":13977,"depth":195,"text":13978},{"id":14099,"depth":195,"text":14100,"children":14791},[14792,14793],{"id":14106,"depth":241,"text":14107},{"id":14476,"depth":241,"text":14477},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13712,"description":92},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14800,"title":14801,"body":14802,"description":23554,"extension":247,"meta":23555,"navigation":249,"path":23556,"seo":23557,"stem":23558,"__hash__":23559},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14803,"toc":23535},[14804,14807,14813,14820,14825,14828,14831,14834,14838,14842,14845,14848,14856,14861,14864,14871,14876,15035,15038,15290,15293,15296,15299,15304,15307,15310,15321,15326,15562,15566,15576,15579,15587,15734,15738,15741,15744,15748,16193,16197,16205,16213,17125,17132,17137,17765,17768,17771,17774,17893,17896,17983,17986,18112,18115,18209,18212,18565,18569,18577,18581,18588,18591,18594,18605,18611,18616,18628,18636,18656,18664,18681,18867,18870,18874,18877,18880,18883,18886,18889,18892,18895,19355,19361,19365,19368,19379,19966,19969,20458,20462,20465,20468,20471,20474,20477,20485,20881,20885,20888,20891,21338,21341,21344,21349,21352,21357,21360,21364,21367,21369,21375,21378,21684,21694,21735,21739,21742,21744,21777,21780,22087,22089,22104,22107,22130,22139,22145,22148,22152,22155,22158,22163,22174,22179,22187,22191,22321,22324,22327,22502,22507,22719,22723,22726,22840,22845,23084,23088,23092,23095,23098,23103,23208,23211,23214,23217,23221,23332,23335,23338,23343,23395,23398,23401,23406,23452,23455,23460,23528,23530,23533],[10,14805,14801],{"id":14806},"_8类和对象",[24,14808,14809,14810],{},"C++面向对象的三大特性为",[469,14811,14812],{},"封装、继承、多态",[24,14814,14815,14816,14819],{},"C++认为",[469,14817,14818],{},"万事万物都皆为对象","，对象上有其属性和行为",[24,14821,14822],{},[469,14823,14824],{},"例如：",[24,14826,14827],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[24,14829,14830],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[24,14832,14833],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14835,14837],{"id":14836},"_81封装","8.1封装",[48,14839,14841],{"id":14840},"_811封装的意义","8.1.1封装的意义",[24,14843,14844],{},"封装是C++面向对象三大特性之一",[24,14846,14847],{},"封装的意义：",[67,14849,14850,14853],{},[70,14851,14852],{},"将属性和行为作为一个整体，表现生活中的事物",[70,14854,14855],{},"将属性和行为加以权限控制",[24,14857,14858],{},[469,14859,14860],{},"封装意义一：",[24,14862,14863],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[24,14865,14866,13986,14868],{},[469,14867,5372],{},[94,14869,14870],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[138,14872,14873],{},[70,14874,14875],{},"**示例1：**设计一个圆类，求圆的周长",[87,14877,14879],{"className":310,"code":14878,"language":312,"meta":92,"style":92},"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",[94,14880,14881,14889,14893,14898,14903,14908,14913,14920,14925,14935,14939,14957,14961,14965,14973,14977,14982,14987,14992,14997,15008,15031],{"__ignoreMap":92},[97,14882,14883,14886],{"class":99,"line":100},[97,14884,14885],{"class":319},"class",[97,14887,14888],{"class":111}," Circle\n",[97,14890,14891],{"class":99,"line":195},[97,14892,1738],{"class":103},[97,14894,14895],{"class":99,"line":241},[97,14896,14897],{"class":191},"    \u002F\u002F访问权限\n",[97,14899,14900],{"class":99,"line":1387},[97,14901,14902],{"class":191},"    \u002F\u002F公共权限\n",[97,14904,14905],{"class":99,"line":1393},[97,14906,14907],{"class":319},"public:\n",[97,14909,14910],{"class":99,"line":1407},[97,14911,14912],{"class":191},"    \u002F\u002F属性\n",[97,14914,14915,14917],{"class":99,"line":1413},[97,14916,2176],{"class":319},[97,14918,14919],{"class":103}," m_r;\n",[97,14921,14922],{"class":99,"line":1504},[97,14923,14924],{"class":191},"    \u002F\u002F行为\n",[97,14926,14927,14930,14933],{"class":99,"line":1510},[97,14928,14929],{"class":319},"    double",[97,14931,14932],{"class":111}," calculateZC",[97,14934,2167],{"class":103},[97,14936,14937],{"class":99,"line":1522},[97,14938,2221],{"class":103},[97,14940,14941,14944,14947,14949,14952,14954],{"class":99,"line":1804},[97,14942,14943],{"class":319},"        return",[97,14945,14946],{"class":370}," 2",[97,14948,775],{"class":319},[97,14950,14951],{"class":103},"PI",[97,14953,775],{"class":319},[97,14955,14956],{"class":103},"m_r;\n",[97,14958,14959],{"class":99,"line":1809},[97,14960,2378],{"class":103},[97,14962,14963],{"class":99,"line":1815},[97,14964,4186],{"class":103},[97,14966,14967,14969,14971],{"class":99,"line":1820},[97,14968,326],{"class":319},[97,14970,2164],{"class":111},[97,14972,2167],{"class":103},[97,14974,14975],{"class":99,"line":1834},[97,14976,1738],{"class":103},[97,14978,14979],{"class":99,"line":1839},[97,14980,14981],{"class":191},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[97,14983,14984],{"class":99,"line":1845},[97,14985,14986],{"class":191},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[97,14988,14989],{"class":99,"line":1866},[97,14990,14991],{"class":103},"    Circle c1;\n",[97,14993,14994],{"class":99,"line":1871},[97,14995,14996],{"class":191},"    \u002F\u002F给圆对象 的属性进行赋值\n",[97,14998,14999,15002,15004,15006],{"class":99,"line":1885},[97,15000,15001],{"class":103},"    c1.m_r",[97,15003,115],{"class":319},[97,15005,766],{"class":370},[97,15007,1483],{"class":103},[97,15009,15010,15012,15014,15017,15019,15022,15025,15027,15029],{"class":99,"line":1890},[97,15011,1743],{"class":103},[97,15013,1362],{"class":319},[97,15015,15016],{"class":118},"\"圆的周长\"",[97,15018,1362],{"class":319},[97,15020,15021],{"class":103},"c1.",[97,15023,15024],{"class":111},"calculateZC",[97,15026,2618],{"class":103},[97,15028,1362],{"class":319},[97,15030,1384],{"class":103},[97,15032,15033],{"class":99,"line":1919},[97,15034,1757],{"class":103},[24,15036,15037],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[87,15039,15041],{"className":310,"code":15040,"language":312,"meta":92,"style":92},"#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",[94,15042,15043,15049,15059,15065,15071,15075,15079,15084,15091,15096,15113,15117,15127,15131,15136,15152,15156,15166,15170,15175,15183,15187,15219,15223,15227,15235,15239,15244,15249,15263,15277,15286],{"__ignoreMap":92},[97,15044,15045,15047],{"class":99,"line":100},[97,15046,2141],{"class":319},[97,15048,2144],{"class":118},[97,15050,15051,15053,15055,15057],{"class":99,"line":195},[97,15052,2149],{"class":319},[97,15054,2152],{"class":319},[97,15056,2155],{"class":111},[97,15058,1483],{"class":103},[97,15060,15061,15063],{"class":99,"line":241},[97,15062,2141],{"class":319},[97,15064,7940],{"class":118},[97,15066,15067,15069],{"class":99,"line":1387},[97,15068,14885],{"class":319},[97,15070,7953],{"class":111},[97,15072,15073],{"class":99,"line":1393},[97,15074,1738],{"class":103},[97,15076,15077],{"class":99,"line":1407},[97,15078,14907],{"class":319},[97,15080,15081],{"class":99,"line":1413},[97,15082,15083],{"class":103},"    string m_name;\n",[97,15085,15086,15088],{"class":99,"line":1504},[97,15087,2176],{"class":319},[97,15089,15090],{"class":103}," m_id;\n",[97,15092,15093],{"class":99,"line":1510},[97,15094,15095],{"class":191},"    \u002F\u002F赋值姓名\n",[97,15097,15098,15101,15104,15106,15109,15111],{"class":99,"line":1522},[97,15099,15100],{"class":319},"    void",[97,15102,15103],{"class":111}," setName",[97,15105,323],{"class":103},[97,15107,15108],{"class":111},"string",[97,15110,112],{"class":5407},[97,15112,329],{"class":103},[97,15114,15115],{"class":99,"line":1804},[97,15116,2221],{"class":103},[97,15118,15119,15122,15124],{"class":99,"line":1809},[97,15120,15121],{"class":103},"        m_name",[97,15123,115],{"class":319},[97,15125,15126],{"class":103},"name;\n",[97,15128,15129],{"class":99,"line":1815},[97,15130,2378],{"class":103},[97,15132,15133],{"class":99,"line":1820},[97,15134,15135],{"class":191},"    \u002F\u002F赋值学号\n",[97,15137,15138,15140,15143,15145,15147,15150],{"class":99,"line":1834},[97,15139,15100],{"class":319},[97,15141,15142],{"class":111}," setId",[97,15144,323],{"class":103},[97,15146,326],{"class":319},[97,15148,15149],{"class":5407}," id",[97,15151,329],{"class":103},[97,15153,15154],{"class":99,"line":1839},[97,15155,2221],{"class":103},[97,15157,15158,15161,15163],{"class":99,"line":1845},[97,15159,15160],{"class":103},"        m_id",[97,15162,115],{"class":319},[97,15164,15165],{"class":103},"id;\n",[97,15167,15168],{"class":99,"line":1866},[97,15169,2378],{"class":103},[97,15171,15172],{"class":99,"line":1871},[97,15173,15174],{"class":191},"    \u002F\u002F打印学生信息\n",[97,15176,15177,15179,15181],{"class":99,"line":1885},[97,15178,15100],{"class":319},[97,15180,9806],{"class":111},[97,15182,2167],{"class":103},[97,15184,15185],{"class":99,"line":1890},[97,15186,2221],{"class":103},[97,15188,15189,15191,15193,15196,15198,15201,15203,15205,15207,15210,15212,15215,15217],{"class":99,"line":1919},[97,15190,3642],{"class":103},[97,15192,1362],{"class":319},[97,15194,15195],{"class":118},"\"姓名：\"",[97,15197,1362],{"class":319},[97,15199,15200],{"class":103},"m_name",[97,15202,1362],{"class":319},[97,15204,4550],{"class":118},[97,15206,1362],{"class":319},[97,15208,15209],{"class":118},"\"学号：\"",[97,15211,1362],{"class":319},[97,15213,15214],{"class":103},"m_id",[97,15216,1362],{"class":319},[97,15218,1384],{"class":103},[97,15220,15221],{"class":99,"line":1924},[97,15222,2378],{"class":103},[97,15224,15225],{"class":99,"line":1941},[97,15226,4186],{"class":103},[97,15228,15229,15231,15233],{"class":99,"line":1946},[97,15230,326],{"class":319},[97,15232,2164],{"class":111},[97,15234,2167],{"class":103},[97,15236,15237],{"class":99,"line":1951},[97,15238,1738],{"class":103},[97,15240,15241],{"class":99,"line":1956},[97,15242,15243],{"class":191},"    \u002F\u002F实例化\n",[97,15245,15246],{"class":99,"line":1970},[97,15247,15248],{"class":103},"    Student s1;\n",[97,15250,15251,15254,15257,15259,15261],{"class":99,"line":1975},[97,15252,15253],{"class":103},"    s1.",[97,15255,15256],{"class":111},"setName",[97,15258,323],{"class":103},[97,15260,8107],{"class":118},[97,15262,2910],{"class":103},[97,15264,15265,15267,15270,15272,15275],{"class":99,"line":2768},[97,15266,15253],{"class":103},[97,15268,15269],{"class":111},"setId",[97,15271,323],{"class":103},[97,15273,15274],{"class":370},"123456",[97,15276,2910],{"class":103},[97,15278,15279,15281,15284],{"class":99,"line":2782},[97,15280,15253],{"class":103},[97,15282,15283],{"class":111},"printInfo",[97,15285,5827],{"class":103},[97,15287,15288],{"class":99,"line":2790},[97,15289,1757],{"class":103},[24,15291,15292],{},"类中的属性和行为统称为成员",[24,15294,15295],{},"属性：成员属性(成员变量)",[24,15297,15298],{},"方法：成员函数(成员方法)",[24,15300,15301],{},[469,15302,15303],{},"封装意义二：",[24,15305,15306],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[24,15308,15309],{},"访问权限有三种：",[138,15311,15312,15315,15318],{},[70,15313,15314],{},"public        公共权限",[70,15316,15317],{},"protected 保护权限",[70,15319,15320],{},"private      私有权限",[24,15322,15323],{},[469,15324,15325],{},"示例：",[87,15327,15329],{"className":10132,"code":15328,"language":10134,"meta":92,"style":92},"\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",[94,15330,15331,15336,15341,15346,15351,15355,15362,15366,15371,15375,15380,15384,15389,15394,15399,15403,15408,15413,15420,15424,15428,15436,15440,15451,15463,15475,15479,15483,15487,15495,15499,15504,15516,15524,15532,15536,15546,15550,15558],{"__ignoreMap":92},[97,15332,15333],{"class":99,"line":100},[97,15334,15335],{"class":191},"\u002F\u002F三种权限\n",[97,15337,15338],{"class":99,"line":195},[97,15339,15340],{"class":191},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[97,15342,15343],{"class":99,"line":241},[97,15344,15345],{"class":191},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[97,15347,15348],{"class":99,"line":1387},[97,15349,15350],{"class":191},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[97,15352,15353],{"class":99,"line":1393},[97,15354,2591],{"emptyLinePlaceholder":249},[97,15356,15357,15359],{"class":99,"line":1407},[97,15358,14885],{"class":319},[97,15360,15361],{"class":111}," Person\n",[97,15363,15364],{"class":99,"line":1413},[97,15365,1738],{"class":103},[97,15367,15368],{"class":99,"line":1504},[97,15369,15370],{"class":191},"    \u002F\u002F姓名  公共权限\n",[97,15372,15373],{"class":99,"line":1510},[97,15374,14907],{"class":319},[97,15376,15377],{"class":99,"line":1522},[97,15378,15379],{"class":103},"    string m_Name;\n",[97,15381,15382],{"class":99,"line":1804},[97,15383,2591],{"emptyLinePlaceholder":249},[97,15385,15386],{"class":99,"line":1809},[97,15387,15388],{"class":191},"    \u002F\u002F汽车  保护权限\n",[97,15390,15391],{"class":99,"line":1815},[97,15392,15393],{"class":319},"protected:\n",[97,15395,15396],{"class":99,"line":1820},[97,15397,15398],{"class":103},"    string m_Car;\n",[97,15400,15401],{"class":99,"line":1834},[97,15402,2591],{"emptyLinePlaceholder":249},[97,15404,15405],{"class":99,"line":1839},[97,15406,15407],{"class":191},"    \u002F\u002F银行卡密码  私有权限\n",[97,15409,15410],{"class":99,"line":1845},[97,15411,15412],{"class":319},"private:\n",[97,15414,15415,15417],{"class":99,"line":1866},[97,15416,2176],{"class":319},[97,15418,15419],{"class":103}," m_Password;\n",[97,15421,15422],{"class":99,"line":1871},[97,15423,2591],{"emptyLinePlaceholder":249},[97,15425,15426],{"class":99,"line":1885},[97,15427,14907],{"class":319},[97,15429,15430,15432,15434],{"class":99,"line":1890},[97,15431,15100],{"class":319},[97,15433,11576],{"class":111},[97,15435,2167],{"class":103},[97,15437,15438],{"class":99,"line":1919},[97,15439,2221],{"class":103},[97,15441,15442,15445,15447,15449],{"class":99,"line":1924},[97,15443,15444],{"class":103},"        m_Name ",[97,15446,115],{"class":319},[97,15448,9129],{"class":118},[97,15450,1483],{"class":103},[97,15452,15453,15456,15458,15461],{"class":99,"line":1941},[97,15454,15455],{"class":103},"        m_Car ",[97,15457,115],{"class":319},[97,15459,15460],{"class":118}," \"拖拉机\"",[97,15462,1483],{"class":103},[97,15464,15465,15468,15470,15473],{"class":99,"line":1946},[97,15466,15467],{"class":103},"        m_Password ",[97,15469,115],{"class":319},[97,15471,15472],{"class":370}," 123456",[97,15474,1483],{"class":103},[97,15476,15477],{"class":99,"line":1951},[97,15478,2378],{"class":103},[97,15480,15481],{"class":99,"line":1956},[97,15482,4186],{"class":103},[97,15484,15485],{"class":99,"line":1970},[97,15486,2591],{"emptyLinePlaceholder":249},[97,15488,15489,15491,15493],{"class":99,"line":1975},[97,15490,326],{"class":319},[97,15492,2164],{"class":111},[97,15494,11044],{"class":103},[97,15496,15497],{"class":99,"line":2768},[97,15498,2591],{"emptyLinePlaceholder":249},[97,15500,15501],{"class":99,"line":2782},[97,15502,15503],{"class":103},"    Person p;\n",[97,15505,15506,15509,15511,15514],{"class":99,"line":2790},[97,15507,15508],{"class":103},"    p.m_Name ",[97,15510,115],{"class":319},[97,15512,15513],{"class":118}," \"李四\"",[97,15515,1483],{"class":103},[97,15517,15518,15521],{"class":99,"line":2795},[97,15519,15520],{"class":191},"    \u002F\u002Fp.m_Car = \"奔驰\";",[97,15522,15523],{"class":191},"  \u002F\u002F保护权限类外访问不到\n",[97,15525,15526,15529],{"class":99,"line":2801},[97,15527,15528],{"class":191},"    \u002F\u002Fp.m_Password = 123;",[97,15530,15531],{"class":191}," \u002F\u002F私有权限类外访问不到\n",[97,15533,15534],{"class":99,"line":2807},[97,15535,2591],{"emptyLinePlaceholder":249},[97,15537,15538,15540,15542,15544],{"class":99,"line":2812},[97,15539,2494],{"class":111},[97,15541,323],{"class":103},[97,15543,2499],{"class":118},[97,15545,2910],{"class":103},[97,15547,15548],{"class":99,"line":8139},[97,15549,2591],{"emptyLinePlaceholder":249},[97,15551,15552,15554,15556],{"class":99,"line":8163},[97,15553,4281],{"class":319},[97,15555,4284],{"class":370},[97,15557,1483],{"class":103},[97,15559,15560],{"class":99,"line":8168},[97,15561,1757],{"class":103},[48,15563,15565],{"id":15564},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[24,15567,15568,15569,15572,15573],{},"在C++中 struct和class唯一的",[469,15570,15571],{},"区别","就在于 ",[469,15574,15575],{},"默认的访问权限不同",[24,15577,15578],{},"区别：",[67,15580,15581,15584],{},[70,15582,15583],{},"struct 默认权限为公共",[70,15585,15586],{},"class   默认权限为私有",[87,15588,15590],{"className":10132,"code":15589,"language":10134,"meta":92,"style":92},"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",[94,15591,15592,15599,15603,15613,15617,15621,15628,15632,15642,15646,15650,15658,15662,15667,15681,15685,15690,15704,15708,15718,15722,15730],{"__ignoreMap":92},[97,15593,15594,15596],{"class":99,"line":100},[97,15595,14885],{"class":319},[97,15597,15598],{"class":111}," C1\n",[97,15600,15601],{"class":99,"line":195},[97,15602,1738],{"class":103},[97,15604,15605,15607,15610],{"class":99,"line":241},[97,15606,2176],{"class":319},[97,15608,15609],{"class":103},"  m_A;",[97,15611,15612],{"class":191}," \u002F\u002F默认是私有权限\n",[97,15614,15615],{"class":99,"line":1387},[97,15616,4186],{"class":103},[97,15618,15619],{"class":99,"line":1393},[97,15620,2591],{"emptyLinePlaceholder":249},[97,15622,15623,15625],{"class":99,"line":1407},[97,15624,7950],{"class":319},[97,15626,15627],{"class":111}," C2\n",[97,15629,15630],{"class":99,"line":1413},[97,15631,1738],{"class":103},[97,15633,15634,15636,15639],{"class":99,"line":1504},[97,15635,2176],{"class":319},[97,15637,15638],{"class":103}," m_A;",[97,15640,15641],{"class":191},"  \u002F\u002F默认是公共权限\n",[97,15643,15644],{"class":99,"line":1510},[97,15645,4186],{"class":103},[97,15647,15648],{"class":99,"line":1522},[97,15649,2591],{"emptyLinePlaceholder":249},[97,15651,15652,15654,15656],{"class":99,"line":1804},[97,15653,326],{"class":319},[97,15655,2164],{"class":111},[97,15657,11044],{"class":103},[97,15659,15660],{"class":99,"line":1809},[97,15661,2591],{"emptyLinePlaceholder":249},[97,15663,15664],{"class":99,"line":1815},[97,15665,15666],{"class":103},"    C1 c1;\n",[97,15668,15669,15672,15674,15676,15678],{"class":99,"line":1820},[97,15670,15671],{"class":103},"    c1.m_A ",[97,15673,115],{"class":319},[97,15675,2229],{"class":370},[97,15677,377],{"class":103},[97,15679,15680],{"class":191}," \u002F\u002F错误，访问权限是私有\n",[97,15682,15683],{"class":99,"line":1834},[97,15684,2591],{"emptyLinePlaceholder":249},[97,15686,15687],{"class":99,"line":1839},[97,15688,15689],{"class":103},"    C2 c2;\n",[97,15691,15692,15695,15697,15699,15701],{"class":99,"line":1845},[97,15693,15694],{"class":103},"    c2.m_A ",[97,15696,115],{"class":319},[97,15698,2229],{"class":370},[97,15700,377],{"class":103},[97,15702,15703],{"class":191}," \u002F\u002F正确，访问权限是公共\n",[97,15705,15706],{"class":99,"line":1866},[97,15707,2591],{"emptyLinePlaceholder":249},[97,15709,15710,15712,15714,15716],{"class":99,"line":1871},[97,15711,2494],{"class":111},[97,15713,323],{"class":103},[97,15715,2499],{"class":118},[97,15717,2910],{"class":103},[97,15719,15720],{"class":99,"line":1885},[97,15721,2591],{"emptyLinePlaceholder":249},[97,15723,15724,15726,15728],{"class":99,"line":1890},[97,15725,4281],{"class":319},[97,15727,4284],{"class":370},[97,15729,1483],{"class":103},[97,15731,15732],{"class":99,"line":1919},[97,15733,1757],{"class":103},[48,15735,15737],{"id":15736},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[24,15739,15740],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[24,15742,15743],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[24,15745,15746],{},[469,15747,15325],{},[87,15749,15751],{"className":10132,"code":15750,"language":10134,"meta":92,"style":92},"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",[94,15752,15753,15763,15767,15771,15776,15790,15799,15803,15813,15817,15824,15828,15832,15836,15841,15850,15857,15861,15866,15882,15905,15918,15925,15929,15938,15942,15946,15951,15967,15977,15981,15985,15989,15997,16001,16011,16015,16023,16027,16031,16039,16043,16047,16052,16065,16088,16092,16097,16110,16132,16136,16141,16155,16163,16167,16177,16181,16189],{"__ignoreMap":92},[97,15754,15755,15757,15760],{"class":99,"line":100},[97,15756,14885],{"class":319},[97,15758,15759],{"class":111}," Person",[97,15761,15762],{"class":103}," {\n",[97,15764,15765],{"class":99,"line":195},[97,15766,14907],{"class":319},[97,15768,15769],{"class":99,"line":241},[97,15770,2591],{"emptyLinePlaceholder":249},[97,15772,15773],{"class":99,"line":1387},[97,15774,15775],{"class":191},"    \u002F\u002F姓名设置可读可写\n",[97,15777,15778,15780,15782,15784,15786,15788],{"class":99,"line":1393},[97,15779,15100],{"class":319},[97,15781,15103],{"class":111},[97,15783,323],{"class":103},[97,15785,15108],{"class":111},[97,15787,112],{"class":5407},[97,15789,12633],{"class":103},[97,15791,15792,15794,15796],{"class":99,"line":1407},[97,15793,15444],{"class":103},[97,15795,115],{"class":319},[97,15797,15798],{"class":103}," name;\n",[97,15800,15801],{"class":99,"line":1413},[97,15802,2378],{"class":103},[97,15804,15805,15808,15811],{"class":99,"line":1504},[97,15806,15807],{"class":111},"    string",[97,15809,15810],{"class":111}," getName",[97,15812,2167],{"class":103},[97,15814,15815],{"class":99,"line":1510},[97,15816,2221],{"class":103},[97,15818,15819,15821],{"class":99,"line":1522},[97,15820,14943],{"class":319},[97,15822,15823],{"class":103}," m_Name;\n",[97,15825,15826],{"class":99,"line":1804},[97,15827,2378],{"class":103},[97,15829,15830],{"class":99,"line":1809},[97,15831,2591],{"emptyLinePlaceholder":249},[97,15833,15834],{"class":99,"line":1815},[97,15835,2591],{"emptyLinePlaceholder":249},[97,15837,15838],{"class":99,"line":1820},[97,15839,15840],{"class":191},"    \u002F\u002F获取年龄 \n",[97,15842,15843,15845,15848],{"class":99,"line":1834},[97,15844,2176],{"class":319},[97,15846,15847],{"class":111}," getAge",[97,15849,11044],{"class":103},[97,15851,15852,15854],{"class":99,"line":1839},[97,15853,14943],{"class":319},[97,15855,15856],{"class":103}," m_Age;\n",[97,15858,15859],{"class":99,"line":1845},[97,15860,2378],{"class":103},[97,15862,15863],{"class":99,"line":1866},[97,15864,15865],{"class":191},"    \u002F\u002F设置年龄\n",[97,15867,15868,15870,15873,15875,15877,15880],{"class":99,"line":1871},[97,15869,15100],{"class":319},[97,15871,15872],{"class":111}," setAge",[97,15874,323],{"class":103},[97,15876,326],{"class":319},[97,15878,15879],{"class":5407}," age",[97,15881,12633],{"class":103},[97,15883,15884,15886,15889,15891,15893,15895,15898,15900,15903],{"class":99,"line":1885},[97,15885,2688],{"class":319},[97,15887,15888],{"class":103}," (age ",[97,15890,104],{"class":319},[97,15892,4284],{"class":370},[97,15894,3446],{"class":319},[97,15896,15897],{"class":103}," age ",[97,15899,1279],{"class":319},[97,15901,15902],{"class":370}," 150",[97,15904,12633],{"class":103},[97,15906,15907,15909,15911,15914,15916],{"class":99,"line":1890},[97,15908,9910],{"class":103},[97,15910,1362],{"class":319},[97,15912,15913],{"class":118}," \"你个老妖精!\"",[97,15915,1637],{"class":319},[97,15917,9031],{"class":103},[97,15919,15920,15923],{"class":99,"line":1919},[97,15921,15922],{"class":319},"            return",[97,15924,1483],{"class":103},[97,15926,15927],{"class":99,"line":1924},[97,15928,2720],{"class":103},[97,15930,15931,15934,15936],{"class":99,"line":1941},[97,15932,15933],{"class":103},"        m_Age ",[97,15935,115],{"class":319},[97,15937,7988],{"class":103},[97,15939,15940],{"class":99,"line":1946},[97,15941,2378],{"class":103},[97,15943,15944],{"class":99,"line":1951},[97,15945,2591],{"emptyLinePlaceholder":249},[97,15947,15948],{"class":99,"line":1956},[97,15949,15950],{"class":191},"    \u002F\u002F情人设置为只写\n",[97,15952,15953,15955,15958,15960,15962,15965],{"class":99,"line":1970},[97,15954,15100],{"class":319},[97,15956,15957],{"class":111}," setLover",[97,15959,323],{"class":103},[97,15961,15108],{"class":111},[97,15963,15964],{"class":5407}," lover",[97,15966,12633],{"class":103},[97,15968,15969,15972,15974],{"class":99,"line":1975},[97,15970,15971],{"class":103},"        m_Lover ",[97,15973,115],{"class":319},[97,15975,15976],{"class":103}," lover;\n",[97,15978,15979],{"class":99,"line":2768},[97,15980,2378],{"class":103},[97,15982,15983],{"class":99,"line":2782},[97,15984,2591],{"emptyLinePlaceholder":249},[97,15986,15987],{"class":99,"line":2790},[97,15988,15412],{"class":319},[97,15990,15991,15994],{"class":99,"line":2795},[97,15992,15993],{"class":103},"    string m_Name;",[97,15995,15996],{"class":191}," \u002F\u002F可读可写  姓名\n",[97,15998,15999],{"class":99,"line":2801},[97,16000,13401],{"class":103},[97,16002,16003,16005,16008],{"class":99,"line":2807},[97,16004,2176],{"class":319},[97,16006,16007],{"class":103}," m_Age;",[97,16009,16010],{"class":191}," \u002F\u002F只读  年龄\n",[97,16012,16013],{"class":99,"line":2812},[97,16014,2591],{"emptyLinePlaceholder":249},[97,16016,16017,16020],{"class":99,"line":8139},[97,16018,16019],{"class":103},"    string m_Lover;",[97,16021,16022],{"class":191}," \u002F\u002F只写  情人\n",[97,16024,16025],{"class":99,"line":8163},[97,16026,4186],{"class":103},[97,16028,16029],{"class":99,"line":8168},[97,16030,2591],{"emptyLinePlaceholder":249},[97,16032,16033,16035,16037],{"class":99,"line":8174},[97,16034,326],{"class":319},[97,16036,2164],{"class":111},[97,16038,11044],{"class":103},[97,16040,16041],{"class":99,"line":8201},[97,16042,2591],{"emptyLinePlaceholder":249},[97,16044,16045],{"class":99,"line":8206},[97,16046,15503],{"class":103},[97,16048,16049],{"class":99,"line":8212},[97,16050,16051],{"class":191},"    \u002F\u002F姓名设置\n",[97,16053,16054,16057,16059,16061,16063],{"class":99,"line":8224},[97,16055,16056],{"class":103},"    p.",[97,16058,15256],{"class":111},[97,16060,323],{"class":103},[97,16062,8107],{"class":118},[97,16064,2910],{"class":103},[97,16066,16067,16069,16071,16074,16076,16079,16082,16084,16086],{"class":99,"line":8236},[97,16068,6720],{"class":103},[97,16070,1362],{"class":319},[97,16072,16073],{"class":118}," \"姓名： \"",[97,16075,1637],{"class":319},[97,16077,16078],{"class":103}," p.",[97,16080,16081],{"class":111},"getName",[97,16083,13241],{"class":103},[97,16085,1362],{"class":319},[97,16087,9031],{"class":103},[97,16089,16090],{"class":99,"line":8248},[97,16091,2591],{"emptyLinePlaceholder":249},[97,16093,16094],{"class":99,"line":9907},[97,16095,16096],{"class":191},"    \u002F\u002F年龄设置\n",[97,16098,16099,16101,16104,16106,16108],{"class":99,"line":9932},[97,16100,16056],{"class":103},[97,16102,16103],{"class":111},"setAge",[97,16105,323],{"class":103},[97,16107,976],{"class":370},[97,16109,2910],{"class":103},[97,16111,16112,16114,16116,16119,16121,16123,16126,16128,16130],{"class":99,"line":9955},[97,16113,6720],{"class":103},[97,16115,1362],{"class":319},[97,16117,16118],{"class":118}," \"年龄： \"",[97,16120,1637],{"class":319},[97,16122,16078],{"class":103},[97,16124,16125],{"class":111},"getAge",[97,16127,13241],{"class":103},[97,16129,1362],{"class":319},[97,16131,9031],{"class":103},[97,16133,16134],{"class":99,"line":9979},[97,16135,2591],{"emptyLinePlaceholder":249},[97,16137,16138],{"class":99,"line":9984},[97,16139,16140],{"class":191},"    \u002F\u002F情人设置\n",[97,16142,16143,16145,16148,16150,16153],{"class":99,"line":9989},[97,16144,16056],{"class":103},[97,16146,16147],{"class":111},"setLover",[97,16149,323],{"class":103},[97,16151,16152],{"class":118},"\"苍井\"",[97,16154,2910],{"class":103},[97,16156,16157,16160],{"class":99,"line":9994},[97,16158,16159],{"class":191},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[97,16161,16162],{"class":191},"  \u002F\u002F只写属性，不可以读取\n",[97,16164,16165],{"class":99,"line":10003},[97,16166,2591],{"emptyLinePlaceholder":249},[97,16168,16169,16171,16173,16175],{"class":99,"line":10008},[97,16170,2494],{"class":111},[97,16172,323],{"class":103},[97,16174,2499],{"class":118},[97,16176,2910],{"class":103},[97,16178,16179],{"class":99,"line":10014},[97,16180,2591],{"emptyLinePlaceholder":249},[97,16182,16183,16185,16187],{"class":99,"line":10035},[97,16184,4281],{"class":319},[97,16186,4284],{"class":370},[97,16188,1483],{"class":103},[97,16190,16191],{"class":99,"line":10041},[97,16192,1757],{"class":103},[48,16194,16196],{"id":16195},"_814封装案例","8.1.4封装案例",[138,16198,16199],{},[70,16200,16201,16204],{},[469,16202,16203],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[67,16206,16207,16210],{},[70,16208,16209],{},"求出立方体的面积和体积",[70,16211,16212],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[87,16214,16216],{"className":310,"code":16215,"language":312,"meta":92,"style":92},"#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",[94,16217,16218,16224,16234,16241,16245,16249,16254,16284,16288,16298,16308,16318,16322,16331,16335,16371,16375,16384,16388,16404,16408,16413,16422,16426,16433,16437,16446,16450,16457,16461,16470,16474,16481,16485,16490,16507,16511,16557,16561,16570,16574,16578,16582,16591,16595,16599,16604,16608,16614,16620,16626,16630,16634,16639,16661,16665,16719,16723,16731,16735,16740,16745,16758,16765,16781,16792,16798,16821,16827,16850,16864,16884,16890,16901,16924,16946,16951,16957,16971,16984,16989,17003,17008,17014,17019,17033,17038,17043,17057,17069,17074,17087,17092,17097,17102,17115,17120],{"__ignoreMap":92},[97,16219,16220,16222],{"class":99,"line":100},[97,16221,2141],{"class":319},[97,16223,2144],{"class":118},[97,16225,16226,16228,16230,16232],{"class":99,"line":195},[97,16227,2149],{"class":319},[97,16229,2152],{"class":319},[97,16231,2155],{"class":111},[97,16233,1483],{"class":103},[97,16235,16236,16238],{"class":99,"line":241},[97,16237,14885],{"class":319},[97,16239,16240],{"class":111}," Cube\n",[97,16242,16243],{"class":99,"line":1387},[97,16244,1738],{"class":103},[97,16246,16247],{"class":99,"line":1393},[97,16248,14907],{"class":319},[97,16250,16251],{"class":99,"line":1407},[97,16252,16253],{"class":191},"    \u002F\u002F输入长宽高\n",[97,16255,16256,16258,16261,16263,16265,16268,16270,16272,16275,16277,16279,16282],{"class":99,"line":1413},[97,16257,15100],{"class":319},[97,16259,16260],{"class":111}," setLwh",[97,16262,323],{"class":103},[97,16264,326],{"class":319},[97,16266,16267],{"class":5407}," l",[97,16269,698],{"class":103},[97,16271,326],{"class":319},[97,16273,16274],{"class":5407}," w",[97,16276,698],{"class":103},[97,16278,326],{"class":319},[97,16280,16281],{"class":5407}," h",[97,16283,329],{"class":103},[97,16285,16286],{"class":99,"line":1504},[97,16287,2221],{"class":103},[97,16289,16290,16293,16295],{"class":99,"line":1510},[97,16291,16292],{"class":103},"        m_L",[97,16294,115],{"class":319},[97,16296,16297],{"class":103},"l;\n",[97,16299,16300,16303,16305],{"class":99,"line":1522},[97,16301,16302],{"class":103},"        m_W",[97,16304,115],{"class":319},[97,16306,16307],{"class":103},"w;\n",[97,16309,16310,16313,16315],{"class":99,"line":1804},[97,16311,16312],{"class":103},"        m_H",[97,16314,115],{"class":319},[97,16316,16317],{"class":103},"h;\n",[97,16319,16320],{"class":99,"line":1809},[97,16321,2378],{"class":103},[97,16323,16324,16326,16329],{"class":99,"line":1815},[97,16325,2176],{"class":319},[97,16327,16328],{"class":111}," mianji",[97,16330,2167],{"class":103},[97,16332,16333],{"class":99,"line":1820},[97,16334,2221],{"class":103},[97,16336,16337,16339,16341,16343,16346,16348,16351,16353,16356,16358,16361,16363,16366,16368],{"class":99,"line":1834},[97,16338,14943],{"class":319},[97,16340,14946],{"class":370},[97,16342,775],{"class":319},[97,16344,16345],{"class":103},"(m_L",[97,16347,775],{"class":319},[97,16349,16350],{"class":103},"m_W ",[97,16352,801],{"class":319},[97,16354,16355],{"class":103}," m_L",[97,16357,775],{"class":319},[97,16359,16360],{"class":103},"m_H ",[97,16362,801],{"class":319},[97,16364,16365],{"class":103}," m_W",[97,16367,775],{"class":319},[97,16369,16370],{"class":103},"m_H);\n",[97,16372,16373],{"class":99,"line":1839},[97,16374,2378],{"class":103},[97,16376,16377,16379,16382],{"class":99,"line":1845},[97,16378,2176],{"class":319},[97,16380,16381],{"class":111}," tiji",[97,16383,2167],{"class":103},[97,16385,16386],{"class":99,"line":1866},[97,16387,2221],{"class":103},[97,16389,16390,16392,16394,16396,16399,16401],{"class":99,"line":1871},[97,16391,14943],{"class":319},[97,16393,16355],{"class":103},[97,16395,775],{"class":319},[97,16397,16398],{"class":103},"m_W",[97,16400,775],{"class":319},[97,16402,16403],{"class":103},"m_H;\n",[97,16405,16406],{"class":99,"line":1885},[97,16407,2378],{"class":103},[97,16409,16410],{"class":99,"line":1890},[97,16411,16412],{"class":191},"    \u002F\u002F获取长宽高\n",[97,16414,16415,16417,16420],{"class":99,"line":1919},[97,16416,2176],{"class":319},[97,16418,16419],{"class":111}," getLength",[97,16421,2167],{"class":103},[97,16423,16424],{"class":99,"line":1924},[97,16425,2221],{"class":103},[97,16427,16428,16430],{"class":99,"line":1941},[97,16429,14943],{"class":319},[97,16431,16432],{"class":103}," m_L;\n",[97,16434,16435],{"class":99,"line":1946},[97,16436,2378],{"class":103},[97,16438,16439,16441,16444],{"class":99,"line":1951},[97,16440,2176],{"class":319},[97,16442,16443],{"class":111}," getWidth",[97,16445,2167],{"class":103},[97,16447,16448],{"class":99,"line":1956},[97,16449,2221],{"class":103},[97,16451,16452,16454],{"class":99,"line":1970},[97,16453,14943],{"class":319},[97,16455,16456],{"class":103}," m_W;\n",[97,16458,16459],{"class":99,"line":1975},[97,16460,2378],{"class":103},[97,16462,16463,16465,16468],{"class":99,"line":2768},[97,16464,2176],{"class":319},[97,16466,16467],{"class":111}," getHeight",[97,16469,2167],{"class":103},[97,16471,16472],{"class":99,"line":2782},[97,16473,2221],{"class":103},[97,16475,16476,16478],{"class":99,"line":2790},[97,16477,14943],{"class":319},[97,16479,16480],{"class":103}," m_H;\n",[97,16482,16483],{"class":99,"line":2795},[97,16484,2378],{"class":103},[97,16486,16487],{"class":99,"line":2801},[97,16488,16489],{"class":191},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[97,16491,16492,16495,16498,16500,16503,16505],{"class":99,"line":2807},[97,16493,16494],{"class":319},"    bool",[97,16496,16497],{"class":111}," isEqual",[97,16499,323],{"class":103},[97,16501,16502],{"class":111},"Cube",[97,16504,3040],{"class":5407},[97,16506,329],{"class":103},[97,16508,16509],{"class":99,"line":2812},[97,16510,2221],{"class":103},[97,16512,16513,16515,16518,16521,16523,16525,16528,16530,16533,16536,16538,16540,16543,16545,16547,16550,16552,16554],{"class":99,"line":8139},[97,16514,2688],{"class":319},[97,16516,16517],{"class":103}," (c.",[97,16519,16520],{"class":111},"getLength",[97,16522,13241],{"class":103},[97,16524,3140],{"class":319},[97,16526,16527],{"class":103}," m_L ",[97,16529,1907],{"class":319},[97,16531,16532],{"class":103}," c.",[97,16534,16535],{"class":111},"getWidth",[97,16537,13241],{"class":103},[97,16539,3140],{"class":319},[97,16541,16542],{"class":103}," m_W ",[97,16544,1907],{"class":319},[97,16546,16532],{"class":103},[97,16548,16549],{"class":111},"getHeight",[97,16551,13241],{"class":103},[97,16553,3140],{"class":319},[97,16555,16556],{"class":103}," m_H)\n",[97,16558,16559],{"class":99,"line":8163},[97,16560,2701],{"class":103},[97,16562,16563,16565,16568],{"class":99,"line":8168},[97,16564,15922],{"class":319},[97,16566,16567],{"class":370}," true",[97,16569,1483],{"class":103},[97,16571,16572],{"class":99,"line":8174},[97,16573,2720],{"class":103},[97,16575,16576],{"class":99,"line":8201},[97,16577,2761],{"class":319},[97,16579,16580],{"class":99,"line":8206},[97,16581,2701],{"class":103},[97,16583,16584,16586,16589],{"class":99,"line":8212},[97,16585,15922],{"class":319},[97,16587,16588],{"class":370}," false",[97,16590,1483],{"class":103},[97,16592,16593],{"class":99,"line":8224},[97,16594,2720],{"class":103},[97,16596,16597],{"class":99,"line":8236},[97,16598,2378],{"class":103},[97,16600,16601],{"class":99,"line":8248},[97,16602,16603],{"class":191},"    \u002F\u002F私有属性\n",[97,16605,16606],{"class":99,"line":9907},[97,16607,15412],{"class":319},[97,16609,16610,16612],{"class":99,"line":9932},[97,16611,2176],{"class":319},[97,16613,16432],{"class":103},[97,16615,16616,16618],{"class":99,"line":9955},[97,16617,2176],{"class":319},[97,16619,16456],{"class":103},[97,16621,16622,16624],{"class":99,"line":9979},[97,16623,2176],{"class":319},[97,16625,16480],{"class":103},[97,16627,16628],{"class":99,"line":9984},[97,16629,2591],{"emptyLinePlaceholder":249},[97,16631,16632],{"class":99,"line":9989},[97,16633,4186],{"class":103},[97,16635,16636],{"class":99,"line":9994},[97,16637,16638],{"class":191},"\u002F\u002F全局函数判断两个立方体是否相等\n",[97,16640,16641,16643,16645,16647,16649,16652,16654,16656,16659],{"class":99,"line":10003},[97,16642,1547],{"class":319},[97,16644,16497],{"class":111},[97,16646,323],{"class":103},[97,16648,16502],{"class":111},[97,16650,16651],{"class":5407}," c1",[97,16653,698],{"class":103},[97,16655,16502],{"class":111},[97,16657,16658],{"class":5407}," c2",[97,16660,329],{"class":103},[97,16662,16663],{"class":99,"line":10008},[97,16664,1738],{"class":103},[97,16666,16667,16669,16672,16674,16676,16678,16681,16683,16686,16688,16690,16692,16694,16696,16698,16700,16702,16704,16706,16708,16710,16712,16714,16716],{"class":99,"line":10014},[97,16668,4281],{"class":319},[97,16670,16671],{"class":103}," (c1.",[97,16673,16520],{"class":111},[97,16675,13241],{"class":103},[97,16677,3140],{"class":319},[97,16679,16680],{"class":103}," c2.",[97,16682,16520],{"class":111},[97,16684,16685],{"class":103},"()) ",[97,16687,1907],{"class":319},[97,16689,16671],{"class":103},[97,16691,16535],{"class":111},[97,16693,13241],{"class":103},[97,16695,3140],{"class":319},[97,16697,16680],{"class":103},[97,16699,16535],{"class":111},[97,16701,16685],{"class":103},[97,16703,1907],{"class":319},[97,16705,16671],{"class":103},[97,16707,16549],{"class":111},[97,16709,13241],{"class":103},[97,16711,3140],{"class":319},[97,16713,16680],{"class":103},[97,16715,16549],{"class":111},[97,16717,16718],{"class":103},"());\n",[97,16720,16721],{"class":99,"line":10035},[97,16722,1757],{"class":103},[97,16724,16725,16727,16729],{"class":99,"line":10041},[97,16726,326],{"class":319},[97,16728,2164],{"class":111},[97,16730,2167],{"class":103},[97,16732,16733],{"class":99,"line":10055},[97,16734,1738],{"class":103},[97,16736,16737],{"class":99,"line":10061},[97,16738,16739],{"class":103},"    Cube c1;\n",[97,16741,16742],{"class":99,"line":10088},[97,16743,16744],{"class":191},"    \u002F\u002F输入立方体的长宽高\n",[97,16746,16747,16749,16751,16754,16756],{"class":99,"line":10097},[97,16748,1743],{"class":103},[97,16750,1362],{"class":319},[97,16752,16753],{"class":118},"\"请输入第一个立方体的长、宽、高：\"",[97,16755,1362],{"class":319},[97,16757,1384],{"class":103},[97,16759,16760,16762],{"class":99,"line":10103},[97,16761,2176],{"class":319},[97,16763,16764],{"class":103}," l,w,h,l1,w1,h1;\n",[97,16766,16767,16769,16771,16773,16775,16777,16779],{"class":99,"line":10111},[97,16768,2203],{"class":103},[97,16770,1622],{"class":319},[97,16772,838],{"class":103},[97,16774,1622],{"class":319},[97,16776,1115],{"class":103},[97,16778,1622],{"class":319},[97,16780,16317],{"class":103},[97,16782,16783,16786,16789],{"class":99,"line":10116},[97,16784,16785],{"class":103},"    c1.",[97,16787,16788],{"class":111},"setLwh",[97,16790,16791],{"class":103},"(l,w,h);\n",[97,16793,16795],{"class":99,"line":16794},66,[97,16796,16797],{"class":191},"    \u002F\u002F面积\n",[97,16799,16801,16803,16805,16808,16810,16812,16815,16817,16819],{"class":99,"line":16800},67,[97,16802,1743],{"class":103},[97,16804,1362],{"class":319},[97,16806,16807],{"class":118},"\"立方体的表面积为：\"",[97,16809,1362],{"class":319},[97,16811,15021],{"class":103},[97,16813,16814],{"class":111},"mianji",[97,16816,2618],{"class":103},[97,16818,1362],{"class":319},[97,16820,1384],{"class":103},[97,16822,16824],{"class":99,"line":16823},68,[97,16825,16826],{"class":191},"    \u002F\u002F体积\n",[97,16828,16830,16832,16834,16837,16839,16841,16844,16846,16848],{"class":99,"line":16829},69,[97,16831,1743],{"class":103},[97,16833,1362],{"class":319},[97,16835,16836],{"class":118},"\"立方体的体积为：\"",[97,16838,1362],{"class":319},[97,16840,15021],{"class":103},[97,16842,16843],{"class":111},"tiji",[97,16845,2618],{"class":103},[97,16847,1362],{"class":319},[97,16849,1384],{"class":103},[97,16851,16853,16855,16857,16860,16862],{"class":99,"line":16852},70,[97,16854,1743],{"class":103},[97,16856,1362],{"class":319},[97,16858,16859],{"class":118},"\"请输入第二个立方体的长、宽、高：\"",[97,16861,1362],{"class":319},[97,16863,1384],{"class":103},[97,16865,16867,16869,16871,16874,16876,16879,16881],{"class":99,"line":16866},71,[97,16868,2203],{"class":103},[97,16870,1622],{"class":319},[97,16872,16873],{"class":103},"l1",[97,16875,1622],{"class":319},[97,16877,16878],{"class":103},"w1",[97,16880,1622],{"class":319},[97,16882,16883],{"class":103},"h1;\n",[97,16885,16887],{"class":99,"line":16886},72,[97,16888,16889],{"class":103},"    Cube c2;\n",[97,16891,16893,16896,16898],{"class":99,"line":16892},73,[97,16894,16895],{"class":103},"    c2.",[97,16897,16788],{"class":111},[97,16899,16900],{"class":103},"(l1,w1,h1);\n",[97,16902,16904,16906,16908,16911,16913,16916,16918,16920,16922],{"class":99,"line":16903},74,[97,16905,1743],{"class":103},[97,16907,1362],{"class":319},[97,16909,16910],{"class":118},"\"第二个立方体的表面积为：\"",[97,16912,1362],{"class":319},[97,16914,16915],{"class":103},"c2.",[97,16917,16814],{"class":111},[97,16919,2618],{"class":103},[97,16921,1362],{"class":319},[97,16923,1384],{"class":103},[97,16925,16927,16929,16931,16934,16936,16938,16940,16942,16944],{"class":99,"line":16926},75,[97,16928,1743],{"class":103},[97,16930,1362],{"class":319},[97,16932,16933],{"class":118},"\"第二个立方体的体积为：\"",[97,16935,1362],{"class":319},[97,16937,16915],{"class":103},[97,16939,16843],{"class":111},[97,16941,2618],{"class":103},[97,16943,1362],{"class":319},[97,16945,1384],{"class":103},[97,16947,16949],{"class":99,"line":16948},76,[97,16950,2591],{"emptyLinePlaceholder":249},[97,16952,16954],{"class":99,"line":16953},77,[97,16955,16956],{"class":191},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[97,16958,16960,16962,16964,16967,16969],{"class":99,"line":16959},78,[97,16961,1743],{"class":103},[97,16963,1362],{"class":319},[97,16965,16966],{"class":118},"\"内部函数判断结果：\"",[97,16968,1362],{"class":319},[97,16970,1384],{"class":103},[97,16972,16974,16976,16978,16981],{"class":99,"line":16973},79,[97,16975,3292],{"class":319},[97,16977,16671],{"class":103},[97,16979,16980],{"class":111},"isEqual",[97,16982,16983],{"class":103},"(c2))\n",[97,16985,16987],{"class":99,"line":16986},80,[97,16988,2221],{"class":103},[97,16990,16992,16994,16996,16999,17001],{"class":99,"line":16991},81,[97,16993,3642],{"class":103},[97,16995,1362],{"class":319},[97,16997,16998],{"class":118},"\"两个立方体相等\"",[97,17000,1362],{"class":319},[97,17002,1384],{"class":103},[97,17004,17006],{"class":99,"line":17005},82,[97,17007,2378],{"class":103},[97,17009,17011],{"class":99,"line":17010},83,[97,17012,17013],{"class":319},"    else\n",[97,17015,17017],{"class":99,"line":17016},84,[97,17018,2221],{"class":103},[97,17020,17022,17024,17026,17029,17031],{"class":99,"line":17021},85,[97,17023,3642],{"class":103},[97,17025,1362],{"class":319},[97,17027,17028],{"class":118},"\"两个立方体不相等\"",[97,17030,1362],{"class":319},[97,17032,1384],{"class":103},[97,17034,17036],{"class":99,"line":17035},86,[97,17037,2378],{"class":103},[97,17039,17041],{"class":99,"line":17040},87,[97,17042,2591],{"emptyLinePlaceholder":249},[97,17044,17046,17048,17050,17053,17055],{"class":99,"line":17045},88,[97,17047,1743],{"class":103},[97,17049,1362],{"class":319},[97,17051,17052],{"class":118},"\"全局函数判断结果：\"",[97,17054,1362],{"class":319},[97,17056,1384],{"class":103},[97,17058,17060,17062,17064,17066],{"class":99,"line":17059},89,[97,17061,3292],{"class":319},[97,17063,1850],{"class":103},[97,17065,16980],{"class":111},[97,17067,17068],{"class":103},"(c1, c2))\n",[97,17070,17072],{"class":99,"line":17071},90,[97,17073,2221],{"class":103},[97,17075,17077,17079,17081,17083,17085],{"class":99,"line":17076},91,[97,17078,3642],{"class":103},[97,17080,1362],{"class":319},[97,17082,16998],{"class":118},[97,17084,1362],{"class":319},[97,17086,1384],{"class":103},[97,17088,17090],{"class":99,"line":17089},92,[97,17091,2378],{"class":103},[97,17093,17095],{"class":99,"line":17094},93,[97,17096,17013],{"class":319},[97,17098,17100],{"class":99,"line":17099},94,[97,17101,2221],{"class":103},[97,17103,17105,17107,17109,17111,17113],{"class":99,"line":17104},95,[97,17106,3642],{"class":103},[97,17108,1362],{"class":319},[97,17110,17028],{"class":118},[97,17112,1362],{"class":319},[97,17114,1384],{"class":103},[97,17116,17118],{"class":99,"line":17117},96,[97,17119,2378],{"class":103},[97,17121,17123],{"class":99,"line":17122},97,[97,17124,1757],{"class":103},[138,17126,17127],{"start":195},[70,17128,17129],{},[469,17130,17131],{},"练习案例2：点和圆的关系",[67,17133,17134],{},[70,17135,17136],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[87,17138,17140],{"className":310,"code":17139,"language":312,"meta":92,"style":92},"#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",[94,17141,17142,17148,17158,17165,17172,17176,17180,17185,17219,17224,17240,17254,17258,17262,17269,17276,17280,17286,17290,17294,17298,17320,17343,17348,17362,17377,17381,17385,17391,17396,17401,17405,17431,17435,17465,17493,17521,17538,17542,17555,17559,17563,17567,17580,17584,17588,17596,17600,17604,17608,17613,17617,17628,17635,17644,17654,17665,17672,17685,17696,17706,17717,17724,17738,17743,17753,17761],{"__ignoreMap":92},[97,17143,17144,17146],{"class":99,"line":100},[97,17145,2141],{"class":319},[97,17147,2144],{"class":118},[97,17149,17150,17152,17154,17156],{"class":99,"line":195},[97,17151,2149],{"class":319},[97,17153,2152],{"class":319},[97,17155,2155],{"class":111},[97,17157,1483],{"class":103},[97,17159,17160,17162],{"class":99,"line":241},[97,17161,2141],{"class":319},[97,17163,17164],{"class":118},"\u003Ccmath>\n",[97,17166,17167,17169],{"class":99,"line":1387},[97,17168,14885],{"class":319},[97,17170,17171],{"class":111}," Point\n",[97,17173,17174],{"class":99,"line":1393},[97,17175,1738],{"class":103},[97,17177,17178],{"class":99,"line":1407},[97,17179,14907],{"class":319},[97,17181,17182],{"class":99,"line":1413},[97,17183,17184],{"class":191},"    \u002F\u002F赋值\n",[97,17186,17187,17189,17192,17194,17196,17199,17201,17203,17206,17209,17211,17214,17216],{"class":99,"line":1504},[97,17188,15100],{"class":319},[97,17190,17191],{"class":111}," setPoint",[97,17193,323],{"class":103},[97,17195,14228],{"class":319},[97,17197,17198],{"class":5407}," x",[97,17200,12626],{"class":103},[97,17202,14228],{"class":319},[97,17204,17205],{"class":5407}," y",[97,17207,17208],{"class":103},") { m_x ",[97,17210,115],{"class":319},[97,17212,17213],{"class":103}," x; m_y ",[97,17215,115],{"class":319},[97,17217,17218],{"class":103}," y; }\n",[97,17220,17221],{"class":99,"line":1510},[97,17222,17223],{"class":191},"    \u002F\u002F获取坐标\n",[97,17225,17226,17228,17231,17234,17237],{"class":99,"line":1522},[97,17227,14929],{"class":319},[97,17229,17230],{"class":111}," getX",[97,17232,17233],{"class":103},"() { ",[97,17235,17236],{"class":319},"return",[97,17238,17239],{"class":103}," m_x; }\n",[97,17241,17242,17244,17247,17249,17251],{"class":99,"line":1804},[97,17243,14929],{"class":319},[97,17245,17246],{"class":111}," getY",[97,17248,17233],{"class":103},[97,17250,17236],{"class":319},[97,17252,17253],{"class":103}," m_y; }\n",[97,17255,17256],{"class":99,"line":1809},[97,17257,2591],{"emptyLinePlaceholder":249},[97,17259,17260],{"class":99,"line":1815},[97,17261,15412],{"class":319},[97,17263,17264,17266],{"class":99,"line":1820},[97,17265,14929],{"class":319},[97,17267,17268],{"class":103}," m_x;\n",[97,17270,17271,17273],{"class":99,"line":1834},[97,17272,14929],{"class":319},[97,17274,17275],{"class":103}," m_y;\n",[97,17277,17278],{"class":99,"line":1839},[97,17279,4186],{"class":103},[97,17281,17282,17284],{"class":99,"line":1845},[97,17283,14885],{"class":319},[97,17285,14888],{"class":111},[97,17287,17288],{"class":99,"line":1866},[97,17289,1738],{"class":103},[97,17291,17292],{"class":99,"line":1871},[97,17293,14907],{"class":319},[97,17295,17296],{"class":99,"line":1885},[97,17297,17184],{"class":191},[97,17299,17300,17302,17305,17307,17309,17312,17315,17317],{"class":99,"line":1890},[97,17301,15100],{"class":319},[97,17303,17304],{"class":111}," setRadius",[97,17306,323],{"class":103},[97,17308,14228],{"class":319},[97,17310,17311],{"class":5407}," r",[97,17313,17314],{"class":103},") { m_r ",[97,17316,115],{"class":319},[97,17318,17319],{"class":103}," r; }\n",[97,17321,17322,17324,17327,17329,17332,17335,17338,17340],{"class":99,"line":1919},[97,17323,15100],{"class":319},[97,17325,17326],{"class":111}," setCenter",[97,17328,323],{"class":103},[97,17330,17331],{"class":111},"Point",[97,17333,17334],{"class":5407}," center",[97,17336,17337],{"class":103},") { m_center ",[97,17339,115],{"class":319},[97,17341,17342],{"class":103}," center; }\n",[97,17344,17345],{"class":99,"line":1924},[97,17346,17347],{"class":191},"    \u002F\u002F获取属性\n",[97,17349,17350,17352,17355,17357,17359],{"class":99,"line":1941},[97,17351,14929],{"class":319},[97,17353,17354],{"class":111}," getRadius",[97,17356,17233],{"class":103},[97,17358,17236],{"class":319},[97,17360,17361],{"class":103}," m_r; }\n",[97,17363,17364,17367,17370,17372,17374],{"class":99,"line":1946},[97,17365,17366],{"class":111},"    Point",[97,17368,17369],{"class":111}," getCenter",[97,17371,17233],{"class":103},[97,17373,17236],{"class":319},[97,17375,17376],{"class":103}," m_center; }\n",[97,17378,17379],{"class":99,"line":1951},[97,17380,2591],{"emptyLinePlaceholder":249},[97,17382,17383],{"class":99,"line":1956},[97,17384,15412],{"class":319},[97,17386,17387,17389],{"class":99,"line":1970},[97,17388,14929],{"class":319},[97,17390,14919],{"class":103},[97,17392,17393],{"class":99,"line":1975},[97,17394,17395],{"class":191},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[97,17397,17398],{"class":99,"line":2768},[97,17399,17400],{"class":103},"    Point m_center;\n",[97,17402,17403],{"class":99,"line":2782},[97,17404,4186],{"class":103},[97,17406,17407,17409,17412,17414,17417,17419,17421,17423,17425,17427,17429],{"class":99,"line":2790},[97,17408,5555],{"class":319},[97,17410,17411],{"class":111}," isInCircle",[97,17413,323],{"class":103},[97,17415,17416],{"class":111},"Circle",[97,17418,10775],{"class":319},[97,17420,608],{"class":5407},[97,17422,698],{"class":103},[97,17424,17331],{"class":111},[97,17426,10775],{"class":319},[97,17428,24],{"class":5407},[97,17430,329],{"class":103},[97,17432,17433],{"class":99,"line":2795},[97,17434,1738],{"class":103},[97,17436,17437,17439,17442,17444,17446,17449,17452,17455,17457,17459,17461,17463],{"class":99,"line":2801},[97,17438,14929],{"class":319},[97,17440,17441],{"class":103}," dx ",[97,17443,115],{"class":319},[97,17445,16532],{"class":103},[97,17447,17448],{"class":111},"getCenter",[97,17450,17451],{"class":103},"().",[97,17453,17454],{"class":111},"getX",[97,17456,13241],{"class":103},[97,17458,852],{"class":319},[97,17460,16078],{"class":103},[97,17462,17454],{"class":111},[97,17464,5827],{"class":103},[97,17466,17467,17469,17472,17474,17476,17478,17480,17483,17485,17487,17489,17491],{"class":99,"line":2807},[97,17468,14929],{"class":319},[97,17470,17471],{"class":103}," dy ",[97,17473,115],{"class":319},[97,17475,16532],{"class":103},[97,17477,17448],{"class":111},[97,17479,17451],{"class":103},[97,17481,17482],{"class":111},"getY",[97,17484,13241],{"class":103},[97,17486,852],{"class":319},[97,17488,16078],{"class":103},[97,17490,17482],{"class":111},[97,17492,5827],{"class":103},[97,17494,17495,17497,17500,17502,17505,17508,17510,17512,17514,17516,17518],{"class":99,"line":2812},[97,17496,14929],{"class":319},[97,17498,17499],{"class":103}," distance ",[97,17501,115],{"class":319},[97,17503,17504],{"class":111}," sqrt",[97,17506,17507],{"class":103},"(dx ",[97,17509,775],{"class":319},[97,17511,17441],{"class":103},[97,17513,801],{"class":319},[97,17515,17471],{"class":103},[97,17517,775],{"class":319},[97,17519,17520],{"class":103}," dy);\n",[97,17522,17523,17525,17528,17530,17532,17535],{"class":99,"line":8139},[97,17524,3292],{"class":319},[97,17526,17527],{"class":103}," (distance ",[97,17529,104],{"class":319},[97,17531,16532],{"class":103},[97,17533,17534],{"class":111},"getRadius",[97,17536,17537],{"class":103},"())\n",[97,17539,17540],{"class":99,"line":8163},[97,17541,2221],{"class":103},[97,17543,17544,17546,17548,17551,17553],{"class":99,"line":8168},[97,17545,9860],{"class":103},[97,17547,1362],{"class":319},[97,17549,17550],{"class":118}," \"点在圆内\"",[97,17552,1637],{"class":319},[97,17554,9031],{"class":103},[97,17556,17557],{"class":99,"line":8174},[97,17558,2378],{"class":103},[97,17560,17561],{"class":99,"line":8201},[97,17562,17013],{"class":319},[97,17564,17565],{"class":99,"line":8206},[97,17566,2221],{"class":103},[97,17568,17569,17571,17573,17576,17578],{"class":99,"line":8212},[97,17570,9860],{"class":103},[97,17572,1362],{"class":319},[97,17574,17575],{"class":118}," \"点在圆外\"",[97,17577,1637],{"class":319},[97,17579,9031],{"class":103},[97,17581,17582],{"class":99,"line":8224},[97,17583,2378],{"class":103},[97,17585,17586],{"class":99,"line":8236},[97,17587,1757],{"class":103},[97,17589,17590,17592,17594],{"class":99,"line":8248},[97,17591,326],{"class":319},[97,17593,2164],{"class":111},[97,17595,2167],{"class":103},[97,17597,17598],{"class":99,"line":9907},[97,17599,1738],{"class":103},[97,17601,17602],{"class":99,"line":9932},[97,17603,15243],{"class":191},[97,17605,17606],{"class":99,"line":9955},[97,17607,14991],{"class":103},[97,17609,17610],{"class":99,"line":9979},[97,17611,17612],{"class":103},"    Point p1;\n",[97,17614,17615],{"class":99,"line":9984},[97,17616,17184],{"class":191},[97,17618,17619,17621,17623,17626],{"class":99,"line":9989},[97,17620,1743],{"class":103},[97,17622,1362],{"class":319},[97,17624,17625],{"class":118},"\"请输入圆的半径：\"",[97,17627,1483],{"class":103},[97,17629,17630,17632],{"class":99,"line":9994},[97,17631,14929],{"class":319},[97,17633,17634],{"class":103}," r;\n",[97,17636,17637,17639,17641],{"class":99,"line":10003},[97,17638,2203],{"class":103},[97,17640,1622],{"class":319},[97,17642,17643],{"class":103},"r;\n",[97,17645,17646,17648,17651],{"class":99,"line":10008},[97,17647,16785],{"class":103},[97,17649,17650],{"class":111},"setRadius",[97,17652,17653],{"class":103},"(r);\n",[97,17655,17656,17658,17660,17663],{"class":99,"line":10014},[97,17657,1743],{"class":103},[97,17659,1362],{"class":319},[97,17661,17662],{"class":118},"\"请输入圆心坐标：\"",[97,17664,1483],{"class":103},[97,17666,17667,17669],{"class":99,"line":10035},[97,17668,14929],{"class":319},[97,17670,17671],{"class":103}," x, y;\n",[97,17673,17674,17676,17678,17680,17682],{"class":99,"line":10041},[97,17675,2203],{"class":103},[97,17677,1622],{"class":319},[97,17679,1140],{"class":103},[97,17681,1622],{"class":319},[97,17683,17684],{"class":103},"y;\n",[97,17686,17687,17690,17693],{"class":99,"line":10055},[97,17688,17689],{"class":103},"    p1.",[97,17691,17692],{"class":111},"setPoint",[97,17694,17695],{"class":103},"(x, y);\n",[97,17697,17698,17700,17703],{"class":99,"line":10061},[97,17699,16785],{"class":103},[97,17701,17702],{"class":111},"setCenter",[97,17704,17705],{"class":103},"(p1);\n",[97,17707,17708,17710,17712,17715],{"class":99,"line":10088},[97,17709,1743],{"class":103},[97,17711,1362],{"class":319},[97,17713,17714],{"class":118},"\"请输入测试点坐标：\"",[97,17716,1483],{"class":103},[97,17718,17719,17721],{"class":99,"line":10097},[97,17720,14929],{"class":319},[97,17722,17723],{"class":103}," x1, y1;\n",[97,17725,17726,17728,17730,17733,17735],{"class":99,"line":10103},[97,17727,2203],{"class":103},[97,17729,1622],{"class":319},[97,17731,17732],{"class":103},"x1",[97,17734,1622],{"class":319},[97,17736,17737],{"class":103},"y1;\n",[97,17739,17740],{"class":99,"line":10111},[97,17741,17742],{"class":103},"    Point p2;\n",[97,17744,17745,17748,17750],{"class":99,"line":10116},[97,17746,17747],{"class":103},"    p2.",[97,17749,17692],{"class":111},[97,17751,17752],{"class":103},"(x1, y1);\n",[97,17754,17755,17758],{"class":99,"line":16794},[97,17756,17757],{"class":111},"    isInCircle",[97,17759,17760],{"class":103},"(c1, p2);\n",[97,17762,17763],{"class":99,"line":16800},[97,17764,1757],{"class":103},[24,17766,17767],{},"在类中可以让另一个类作为本来的成员",[24,17769,17770],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[24,17772,17773],{},"创建point.h",[87,17775,17777],{"className":310,"code":17776,"language":312,"meta":92,"style":92},"#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",[94,17778,17779,17790,17796,17806,17812,17816,17821,17825,17829,17849,17853,17861,17869,17873,17877,17883,17889],{"__ignoreMap":92},[97,17780,17781,17784,17787],{"class":99,"line":100},[97,17782,17783],{"class":319},"#pragma",[97,17785,17786],{"class":111}," once",[97,17788,17789],{"class":191}," \u002F\u002F防止头文件重复包含\n",[97,17791,17792,17794],{"class":99,"line":195},[97,17793,2141],{"class":319},[97,17795,2144],{"class":118},[97,17797,17798,17800,17802,17804],{"class":99,"line":241},[97,17799,2149],{"class":319},[97,17801,2152],{"class":319},[97,17803,2155],{"class":111},[97,17805,1483],{"class":103},[97,17807,17808,17810],{"class":99,"line":1387},[97,17809,14885],{"class":319},[97,17811,17171],{"class":111},[97,17813,17814],{"class":99,"line":1393},[97,17815,1738],{"class":103},[97,17817,17818],{"class":99,"line":1407},[97,17819,17820],{"class":191},"\u002F\u002F做好声明与变量定义就可以\n",[97,17822,17823],{"class":99,"line":1413},[97,17824,14907],{"class":319},[97,17826,17827],{"class":99,"line":1504},[97,17828,17184],{"class":191},[97,17830,17831,17833,17835,17837,17839,17841,17843,17845,17847],{"class":99,"line":1510},[97,17832,15100],{"class":319},[97,17834,17191],{"class":111},[97,17836,323],{"class":103},[97,17838,14228],{"class":319},[97,17840,17198],{"class":5407},[97,17842,12626],{"class":103},[97,17844,14228],{"class":319},[97,17846,17205],{"class":5407},[97,17848,2910],{"class":103},[97,17850,17851],{"class":99,"line":1522},[97,17852,17223],{"class":191},[97,17854,17855,17857,17859],{"class":99,"line":1804},[97,17856,14929],{"class":319},[97,17858,17230],{"class":111},[97,17860,5827],{"class":103},[97,17862,17863,17865,17867],{"class":99,"line":1809},[97,17864,14929],{"class":319},[97,17866,17246],{"class":111},[97,17868,5827],{"class":103},[97,17870,17871],{"class":99,"line":1815},[97,17872,2591],{"emptyLinePlaceholder":249},[97,17874,17875],{"class":99,"line":1820},[97,17876,15412],{"class":319},[97,17878,17879,17881],{"class":99,"line":1834},[97,17880,14929],{"class":319},[97,17882,17268],{"class":103},[97,17884,17885,17887],{"class":99,"line":1839},[97,17886,14929],{"class":319},[97,17888,17275],{"class":103},[97,17890,17891],{"class":99,"line":1845},[97,17892,4186],{"class":103},[24,17894,17895],{},"创建point.cpp",[87,17897,17899],{"className":310,"code":17898,"language":312,"meta":92,"style":92},"#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",[94,17900,17901,17908,17913,17947,17951,17967],{"__ignoreMap":92},[97,17902,17903,17905],{"class":99,"line":100},[97,17904,2141],{"class":319},[97,17906,17907],{"class":118},"\u003Cpoint.h>\n",[97,17909,17910],{"class":99,"line":195},[97,17911,17912],{"class":191},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[97,17914,17915,17917,17920,17923,17925,17927,17929,17931,17933,17935,17937,17939,17941,17943,17945],{"class":99,"line":241},[97,17916,15100],{"class":319},[97,17918,17919],{"class":111}," Point",[97,17921,17922],{"class":103},"::",[97,17924,17692],{"class":111},[97,17926,323],{"class":103},[97,17928,14228],{"class":319},[97,17930,17198],{"class":5407},[97,17932,12626],{"class":103},[97,17934,14228],{"class":319},[97,17936,17205],{"class":5407},[97,17938,17208],{"class":103},[97,17940,115],{"class":319},[97,17942,17213],{"class":103},[97,17944,115],{"class":319},[97,17946,17218],{"class":103},[97,17948,17949],{"class":99,"line":1387},[97,17950,17223],{"class":191},[97,17952,17953,17955,17957,17959,17961,17963,17965],{"class":99,"line":1393},[97,17954,14929],{"class":319},[97,17956,17919],{"class":111},[97,17958,17922],{"class":103},[97,17960,17454],{"class":111},[97,17962,17233],{"class":103},[97,17964,17236],{"class":319},[97,17966,17239],{"class":103},[97,17968,17969,17971,17973,17975,17977,17979,17981],{"class":99,"line":1407},[97,17970,14929],{"class":319},[97,17972,17919],{"class":111},[97,17974,17922],{"class":103},[97,17976,17482],{"class":111},[97,17978,17233],{"class":103},[97,17980,17236],{"class":319},[97,17982,17253],{"class":103},[24,17984,17985],{},"创建circle.h",[87,17987,17989],{"className":310,"code":17988,"language":312,"meta":92,"style":92},"#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",[94,17990,17991,17998,18004,18014,18020,18026,18030,18034,18038,18052,18066,18070,18078,18086,18090,18094,18100,18104,18108],{"__ignoreMap":92},[97,17992,17993,17995],{"class":99,"line":100},[97,17994,17783],{"class":319},[97,17996,17997],{"class":111}," once\n",[97,17999,18000,18002],{"class":99,"line":195},[97,18001,2141],{"class":319},[97,18003,2144],{"class":118},[97,18005,18006,18008,18010,18012],{"class":99,"line":241},[97,18007,2149],{"class":319},[97,18009,2152],{"class":319},[97,18011,2155],{"class":111},[97,18013,1483],{"class":103},[97,18015,18016,18018],{"class":99,"line":1387},[97,18017,2141],{"class":319},[97,18019,17907],{"class":118},[97,18021,18022,18024],{"class":99,"line":1393},[97,18023,14885],{"class":319},[97,18025,14888],{"class":111},[97,18027,18028],{"class":99,"line":1407},[97,18029,1738],{"class":103},[97,18031,18032],{"class":99,"line":1413},[97,18033,14907],{"class":319},[97,18035,18036],{"class":99,"line":1504},[97,18037,17184],{"class":191},[97,18039,18040,18042,18044,18046,18048,18050],{"class":99,"line":1510},[97,18041,15100],{"class":319},[97,18043,17304],{"class":111},[97,18045,323],{"class":103},[97,18047,14228],{"class":319},[97,18049,17311],{"class":5407},[97,18051,2910],{"class":103},[97,18053,18054,18056,18058,18060,18062,18064],{"class":99,"line":1522},[97,18055,15100],{"class":319},[97,18057,17326],{"class":111},[97,18059,323],{"class":103},[97,18061,17331],{"class":111},[97,18063,17334],{"class":5407},[97,18065,2910],{"class":103},[97,18067,18068],{"class":99,"line":1804},[97,18069,17347],{"class":191},[97,18071,18072,18074,18076],{"class":99,"line":1809},[97,18073,14929],{"class":319},[97,18075,17354],{"class":111},[97,18077,5827],{"class":103},[97,18079,18080,18082,18084],{"class":99,"line":1815},[97,18081,17366],{"class":111},[97,18083,17369],{"class":111},[97,18085,5827],{"class":103},[97,18087,18088],{"class":99,"line":1820},[97,18089,2591],{"emptyLinePlaceholder":249},[97,18091,18092],{"class":99,"line":1834},[97,18093,15412],{"class":319},[97,18095,18096,18098],{"class":99,"line":1839},[97,18097,14929],{"class":319},[97,18099,14919],{"class":103},[97,18101,18102],{"class":99,"line":1845},[97,18103,17395],{"class":191},[97,18105,18106],{"class":99,"line":1866},[97,18107,17400],{"class":103},[97,18109,18110],{"class":99,"line":1871},[97,18111,4186],{"class":103},[24,18113,18114],{},"创建circle.cpp",[87,18116,18118],{"className":310,"code":18117,"language":312,"meta":92,"style":92},"#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",[94,18119,18120,18127,18150,18172,18177,18193],{"__ignoreMap":92},[97,18121,18122,18124],{"class":99,"line":100},[97,18123,2141],{"class":319},[97,18125,18126],{"class":118},"\u003Ccircle.h>\n",[97,18128,18129,18131,18134,18136,18138,18140,18142,18144,18146,18148],{"class":99,"line":195},[97,18130,5555],{"class":319},[97,18132,18133],{"class":111}," Circle",[97,18135,17922],{"class":103},[97,18137,17650],{"class":111},[97,18139,323],{"class":103},[97,18141,14228],{"class":319},[97,18143,17311],{"class":5407},[97,18145,17314],{"class":103},[97,18147,115],{"class":319},[97,18149,17319],{"class":103},[97,18151,18152,18154,18156,18158,18160,18162,18164,18166,18168,18170],{"class":99,"line":241},[97,18153,5555],{"class":319},[97,18155,18133],{"class":111},[97,18157,17922],{"class":103},[97,18159,17702],{"class":111},[97,18161,323],{"class":103},[97,18163,17331],{"class":111},[97,18165,17334],{"class":5407},[97,18167,17337],{"class":103},[97,18169,115],{"class":319},[97,18171,17342],{"class":103},[97,18173,18174],{"class":99,"line":1387},[97,18175,18176],{"class":191},"\u002F\u002F获取属性\n",[97,18178,18179,18181,18183,18185,18187,18189,18191],{"class":99,"line":1393},[97,18180,14228],{"class":319},[97,18182,18133],{"class":111},[97,18184,17922],{"class":103},[97,18186,17534],{"class":111},[97,18188,17233],{"class":103},[97,18190,17236],{"class":319},[97,18192,17361],{"class":103},[97,18194,18195,18197,18199,18201,18203,18205,18207],{"class":99,"line":1407},[97,18196,17331],{"class":111},[97,18198,18133],{"class":111},[97,18200,17922],{"class":103},[97,18202,17448],{"class":111},[97,18204,17233],{"class":103},[97,18206,17236],{"class":319},[97,18208,17376],{"class":103},[24,18210,18211],{},"使用封装的类",[87,18213,18215],{"className":310,"code":18214,"language":312,"meta":92,"style":92},"#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",[94,18216,18217,18223,18233,18239,18245,18269,18273,18299,18325,18349,18363,18367,18379,18383,18387,18391,18403,18407,18411,18419,18423,18427,18431,18435,18439,18449,18455,18463,18471,18481,18487,18499,18507,18515,18525,18531,18543,18547,18555,18561],{"__ignoreMap":92},[97,18218,18219,18221],{"class":99,"line":100},[97,18220,2141],{"class":319},[97,18222,2144],{"class":118},[97,18224,18225,18227,18229,18231],{"class":99,"line":195},[97,18226,2149],{"class":319},[97,18228,2152],{"class":319},[97,18230,2155],{"class":111},[97,18232,1483],{"class":103},[97,18234,18235,18237],{"class":99,"line":241},[97,18236,2141],{"class":319},[97,18238,18126],{"class":118},[97,18240,18241,18243],{"class":99,"line":1387},[97,18242,2141],{"class":319},[97,18244,17907],{"class":118},[97,18246,18247,18249,18251,18253,18255,18257,18259,18261,18263,18265,18267],{"class":99,"line":1393},[97,18248,5555],{"class":319},[97,18250,17411],{"class":111},[97,18252,323],{"class":103},[97,18254,17416],{"class":111},[97,18256,10775],{"class":319},[97,18258,608],{"class":5407},[97,18260,698],{"class":103},[97,18262,17331],{"class":111},[97,18264,10775],{"class":319},[97,18266,24],{"class":5407},[97,18268,329],{"class":103},[97,18270,18271],{"class":99,"line":1407},[97,18272,1738],{"class":103},[97,18274,18275,18277,18279,18281,18283,18285,18287,18289,18291,18293,18295,18297],{"class":99,"line":1413},[97,18276,14929],{"class":319},[97,18278,17441],{"class":103},[97,18280,115],{"class":319},[97,18282,16532],{"class":103},[97,18284,17448],{"class":111},[97,18286,17451],{"class":103},[97,18288,17454],{"class":111},[97,18290,13241],{"class":103},[97,18292,852],{"class":319},[97,18294,16078],{"class":103},[97,18296,17454],{"class":111},[97,18298,5827],{"class":103},[97,18300,18301,18303,18305,18307,18309,18311,18313,18315,18317,18319,18321,18323],{"class":99,"line":1504},[97,18302,14929],{"class":319},[97,18304,17471],{"class":103},[97,18306,115],{"class":319},[97,18308,16532],{"class":103},[97,18310,17448],{"class":111},[97,18312,17451],{"class":103},[97,18314,17482],{"class":111},[97,18316,13241],{"class":103},[97,18318,852],{"class":319},[97,18320,16078],{"class":103},[97,18322,17482],{"class":111},[97,18324,5827],{"class":103},[97,18326,18327,18329,18331,18333,18335,18337,18339,18341,18343,18345,18347],{"class":99,"line":1510},[97,18328,14929],{"class":319},[97,18330,17499],{"class":103},[97,18332,115],{"class":319},[97,18334,17504],{"class":111},[97,18336,17507],{"class":103},[97,18338,775],{"class":319},[97,18340,17441],{"class":103},[97,18342,801],{"class":319},[97,18344,17471],{"class":103},[97,18346,775],{"class":319},[97,18348,17520],{"class":103},[97,18350,18351,18353,18355,18357,18359,18361],{"class":99,"line":1522},[97,18352,3292],{"class":319},[97,18354,17527],{"class":103},[97,18356,104],{"class":319},[97,18358,16532],{"class":103},[97,18360,17534],{"class":111},[97,18362,17537],{"class":103},[97,18364,18365],{"class":99,"line":1804},[97,18366,2221],{"class":103},[97,18368,18369,18371,18373,18375,18377],{"class":99,"line":1809},[97,18370,9860],{"class":103},[97,18372,1362],{"class":319},[97,18374,17550],{"class":118},[97,18376,1637],{"class":319},[97,18378,9031],{"class":103},[97,18380,18381],{"class":99,"line":1815},[97,18382,2378],{"class":103},[97,18384,18385],{"class":99,"line":1820},[97,18386,17013],{"class":319},[97,18388,18389],{"class":99,"line":1834},[97,18390,2221],{"class":103},[97,18392,18393,18395,18397,18399,18401],{"class":99,"line":1839},[97,18394,9860],{"class":103},[97,18396,1362],{"class":319},[97,18398,17575],{"class":118},[97,18400,1637],{"class":319},[97,18402,9031],{"class":103},[97,18404,18405],{"class":99,"line":1845},[97,18406,2378],{"class":103},[97,18408,18409],{"class":99,"line":1866},[97,18410,1757],{"class":103},[97,18412,18413,18415,18417],{"class":99,"line":1871},[97,18414,326],{"class":319},[97,18416,2164],{"class":111},[97,18418,2167],{"class":103},[97,18420,18421],{"class":99,"line":1885},[97,18422,1738],{"class":103},[97,18424,18425],{"class":99,"line":1890},[97,18426,15243],{"class":191},[97,18428,18429],{"class":99,"line":1919},[97,18430,14991],{"class":103},[97,18432,18433],{"class":99,"line":1924},[97,18434,17612],{"class":103},[97,18436,18437],{"class":99,"line":1941},[97,18438,17184],{"class":191},[97,18440,18441,18443,18445,18447],{"class":99,"line":1946},[97,18442,1743],{"class":103},[97,18444,1362],{"class":319},[97,18446,17625],{"class":118},[97,18448,1483],{"class":103},[97,18450,18451,18453],{"class":99,"line":1951},[97,18452,14929],{"class":319},[97,18454,17634],{"class":103},[97,18456,18457,18459,18461],{"class":99,"line":1956},[97,18458,2203],{"class":103},[97,18460,1622],{"class":319},[97,18462,17643],{"class":103},[97,18464,18465,18467,18469],{"class":99,"line":1970},[97,18466,16785],{"class":103},[97,18468,17650],{"class":111},[97,18470,17653],{"class":103},[97,18472,18473,18475,18477,18479],{"class":99,"line":1975},[97,18474,1743],{"class":103},[97,18476,1362],{"class":319},[97,18478,17662],{"class":118},[97,18480,1483],{"class":103},[97,18482,18483,18485],{"class":99,"line":2768},[97,18484,14929],{"class":319},[97,18486,17671],{"class":103},[97,18488,18489,18491,18493,18495,18497],{"class":99,"line":2782},[97,18490,2203],{"class":103},[97,18492,1622],{"class":319},[97,18494,1140],{"class":103},[97,18496,1622],{"class":319},[97,18498,17684],{"class":103},[97,18500,18501,18503,18505],{"class":99,"line":2790},[97,18502,17689],{"class":103},[97,18504,17692],{"class":111},[97,18506,17695],{"class":103},[97,18508,18509,18511,18513],{"class":99,"line":2795},[97,18510,16785],{"class":103},[97,18512,17702],{"class":111},[97,18514,17705],{"class":103},[97,18516,18517,18519,18521,18523],{"class":99,"line":2801},[97,18518,1743],{"class":103},[97,18520,1362],{"class":319},[97,18522,17714],{"class":118},[97,18524,1483],{"class":103},[97,18526,18527,18529],{"class":99,"line":2807},[97,18528,14929],{"class":319},[97,18530,17723],{"class":103},[97,18532,18533,18535,18537,18539,18541],{"class":99,"line":2812},[97,18534,2203],{"class":103},[97,18536,1622],{"class":319},[97,18538,17732],{"class":103},[97,18540,1622],{"class":319},[97,18542,17737],{"class":103},[97,18544,18545],{"class":99,"line":8139},[97,18546,17742],{"class":103},[97,18548,18549,18551,18553],{"class":99,"line":8163},[97,18550,17747],{"class":103},[97,18552,17692],{"class":111},[97,18554,17752],{"class":103},[97,18556,18557,18559],{"class":99,"line":8168},[97,18558,17757],{"class":111},[97,18560,17760],{"class":103},[97,18562,18563],{"class":99,"line":8174},[97,18564,1757],{"class":103},[14,18566,18568],{"id":18567},"_82对象的初始化清理","8.2对象的初始化清理",[67,18570,18571,18574],{},[70,18572,18573],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[70,18575,18576],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[48,18578,18580],{"id":18579},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[24,18582,18583,18584,18587],{},"对象的",[469,18585,18586],{},"初始化和清理","也是两个非常重要的安全问题",[24,18589,18590],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[24,18592,18593],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[24,18595,18596,18597,18600,18601,18604],{},"c++利用了",[469,18598,18599],{},"构造函数","和",[469,18602,18603],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[24,18606,18607,18608],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[469,18609,18610],{},"我们不提供构造和析构，编译器会提供",[24,18612,18613],{},[469,18614,18615],{},"编译器提供的构造函数和析构函数是空实现。",[67,18617,18618,18621],{},[70,18619,18620],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[70,18622,18623,18624,18627],{},"析构函数：主要作用在于对象",[469,18625,18626],{},"销毁前","系统自动调用，执行一些清理工作。",[24,18629,18630,18633],{},[469,18631,18632],{},"构造函数语法：",[94,18634,18635],{},"类名(){}",[138,18637,18638,18641,18644,18647,18650],{},[70,18639,18640],{},"构造函数，没有返回值也不写void",[70,18642,18643],{},"函数名称与类名相同",[70,18645,18646],{},"构造函数可以有参数，因此可以发生重载",[70,18648,18649],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[70,18651,18652,18653,749],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[94,18654,18655],{},"Person(){}",[24,18657,18658,13986,18661],{},[469,18659,18660],{},"析构函数语法：",[94,18662,18663],{},"~类名(){}",[138,18665,18666,18669,18672,18678],{},[70,18667,18668],{},"析构函数，没有返回值也不写void",[70,18670,18671],{},"函数名称与类名相同,在名称前加上符号  ~",[70,18673,18674,18675],{},"析构函数不可以有参数，因此",[469,18676,18677],{},"不可以发生重载",[70,18679,18680],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[87,18682,18684],{"className":310,"code":18683,"language":312,"meta":92,"style":92},"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",[94,18685,18686,18692,18696,18700,18705,18712,18716,18729,18733,18738,18745,18749,18762,18766,18770,18774,18778,18786,18790,18798,18802,18806,18814,18818,18823,18827,18834,18838,18851,18855,18863],{"__ignoreMap":92},[97,18687,18688,18690],{"class":99,"line":100},[97,18689,14885],{"class":319},[97,18691,15361],{"class":111},[97,18693,18694],{"class":99,"line":195},[97,18695,1738],{"class":103},[97,18697,18698],{"class":99,"line":241},[97,18699,14907],{"class":319},[97,18701,18702],{"class":99,"line":1387},[97,18703,18704],{"class":191},"    \u002F\u002F构造函数\n",[97,18706,18707,18710],{"class":99,"line":1393},[97,18708,18709],{"class":111},"    Person",[97,18711,2167],{"class":103},[97,18713,18714],{"class":99,"line":1407},[97,18715,2221],{"class":103},[97,18717,18718,18720,18722,18725,18727],{"class":99,"line":1413},[97,18719,9860],{"class":103},[97,18721,1362],{"class":319},[97,18723,18724],{"class":118}," \"Person的构造函数调用\"",[97,18726,1637],{"class":319},[97,18728,9031],{"class":103},[97,18730,18731],{"class":99,"line":1504},[97,18732,2378],{"class":103},[97,18734,18735],{"class":99,"line":1510},[97,18736,18737],{"class":191},"    \u002F\u002F析构函数\n",[97,18739,18740,18743],{"class":99,"line":1522},[97,18741,18742],{"class":111},"    ~Person",[97,18744,2167],{"class":103},[97,18746,18747],{"class":99,"line":1804},[97,18748,2221],{"class":103},[97,18750,18751,18753,18755,18758,18760],{"class":99,"line":1809},[97,18752,9860],{"class":103},[97,18754,1362],{"class":319},[97,18756,18757],{"class":118}," \"Person的析构函数调用\"",[97,18759,1637],{"class":319},[97,18761,9031],{"class":103},[97,18763,18764],{"class":99,"line":1815},[97,18765,2378],{"class":103},[97,18767,18768],{"class":99,"line":1820},[97,18769,2591],{"emptyLinePlaceholder":249},[97,18771,18772],{"class":99,"line":1834},[97,18773,4186],{"class":103},[97,18775,18776],{"class":99,"line":1839},[97,18777,2591],{"emptyLinePlaceholder":249},[97,18779,18780,18782,18784],{"class":99,"line":1845},[97,18781,5555],{"class":319},[97,18783,5779],{"class":111},[97,18785,2167],{"class":103},[97,18787,18788],{"class":99,"line":1866},[97,18789,1738],{"class":103},[97,18791,18792,18795],{"class":99,"line":1871},[97,18793,18794],{"class":103},"    Person p;",[97,18796,18797],{"class":191},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[97,18799,18800],{"class":99,"line":1885},[97,18801,1757],{"class":103},[97,18803,18804],{"class":99,"line":1890},[97,18805,2591],{"emptyLinePlaceholder":249},[97,18807,18808,18810,18812],{"class":99,"line":1919},[97,18809,326],{"class":319},[97,18811,2164],{"class":111},[97,18813,11044],{"class":103},[97,18815,18816],{"class":99,"line":1924},[97,18817,13401],{"class":103},[97,18819,18820],{"class":99,"line":1941},[97,18821,18822],{"class":191},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[97,18824,18825],{"class":99,"line":1946},[97,18826,2591],{"emptyLinePlaceholder":249},[97,18828,18829,18831],{"class":99,"line":1951},[97,18830,18794],{"class":103},[97,18832,18833],{"class":191},"\u002F\u002F只有构造函数\n",[97,18835,18836],{"class":99,"line":1956},[97,18837,2591],{"emptyLinePlaceholder":249},[97,18839,18840,18842,18844,18846,18848],{"class":99,"line":1970},[97,18841,2494],{"class":111},[97,18843,323],{"class":103},[97,18845,2499],{"class":118},[97,18847,6157],{"class":103},[97,18849,18850],{"class":191},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[97,18852,18853],{"class":99,"line":1975},[97,18854,2591],{"emptyLinePlaceholder":249},[97,18856,18857,18859,18861],{"class":99,"line":2768},[97,18858,4281],{"class":319},[97,18860,4284],{"class":370},[97,18862,1483],{"class":103},[97,18864,18865],{"class":99,"line":2782},[97,18866,1757],{"class":103},[24,18868,18869],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[48,18871,18873],{"id":18872},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[24,18875,18876],{},"两种分类方式：",[24,18878,18879],{},"​\t按参数分为： 有参构造和无参构造",[24,18881,18882],{},"​\t按类型分为： 普通构造和拷贝构造",[24,18884,18885],{},"三种调用方式：",[24,18887,18888],{},"​\t括号法",[24,18890,18891],{},"​\t显示法",[24,18893,18894],{},"​\t隐式转换法",[87,18896,18898],{"className":310,"code":18897,"language":312,"meta":92,"style":92},"#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",[94,18899,18900,18906,18916,18921,18926,18931,18936,18940,18948,18952,18956,18960,18966,18970,18983,18987,18999,19003,19012,19025,19029,19033,19039,19043,19056,19060,19065,19081,19085,19090,19099,19112,19116,19122,19126,19131,19139,19143,19148,19152,19160,19164,19169,19174,19179,19184,19189,19193,19198,19203,19208,19213,19217,19222,19227,19243,19255,19260,19264,19269,19274,19279,19283,19288,19302,19315,19319,19327,19331,19337,19343,19351],{"__ignoreMap":92},[97,18901,18902,18904],{"class":99,"line":100},[97,18903,2141],{"class":319},[97,18905,2144],{"class":118},[97,18907,18908,18910,18912,18914],{"class":99,"line":195},[97,18909,2149],{"class":319},[97,18911,2152],{"class":319},[97,18913,2155],{"class":111},[97,18915,1483],{"class":103},[97,18917,18918],{"class":99,"line":241},[97,18919,18920],{"class":191},"\u002F\u002F1.构造函数的分类及调用\n",[97,18922,18923],{"class":99,"line":1387},[97,18924,18925],{"class":191},"\u002F\u002F分类\n",[97,18927,18928],{"class":99,"line":1393},[97,18929,18930],{"class":191},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[97,18932,18933],{"class":99,"line":1407},[97,18934,18935],{"class":191},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[97,18937,18938],{"class":99,"line":1413},[97,18939,2591],{"emptyLinePlaceholder":249},[97,18941,18942,18944,18946],{"class":99,"line":1504},[97,18943,14885],{"class":319},[97,18945,15759],{"class":111},[97,18947,2865],{"class":103},[97,18949,18950],{"class":99,"line":1510},[97,18951,1738],{"class":103},[97,18953,18954],{"class":99,"line":1522},[97,18955,14907],{"class":319},[97,18957,18958],{"class":99,"line":1804},[97,18959,18704],{"class":191},[97,18961,18962,18964],{"class":99,"line":1809},[97,18963,18709],{"class":111},[97,18965,2167],{"class":103},[97,18967,18968],{"class":99,"line":1815},[97,18969,2221],{"class":103},[97,18971,18972,18974,18976,18979,18981],{"class":99,"line":1820},[97,18973,3642],{"class":103},[97,18975,1362],{"class":319},[97,18977,18978],{"class":118},"\"Person构造函数无参构造\"",[97,18980,1362],{"class":319},[97,18982,1384],{"class":103},[97,18984,18985],{"class":99,"line":1834},[97,18986,2378],{"class":103},[97,18988,18989,18991,18993,18995,18997],{"class":99,"line":1839},[97,18990,18709],{"class":111},[97,18992,323],{"class":103},[97,18994,326],{"class":319},[97,18996,1591],{"class":5407},[97,18998,329],{"class":103},[97,19000,19001],{"class":99,"line":1845},[97,19002,2221],{"class":103},[97,19004,19005,19008,19010],{"class":99,"line":1866},[97,19006,19007],{"class":103},"        age",[97,19009,115],{"class":319},[97,19011,6388],{"class":103},[97,19013,19014,19016,19018,19021,19023],{"class":99,"line":1871},[97,19015,3642],{"class":103},[97,19017,1362],{"class":319},[97,19019,19020],{"class":118},"\"Person构造函数有参构造\"",[97,19022,1362],{"class":319},[97,19024,1384],{"class":103},[97,19026,19027],{"class":99,"line":1885},[97,19028,2378],{"class":103},[97,19030,19031],{"class":99,"line":1890},[97,19032,18737],{"class":191},[97,19034,19035,19037],{"class":99,"line":1919},[97,19036,18742],{"class":111},[97,19038,2167],{"class":103},[97,19040,19041],{"class":99,"line":1924},[97,19042,2221],{"class":103},[97,19044,19045,19047,19049,19052,19054],{"class":99,"line":1941},[97,19046,3642],{"class":103},[97,19048,1362],{"class":319},[97,19050,19051],{"class":118},"\"Person析构函数被调用\"",[97,19053,1362],{"class":319},[97,19055,1384],{"class":103},[97,19057,19058],{"class":99,"line":1946},[97,19059,2378],{"class":103},[97,19061,19062],{"class":99,"line":1951},[97,19063,19064],{"class":191},"    \u002F\u002F拷贝构造函数\n",[97,19066,19067,19069,19071,19073,19075,19077,19079],{"class":99,"line":1956},[97,19068,18709],{"class":111},[97,19070,323],{"class":103},[97,19072,6983],{"class":319},[97,19074,15759],{"class":111},[97,19076,10775],{"class":319},[97,19078,24],{"class":5407},[97,19080,329],{"class":103},[97,19082,19083],{"class":99,"line":1970},[97,19084,2221],{"class":103},[97,19086,19087],{"class":99,"line":1975},[97,19088,19089],{"class":191},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[97,19091,19092,19094,19096],{"class":99,"line":2768},[97,19093,19007],{"class":103},[97,19095,115],{"class":319},[97,19097,19098],{"class":103},"p.age;\n",[97,19100,19101,19103,19105,19108,19110],{"class":99,"line":2782},[97,19102,3642],{"class":103},[97,19104,1362],{"class":319},[97,19106,19107],{"class":118},"\"Person拷贝构造函数被调用\"",[97,19109,1362],{"class":319},[97,19111,1384],{"class":103},[97,19113,19114],{"class":99,"line":2790},[97,19115,2378],{"class":103},[97,19117,19118,19120],{"class":99,"line":2795},[97,19119,2176],{"class":319},[97,19121,7988],{"class":103},[97,19123,19124],{"class":99,"line":2801},[97,19125,4186],{"class":103},[97,19127,19128],{"class":99,"line":2807},[97,19129,19130],{"class":191},"\u002F\u002F调用\n",[97,19132,19133,19135,19137],{"class":99,"line":2812},[97,19134,5555],{"class":319},[97,19136,5779],{"class":111},[97,19138,2167],{"class":103},[97,19140,19141],{"class":99,"line":8139},[97,19142,1738],{"class":103},[97,19144,19145],{"class":99,"line":8163},[97,19146,19147],{"class":191},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[97,19149,19150],{"class":99,"line":8168},[97,19151,1757],{"class":103},[97,19153,19154,19156,19158],{"class":99,"line":8174},[97,19155,5555],{"class":319},[97,19157,5848],{"class":111},[97,19159,2167],{"class":103},[97,19161,19162],{"class":99,"line":8201},[97,19163,1738],{"class":103},[97,19165,19166],{"class":99,"line":8206},[97,19167,19168],{"class":191},"    \u002F\u002F1.括号法\n",[97,19170,19171],{"class":99,"line":8212},[97,19172,19173],{"class":191},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[97,19175,19176],{"class":99,"line":8224},[97,19177,19178],{"class":191},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[97,19180,19181],{"class":99,"line":8236},[97,19182,19183],{"class":191},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[97,19185,19186],{"class":99,"line":8248},[97,19187,19188],{"class":191},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[97,19190,19191],{"class":99,"line":9907},[97,19192,2591],{"emptyLinePlaceholder":249},[97,19194,19195],{"class":99,"line":9932},[97,19196,19197],{"class":191},"    \u002F\u002F注意事项\n",[97,19199,19200],{"class":99,"line":9955},[97,19201,19202],{"class":191},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[97,19204,19205],{"class":99,"line":9979},[97,19206,19207],{"class":191},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[97,19209,19210],{"class":99,"line":9984},[97,19211,19212],{"class":191},"    \u002F\u002F Person p4();\n",[97,19214,19215],{"class":99,"line":9989},[97,19216,2591],{"emptyLinePlaceholder":249},[97,19218,19219],{"class":99,"line":9994},[97,19220,19221],{"class":191},"    \u002F\u002F2.显示法\n",[97,19223,19224],{"class":99,"line":10003},[97,19225,19226],{"class":103},"    Person p1;\n",[97,19228,19229,19232,19234,19237,19239,19241],{"class":99,"line":10008},[97,19230,19231],{"class":103},"    Person p2",[97,19233,115],{"class":319},[97,19235,19236],{"class":111},"Person",[97,19238,323],{"class":103},[97,19240,766],{"class":370},[97,19242,2910],{"class":103},[97,19244,19245,19248,19250,19252],{"class":99,"line":10014},[97,19246,19247],{"class":103},"    Person p3",[97,19249,115],{"class":319},[97,19251,19236],{"class":111},[97,19253,19254],{"class":103},"(p2);\n",[97,19256,19257],{"class":99,"line":10035},[97,19258,19259],{"class":191},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[97,19261,19262],{"class":99,"line":10041},[97,19263,2591],{"emptyLinePlaceholder":249},[97,19265,19266],{"class":99,"line":10055},[97,19267,19268],{"class":191},"    \u002F\u002F 注意事项2\n",[97,19270,19271],{"class":99,"line":10061},[97,19272,19273],{"class":191},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[97,19275,19276],{"class":99,"line":10088},[97,19277,19278],{"class":191},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[97,19280,19281],{"class":99,"line":10097},[97,19282,2591],{"emptyLinePlaceholder":249},[97,19284,19285],{"class":99,"line":10103},[97,19286,19287],{"class":191},"    \u002F\u002F3.隐士转换法\n",[97,19289,19290,19293,19295,19297,19299],{"class":99,"line":10111},[97,19291,19292],{"class":103},"    Person p4",[97,19294,115],{"class":319},[97,19296,766],{"class":370},[97,19298,377],{"class":103},[97,19300,19301],{"class":191},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[97,19303,19304,19307,19309,19312],{"class":99,"line":10116},[97,19305,19306],{"class":103},"    Person p5",[97,19308,115],{"class":319},[97,19310,19311],{"class":103},"p4;",[97,19313,19314],{"class":191}," \u002F\u002F 这里会调用拷贝构造函数\n",[97,19316,19317],{"class":99,"line":16794},[97,19318,1757],{"class":103},[97,19320,19321,19323,19325],{"class":99,"line":16800},[97,19322,326],{"class":319},[97,19324,2164],{"class":111},[97,19326,2167],{"class":103},[97,19328,19329],{"class":99,"line":16823},[97,19330,1738],{"class":103},[97,19332,19333,19335],{"class":99,"line":16829},[97,19334,5824],{"class":111},[97,19336,5827],{"class":103},[97,19338,19339,19341],{"class":99,"line":16852},[97,19340,5893],{"class":111},[97,19342,5827],{"class":103},[97,19344,19345,19347,19349],{"class":99,"line":16866},[97,19346,4281],{"class":319},[97,19348,4284],{"class":370},[97,19350,1483],{"class":103},[97,19352,19353],{"class":99,"line":16886},[97,19354,1757],{"class":103},[24,19356,19357,19360],{},[469,19358,19359],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[48,19362,19364],{"id":19363},"_823拷贝构造函数","8.2.3拷贝构造函数",[24,19366,19367],{},"C++中拷贝构造函数调用时机通常有三种情况",[67,19369,19370,19373,19376],{},[70,19371,19372],{},"使用一个已经创建完毕的对象来初始化一个新对象",[70,19374,19375],{},"值传递的方式给函数参数传值",[70,19377,19378],{},"以值方式返回局部对象",[87,19380,19382],{"className":310,"code":19381,"language":312,"meta":92,"style":92},"#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",[94,19383,19384,19390,19400,19404,19409,19413,19418,19423,19428,19434,19438,19442,19448,19452,19465,19469,19474,19486,19490,19498,19511,19515,19519,19535,19539,19548,19561,19565,19571,19575,19587,19591,19597,19601,19605,19613,19617,19630,19638,19656,19660,19665,19670,19685,19689,19702,19706,19714,19718,19722,19730,19734,19739,19748,19752,19756,19781,19791,19795,19803,19807,19818,19843,19847,19851,19855,19863,19867,19872,19877,19884,19889,19894,19899,19904,19908,19913,19917,19922,19926,19931,19936,19940,19944,19949,19954,19962],{"__ignoreMap":92},[97,19385,19386,19388],{"class":99,"line":100},[97,19387,2141],{"class":319},[97,19389,2144],{"class":118},[97,19391,19392,19394,19396,19398],{"class":99,"line":195},[97,19393,2149],{"class":319},[97,19395,2152],{"class":319},[97,19397,2155],{"class":111},[97,19399,1483],{"class":103},[97,19401,19402],{"class":99,"line":241},[97,19403,2591],{"emptyLinePlaceholder":249},[97,19405,19406],{"class":99,"line":1387},[97,19407,19408],{"class":191},"\u002F\u002F拷贝构造函数调用时机\n",[97,19410,19411],{"class":99,"line":1393},[97,19412,2591],{"emptyLinePlaceholder":249},[97,19414,19415],{"class":99,"line":1407},[97,19416,19417],{"class":191},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[97,19419,19420],{"class":99,"line":1413},[97,19421,19422],{"class":191},"\u002F\u002F2.值传递的方式给函数参数传值\n",[97,19424,19425],{"class":99,"line":1504},[97,19426,19427],{"class":191},"\u002F\u002F3.以值方式返回局部对象\n",[97,19429,19430,19432],{"class":99,"line":1510},[97,19431,14885],{"class":319},[97,19433,15361],{"class":111},[97,19435,19436],{"class":99,"line":1522},[97,19437,1738],{"class":103},[97,19439,19440],{"class":99,"line":1804},[97,19441,14907],{"class":319},[97,19443,19444,19446],{"class":99,"line":1809},[97,19445,18709],{"class":111},[97,19447,2167],{"class":103},[97,19449,19450],{"class":99,"line":1815},[97,19451,2221],{"class":103},[97,19453,19454,19456,19458,19461,19463],{"class":99,"line":1820},[97,19455,9860],{"class":103},[97,19457,1362],{"class":319},[97,19459,19460],{"class":118}," \"Person的默认构造函数调用\"",[97,19462,1637],{"class":319},[97,19464,9031],{"class":103},[97,19466,19467],{"class":99,"line":1834},[97,19468,2378],{"class":103},[97,19470,19471],{"class":99,"line":1839},[97,19472,19473],{"class":191},"    \u002F\u002F有参构造\n",[97,19475,19476,19478,19480,19482,19484],{"class":99,"line":1845},[97,19477,18709],{"class":111},[97,19479,323],{"class":103},[97,19481,326],{"class":319},[97,19483,15879],{"class":5407},[97,19485,329],{"class":103},[97,19487,19488],{"class":99,"line":1866},[97,19489,2221],{"class":103},[97,19491,19492,19494,19496],{"class":99,"line":1871},[97,19493,15933],{"class":103},[97,19495,115],{"class":319},[97,19497,7988],{"class":103},[97,19499,19500,19502,19504,19507,19509],{"class":99,"line":1885},[97,19501,9860],{"class":103},[97,19503,1362],{"class":319},[97,19505,19506],{"class":118}," \"Person的有参构造函数调用\"",[97,19508,1637],{"class":319},[97,19510,9031],{"class":103},[97,19512,19513],{"class":99,"line":1890},[97,19514,2378],{"class":103},[97,19516,19517],{"class":99,"line":1919},[97,19518,19064],{"class":191},[97,19520,19521,19523,19525,19527,19529,19531,19533],{"class":99,"line":1924},[97,19522,18709],{"class":111},[97,19524,323],{"class":103},[97,19526,6983],{"class":319},[97,19528,15759],{"class":111},[97,19530,10775],{"class":319},[97,19532,24],{"class":5407},[97,19534,329],{"class":103},[97,19536,19537],{"class":99,"line":1941},[97,19538,2221],{"class":103},[97,19540,19541,19543,19545],{"class":99,"line":1946},[97,19542,15933],{"class":103},[97,19544,115],{"class":319},[97,19546,19547],{"class":103}," p.m_Age;\n",[97,19549,19550,19552,19554,19557,19559],{"class":99,"line":1951},[97,19551,9860],{"class":103},[97,19553,1362],{"class":319},[97,19555,19556],{"class":118}," \"Person的拷贝构造函数调用\"",[97,19558,1637],{"class":319},[97,19560,9031],{"class":103},[97,19562,19563],{"class":99,"line":1956},[97,19564,2378],{"class":103},[97,19566,19567,19569],{"class":99,"line":1970},[97,19568,18742],{"class":111},[97,19570,2167],{"class":103},[97,19572,19573],{"class":99,"line":1975},[97,19574,2221],{"class":103},[97,19576,19577,19579,19581,19583,19585],{"class":99,"line":2768},[97,19578,9860],{"class":103},[97,19580,1362],{"class":319},[97,19582,18757],{"class":118},[97,19584,1637],{"class":319},[97,19586,9031],{"class":103},[97,19588,19589],{"class":99,"line":2782},[97,19590,2378],{"class":103},[97,19592,19593,19595],{"class":99,"line":2790},[97,19594,2176],{"class":319},[97,19596,15856],{"class":103},[97,19598,19599],{"class":99,"line":2795},[97,19600,4186],{"class":103},[97,19602,19603],{"class":99,"line":2801},[97,19604,19417],{"class":191},[97,19606,19607,19609,19611],{"class":99,"line":2807},[97,19608,5555],{"class":319},[97,19610,5779],{"class":111},[97,19612,2167],{"class":103},[97,19614,19615],{"class":99,"line":2812},[97,19616,1738],{"class":103},[97,19618,19619,19622,19624,19626,19628],{"class":99,"line":8139},[97,19620,19621],{"class":103},"    Person ",[97,19623,7321],{"class":111},[97,19625,323],{"class":103},[97,19627,1020],{"class":370},[97,19629,2910],{"class":103},[97,19631,19632,19634,19636],{"class":99,"line":8163},[97,19633,19621],{"class":103},[97,19635,7224],{"class":111},[97,19637,17705],{"class":103},[97,19639,19640,19642,19644,19647,19649,19652,19654],{"class":99,"line":8168},[97,19641,1743],{"class":103},[97,19643,1362],{"class":319},[97,19645,19646],{"class":118},"\"P2的年龄为：\"",[97,19648,1362],{"class":319},[97,19650,19651],{"class":103},"p2.m_Age",[97,19653,1362],{"class":319},[97,19655,1384],{"class":103},[97,19657,19658],{"class":99,"line":8174},[97,19659,1757],{"class":103},[97,19661,19662],{"class":99,"line":8201},[97,19663,19664],{"class":191},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[97,19666,19667],{"class":99,"line":8206},[97,19668,19669],{"class":191},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[97,19671,19672,19674,19677,19679,19681,19683],{"class":99,"line":8212},[97,19673,5555],{"class":319},[97,19675,19676],{"class":111}," doWork",[97,19678,323],{"class":103},[97,19680,19236],{"class":111},[97,19682,7016],{"class":5407},[97,19684,329],{"class":103},[97,19686,19687],{"class":99,"line":8224},[97,19688,1738],{"class":103},[97,19690,19691,19693,19695,19698,19700],{"class":99,"line":8236},[97,19692,6720],{"class":103},[97,19694,1362],{"class":319},[97,19696,19697],{"class":118}," \"doWork函数调用\"",[97,19699,1637],{"class":319},[97,19701,9031],{"class":103},[97,19703,19704],{"class":99,"line":8248},[97,19705,1757],{"class":103},[97,19707,19708,19710,19712],{"class":99,"line":9907},[97,19709,5555],{"class":319},[97,19711,5848],{"class":111},[97,19713,2167],{"class":103},[97,19715,19716],{"class":99,"line":9932},[97,19717,1738],{"class":103},[97,19719,19720],{"class":99,"line":9955},[97,19721,15503],{"class":103},[97,19723,19724,19727],{"class":99,"line":9979},[97,19725,19726],{"class":111},"    doWork",[97,19728,19729],{"class":103},"(p);\n",[97,19731,19732],{"class":99,"line":9984},[97,19733,1757],{"class":103},[97,19735,19736],{"class":99,"line":9989},[97,19737,19738],{"class":191},"\u002F\u002F 3.以值方式返回局部对象\n",[97,19740,19741,19743,19746],{"class":99,"line":9994},[97,19742,19236],{"class":111},[97,19744,19745],{"class":111}," doWork2",[97,19747,2167],{"class":103},[97,19749,19750],{"class":99,"line":10003},[97,19751,1738],{"class":103},[97,19753,19754],{"class":99,"line":10008},[97,19755,19226],{"class":103},[97,19757,19758,19760,19762,19764,19766,19768,19770,19772,19774,19776,19778],{"class":99,"line":10014},[97,19759,1743],{"class":103},[97,19761,1362],{"class":319},[97,19763,323],{"class":103},[97,19765,326],{"class":319},[97,19767,6709],{"class":319},[97,19769,749],{"class":103},[97,19771,673],{"class":319},[97,19773,7321],{"class":103},[97,19775,1362],{"class":319},[97,19777,1431],{"class":103},[97,19779,19780],{"class":191},"\u002F\u002F打印p1的地址\n",[97,19782,19783,19785,19788],{"class":99,"line":10035},[97,19784,4281],{"class":319},[97,19786,19787],{"class":103}," p1;",[97,19789,19790],{"class":191},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[97,19792,19793],{"class":99,"line":10041},[97,19794,1757],{"class":103},[97,19796,19797,19799,19801],{"class":99,"line":10055},[97,19798,5555],{"class":319},[97,19800,5920],{"class":111},[97,19802,2167],{"class":103},[97,19804,19805],{"class":99,"line":10061},[97,19806,1738],{"class":103},[97,19808,19809,19812,19814,19816],{"class":99,"line":10088},[97,19810,19811],{"class":103},"    Person p ",[97,19813,115],{"class":319},[97,19815,19745],{"class":111},[97,19817,5827],{"class":103},[97,19819,19820,19822,19824,19826,19828,19830,19832,19834,19836,19838,19840],{"class":99,"line":10097},[97,19821,1743],{"class":103},[97,19823,1362],{"class":319},[97,19825,323],{"class":103},[97,19827,326],{"class":319},[97,19829,6709],{"class":319},[97,19831,749],{"class":103},[97,19833,673],{"class":319},[97,19835,24],{"class":103},[97,19837,1362],{"class":319},[97,19839,1431],{"class":103},[97,19841,19842],{"class":191},"\u002F\u002F打印p的地址\n",[97,19844,19845],{"class":99,"line":10103},[97,19846,1757],{"class":103},[97,19848,19849],{"class":99,"line":10111},[97,19850,2591],{"emptyLinePlaceholder":249},[97,19852,19853],{"class":99,"line":10116},[97,19854,2591],{"emptyLinePlaceholder":249},[97,19856,19857,19859,19861],{"class":99,"line":16794},[97,19858,326],{"class":319},[97,19860,2164],{"class":111},[97,19862,2167],{"class":103},[97,19864,19865],{"class":99,"line":16800},[97,19866,1738],{"class":103},[97,19868,19869],{"class":99,"line":16823},[97,19870,19871],{"class":191},"    \u002F\u002F test01();\n",[97,19873,19874],{"class":99,"line":16829},[97,19875,19876],{"class":191},"    \u002F\u002F test02();\n",[97,19878,19879,19882],{"class":99,"line":16852},[97,19880,19881],{"class":111},"    test03",[97,19883,5827],{"class":103},[97,19885,19886],{"class":99,"line":16866},[97,19887,19888],{"class":191},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[97,19890,19891],{"class":99,"line":16886},[97,19892,19893],{"class":191},"\u002F\u002F 输出结果如下：\n",[97,19895,19896],{"class":99,"line":16892},[97,19897,19898],{"class":191},"\u002F\u002F Person的默认构造函数调用\n",[97,19900,19901],{"class":99,"line":16903},[97,19902,19903],{"class":191},"\u002F\u002F 0x7fffffffceec\n",[97,19905,19906],{"class":99,"line":16926},[97,19907,19903],{"class":191},[97,19909,19910],{"class":99,"line":16948},[97,19911,19912],{"class":191},"\u002F\u002F Person的析构函数调用\n",[97,19914,19915],{"class":99,"line":16953},[97,19916,2591],{"emptyLinePlaceholder":249},[97,19918,19919],{"class":99,"line":16959},[97,19920,19921],{"class":191},"\u002F\u002F 之前的输出结果如下：\n",[97,19923,19924],{"class":99,"line":16973},[97,19925,19898],{"class":191},[97,19927,19928],{"class":99,"line":16986},[97,19929,19930],{"class":191},"\u002F\u002F 地址\n",[97,19932,19933],{"class":99,"line":16991},[97,19934,19935],{"class":191},"\u002F\u002F Person的拷贝构造函数调用\n",[97,19937,19938],{"class":99,"line":17005},[97,19939,19912],{"class":191},[97,19941,19942],{"class":99,"line":17010},[97,19943,19930],{"class":191},[97,19945,19946],{"class":99,"line":17016},[97,19947,19948],{"class":191},"\u002F\u002F (这两次输出的地址也是不同的) \n",[97,19950,19951],{"class":99,"line":17021},[97,19952,19953],{"class":191},"\u002F\u002F Person的析构函数调用     \n",[97,19955,19956,19958,19960],{"class":99,"line":17035},[97,19957,4281],{"class":319},[97,19959,4284],{"class":370},[97,19961,1483],{"class":103},[97,19963,19964],{"class":99,"line":17040},[97,19965,1757],{"class":103},[24,19967,19968],{},"简化版理解",[87,19970,19972],{"className":310,"code":19971,"language":312,"meta":92,"style":92},"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",[94,19973,19974,19982,19986,19992,20005,20016,20020,20032,20045,20053,20057,20073,20086,20095,20099,20104,20110,20123,20127,20131,20138,20142,20146,20151,20159,20163,20179,20192,20205,20209,20214,20222,20226,20230,20235,20240,20256,20264,20271,20277,20281,20285,20290,20298,20302,20306,20329,20336,20340,20344,20352,20356,20366,20388,20392,20396,20400,20408,20412,20417,20422,20428,20432,20442,20446,20454],{"__ignoreMap":92},[97,19975,19976,19978,19980],{"class":99,"line":100},[97,19977,14885],{"class":319},[97,19979,15759],{"class":111},[97,19981,15762],{"class":103},[97,19983,19984],{"class":99,"line":195},[97,19985,14907],{"class":319},[97,19987,19988,19990],{"class":99,"line":241},[97,19989,18709],{"class":111},[97,19991,11044],{"class":103},[97,19993,19994,19996,19998,20001,20003],{"class":99,"line":1387},[97,19995,9860],{"class":103},[97,19997,1362],{"class":319},[97,19999,20000],{"class":118}," \"无参构造函数!\"",[97,20002,1637],{"class":319},[97,20004,9031],{"class":103},[97,20006,20007,20010,20012,20014],{"class":99,"line":1393},[97,20008,20009],{"class":103},"        mAge ",[97,20011,115],{"class":319},[97,20013,4284],{"class":370},[97,20015,1483],{"class":103},[97,20017,20018],{"class":99,"line":1407},[97,20019,2378],{"class":103},[97,20021,20022,20024,20026,20028,20030],{"class":99,"line":1413},[97,20023,18709],{"class":111},[97,20025,323],{"class":103},[97,20027,326],{"class":319},[97,20029,15879],{"class":5407},[97,20031,12633],{"class":103},[97,20033,20034,20036,20038,20041,20043],{"class":99,"line":1504},[97,20035,9860],{"class":103},[97,20037,1362],{"class":319},[97,20039,20040],{"class":118}," \"有参构造函数!\"",[97,20042,1637],{"class":319},[97,20044,9031],{"class":103},[97,20046,20047,20049,20051],{"class":99,"line":1510},[97,20048,20009],{"class":103},[97,20050,115],{"class":319},[97,20052,7988],{"class":103},[97,20054,20055],{"class":99,"line":1522},[97,20056,2378],{"class":103},[97,20058,20059,20061,20063,20065,20067,20069,20071],{"class":99,"line":1804},[97,20060,18709],{"class":111},[97,20062,323],{"class":103},[97,20064,6983],{"class":319},[97,20066,15759],{"class":111},[97,20068,673],{"class":319},[97,20070,7016],{"class":5407},[97,20072,12633],{"class":103},[97,20074,20075,20077,20079,20082,20084],{"class":99,"line":1809},[97,20076,9860],{"class":103},[97,20078,1362],{"class":319},[97,20080,20081],{"class":118}," \"拷贝构造函数!\"",[97,20083,1637],{"class":319},[97,20085,9031],{"class":103},[97,20087,20088,20090,20092],{"class":99,"line":1815},[97,20089,20009],{"class":103},[97,20091,115],{"class":319},[97,20093,20094],{"class":103}," p.mAge;\n",[97,20096,20097],{"class":99,"line":1820},[97,20098,2378],{"class":103},[97,20100,20101],{"class":99,"line":1834},[97,20102,20103],{"class":191},"    \u002F\u002F析构函数在释放内存之前调用\n",[97,20105,20106,20108],{"class":99,"line":1839},[97,20107,18742],{"class":111},[97,20109,11044],{"class":103},[97,20111,20112,20114,20116,20119,20121],{"class":99,"line":1845},[97,20113,9860],{"class":103},[97,20115,1362],{"class":319},[97,20117,20118],{"class":118}," \"析构函数!\"",[97,20120,1637],{"class":319},[97,20122,9031],{"class":103},[97,20124,20125],{"class":99,"line":1866},[97,20126,2378],{"class":103},[97,20128,20129],{"class":99,"line":1871},[97,20130,14907],{"class":319},[97,20132,20133,20135],{"class":99,"line":1885},[97,20134,2176],{"class":319},[97,20136,20137],{"class":103}," mAge;\n",[97,20139,20140],{"class":99,"line":1890},[97,20141,4186],{"class":103},[97,20143,20144],{"class":99,"line":1919},[97,20145,2591],{"emptyLinePlaceholder":249},[97,20147,20148],{"class":99,"line":1924},[97,20149,20150],{"class":191},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[97,20152,20153,20155,20157],{"class":99,"line":1941},[97,20154,5555],{"class":319},[97,20156,5779],{"class":111},[97,20158,11044],{"class":103},[97,20160,20161],{"class":99,"line":1946},[97,20162,2591],{"emptyLinePlaceholder":249},[97,20164,20165,20167,20170,20172,20174,20176],{"class":99,"line":1951},[97,20166,19621],{"class":103},[97,20168,20169],{"class":111},"man",[97,20171,323],{"class":103},[97,20173,631],{"class":370},[97,20175,6157],{"class":103},[97,20177,20178],{"class":191}," \u002F\u002Fp对象已经创建完毕\n",[97,20180,20181,20183,20186,20189],{"class":99,"line":1956},[97,20182,19621],{"class":103},[97,20184,20185],{"class":111},"newman",[97,20187,20188],{"class":103},"(man);",[97,20190,20191],{"class":191}," \u002F\u002F调用拷贝构造函数\n",[97,20193,20194,20197,20199,20202],{"class":99,"line":1970},[97,20195,20196],{"class":103},"    Person newman2 ",[97,20198,115],{"class":319},[97,20200,20201],{"class":103}," man;",[97,20203,20204],{"class":191}," \u002F\u002F拷贝构造\n",[97,20206,20207],{"class":99,"line":1975},[97,20208,2591],{"emptyLinePlaceholder":249},[97,20210,20211],{"class":99,"line":2768},[97,20212,20213],{"class":191},"    \u002F\u002FPerson newman3;\n",[97,20215,20216,20219],{"class":99,"line":2782},[97,20217,20218],{"class":191},"    \u002F\u002Fnewman3 = man;",[97,20220,20221],{"class":191}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[97,20223,20224],{"class":99,"line":2790},[97,20225,1757],{"class":103},[97,20227,20228],{"class":99,"line":2795},[97,20229,2591],{"emptyLinePlaceholder":249},[97,20231,20232],{"class":99,"line":2801},[97,20233,20234],{"class":191},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[97,20236,20237],{"class":99,"line":2807},[97,20238,20239],{"class":191},"\u002F\u002F相当于Person p1 = p;\n",[97,20241,20242,20244,20246,20248,20250,20253],{"class":99,"line":2812},[97,20243,5555],{"class":319},[97,20245,19676],{"class":111},[97,20247,323],{"class":103},[97,20249,19236],{"class":111},[97,20251,20252],{"class":5407}," p1",[97,20254,20255],{"class":103},") {}\n",[97,20257,20258,20260,20262],{"class":99,"line":8139},[97,20259,5555],{"class":319},[97,20261,5848],{"class":111},[97,20263,11044],{"class":103},[97,20265,20266,20268],{"class":99,"line":8163},[97,20267,18794],{"class":103},[97,20269,20270],{"class":191}," \u002F\u002F无参构造函数\n",[97,20272,20273,20275],{"class":99,"line":8168},[97,20274,19726],{"class":111},[97,20276,19729],{"class":103},[97,20278,20279],{"class":99,"line":8174},[97,20280,1757],{"class":103},[97,20282,20283],{"class":99,"line":8201},[97,20284,2591],{"emptyLinePlaceholder":249},[97,20286,20287],{"class":99,"line":8206},[97,20288,20289],{"class":191},"\u002F\u002F3. 以值方式返回局部对象\n",[97,20291,20292,20294,20296],{"class":99,"line":8212},[97,20293,19236],{"class":111},[97,20295,19745],{"class":111},[97,20297,2167],{"class":103},[97,20299,20300],{"class":99,"line":8224},[97,20301,1738],{"class":103},[97,20303,20304],{"class":99,"line":8236},[97,20305,19226],{"class":103},[97,20307,20308,20310,20312,20314,20316,20318,20320,20322,20325,20327],{"class":99,"line":8248},[97,20309,6720],{"class":103},[97,20311,1362],{"class":319},[97,20313,1850],{"class":103},[97,20315,326],{"class":319},[97,20317,6709],{"class":319},[97,20319,749],{"class":103},[97,20321,673],{"class":319},[97,20323,20324],{"class":103},"p1 ",[97,20326,1362],{"class":319},[97,20328,9031],{"class":103},[97,20330,20331,20333],{"class":99,"line":9907},[97,20332,4281],{"class":319},[97,20334,20335],{"class":103}," p1;\n",[97,20337,20338],{"class":99,"line":9932},[97,20339,1757],{"class":103},[97,20341,20342],{"class":99,"line":9955},[97,20343,2591],{"emptyLinePlaceholder":249},[97,20345,20346,20348,20350],{"class":99,"line":9979},[97,20347,5555],{"class":319},[97,20349,5920],{"class":111},[97,20351,2167],{"class":103},[97,20353,20354],{"class":99,"line":9984},[97,20355,1738],{"class":103},[97,20357,20358,20360,20362,20364],{"class":99,"line":9989},[97,20359,19811],{"class":103},[97,20361,115],{"class":319},[97,20363,19745],{"class":111},[97,20365,5827],{"class":103},[97,20367,20368,20370,20372,20374,20376,20378,20380,20382,20384,20386],{"class":99,"line":9994},[97,20369,6720],{"class":103},[97,20371,1362],{"class":319},[97,20373,1850],{"class":103},[97,20375,326],{"class":319},[97,20377,6709],{"class":319},[97,20379,749],{"class":103},[97,20381,673],{"class":319},[97,20383,11639],{"class":103},[97,20385,1362],{"class":319},[97,20387,9031],{"class":103},[97,20389,20390],{"class":99,"line":10003},[97,20391,1757],{"class":103},[97,20393,20394],{"class":99,"line":10008},[97,20395,2591],{"emptyLinePlaceholder":249},[97,20397,20398],{"class":99,"line":10014},[97,20399,2591],{"emptyLinePlaceholder":249},[97,20401,20402,20404,20406],{"class":99,"line":10035},[97,20403,326],{"class":319},[97,20405,2164],{"class":111},[97,20407,11044],{"class":103},[97,20409,20410],{"class":99,"line":10041},[97,20411,2591],{"emptyLinePlaceholder":249},[97,20413,20414],{"class":99,"line":10055},[97,20415,20416],{"class":191},"    \u002F\u002Ftest01();\n",[97,20418,20419],{"class":99,"line":10061},[97,20420,20421],{"class":191},"    \u002F\u002Ftest02();\n",[97,20423,20424,20426],{"class":99,"line":10088},[97,20425,19881],{"class":111},[97,20427,5827],{"class":103},[97,20429,20430],{"class":99,"line":10097},[97,20431,2591],{"emptyLinePlaceholder":249},[97,20433,20434,20436,20438,20440],{"class":99,"line":10103},[97,20435,2494],{"class":111},[97,20437,323],{"class":103},[97,20439,2499],{"class":118},[97,20441,2910],{"class":103},[97,20443,20444],{"class":99,"line":10111},[97,20445,2591],{"emptyLinePlaceholder":249},[97,20447,20448,20450,20452],{"class":99,"line":10116},[97,20449,4281],{"class":319},[97,20451,4284],{"class":370},[97,20453,1483],{"class":103},[97,20455,20456],{"class":99,"line":16794},[97,20457,1757],{"class":103},[48,20459,20461],{"id":20460},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[24,20463,20464],{},"默认情况下，c++编译器至少给一个类添加3个函数",[24,20466,20467],{},"1．默认构造函数(无参，函数体为空)",[24,20469,20470],{},"2．默认析构函数(无参，函数体为空)",[24,20472,20473],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[24,20475,20476],{},"构造函数调用规则如下：",[67,20478,20479,20482],{},[70,20480,20481],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[70,20483,20484],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[87,20486,20488],{"className":310,"code":20487,"language":312,"meta":92,"style":92},"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",[94,20489,20490,20498,20502,20507,20513,20525,20529,20534,20546,20555,20567,20571,20575,20591,20600,20612,20616,20620,20626,20638,20642,20646,20652,20656,20660,20668,20672,20684,20689,20697,20701,20719,20723,20727,20735,20739,20744,20752,20767,20780,20784,20789,20796,20812,20825,20829,20833,20841,20845,20851,20855,20865,20869,20877],{"__ignoreMap":92},[97,20491,20492,20494,20496],{"class":99,"line":100},[97,20493,14885],{"class":319},[97,20495,15759],{"class":111},[97,20497,15762],{"class":103},[97,20499,20500],{"class":99,"line":195},[97,20501,14907],{"class":319},[97,20503,20504],{"class":99,"line":241},[97,20505,20506],{"class":191},"    \u002F\u002F无参（默认）构造函数\n",[97,20508,20509,20511],{"class":99,"line":1387},[97,20510,18709],{"class":111},[97,20512,11044],{"class":103},[97,20514,20515,20517,20519,20521,20523],{"class":99,"line":1393},[97,20516,9860],{"class":103},[97,20518,1362],{"class":319},[97,20520,20000],{"class":118},[97,20522,1637],{"class":319},[97,20524,9031],{"class":103},[97,20526,20527],{"class":99,"line":1407},[97,20528,2378],{"class":103},[97,20530,20531],{"class":99,"line":1413},[97,20532,20533],{"class":191},"    \u002F\u002F有参构造函数\n",[97,20535,20536,20538,20540,20542,20544],{"class":99,"line":1504},[97,20537,18709],{"class":111},[97,20539,323],{"class":103},[97,20541,326],{"class":319},[97,20543,1591],{"class":5407},[97,20545,12633],{"class":103},[97,20547,20548,20551,20553],{"class":99,"line":1510},[97,20549,20550],{"class":103},"        age ",[97,20552,115],{"class":319},[97,20554,1625],{"class":103},[97,20556,20557,20559,20561,20563,20565],{"class":99,"line":1522},[97,20558,9860],{"class":103},[97,20560,1362],{"class":319},[97,20562,20040],{"class":118},[97,20564,1637],{"class":319},[97,20566,9031],{"class":103},[97,20568,20569],{"class":99,"line":1804},[97,20570,2378],{"class":103},[97,20572,20573],{"class":99,"line":1809},[97,20574,19064],{"class":191},[97,20576,20577,20579,20581,20583,20585,20587,20589],{"class":99,"line":1815},[97,20578,18709],{"class":111},[97,20580,323],{"class":103},[97,20582,6983],{"class":319},[97,20584,15759],{"class":111},[97,20586,673],{"class":319},[97,20588,7016],{"class":5407},[97,20590,12633],{"class":103},[97,20592,20593,20595,20597],{"class":99,"line":1820},[97,20594,20550],{"class":103},[97,20596,115],{"class":319},[97,20598,20599],{"class":103}," p.age;\n",[97,20601,20602,20604,20606,20608,20610],{"class":99,"line":1834},[97,20603,9860],{"class":103},[97,20605,1362],{"class":319},[97,20607,20081],{"class":118},[97,20609,1637],{"class":319},[97,20611,9031],{"class":103},[97,20613,20614],{"class":99,"line":1839},[97,20615,2378],{"class":103},[97,20617,20618],{"class":99,"line":1845},[97,20619,18737],{"class":191},[97,20621,20622,20624],{"class":99,"line":1866},[97,20623,18742],{"class":111},[97,20625,11044],{"class":103},[97,20627,20628,20630,20632,20634,20636],{"class":99,"line":1871},[97,20629,9860],{"class":103},[97,20631,1362],{"class":319},[97,20633,20118],{"class":118},[97,20635,1637],{"class":319},[97,20637,9031],{"class":103},[97,20639,20640],{"class":99,"line":1885},[97,20641,2378],{"class":103},[97,20643,20644],{"class":99,"line":1890},[97,20645,14907],{"class":319},[97,20647,20648,20650],{"class":99,"line":1919},[97,20649,2176],{"class":319},[97,20651,7988],{"class":103},[97,20653,20654],{"class":99,"line":1924},[97,20655,4186],{"class":103},[97,20657,20658],{"class":99,"line":1941},[97,20659,2591],{"emptyLinePlaceholder":249},[97,20661,20662,20664,20666],{"class":99,"line":1946},[97,20663,5555],{"class":319},[97,20665,5779],{"class":111},[97,20667,2167],{"class":103},[97,20669,20670],{"class":99,"line":1951},[97,20671,1738],{"class":103},[97,20673,20674,20676,20678,20680,20682],{"class":99,"line":1956},[97,20675,19621],{"class":103},[97,20677,7321],{"class":111},[97,20679,323],{"class":103},[97,20681,970],{"class":370},[97,20683,2910],{"class":103},[97,20685,20686],{"class":99,"line":1970},[97,20687,20688],{"class":191},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[97,20690,20691,20693,20695],{"class":99,"line":1975},[97,20692,19621],{"class":103},[97,20694,7224],{"class":111},[97,20696,17705],{"class":103},[97,20698,20699],{"class":99,"line":2768},[97,20700,2591],{"emptyLinePlaceholder":249},[97,20702,20703,20705,20707,20710,20712,20715,20717],{"class":99,"line":2782},[97,20704,6720],{"class":103},[97,20706,1362],{"class":319},[97,20708,20709],{"class":118}," \"p2的年龄为： \"",[97,20711,1637],{"class":319},[97,20713,20714],{"class":103}," p2.age ",[97,20716,1362],{"class":319},[97,20718,9031],{"class":103},[97,20720,20721],{"class":99,"line":2790},[97,20722,1757],{"class":103},[97,20724,20725],{"class":99,"line":2795},[97,20726,2591],{"emptyLinePlaceholder":249},[97,20728,20729,20731,20733],{"class":99,"line":2801},[97,20730,5555],{"class":319},[97,20732,5848],{"class":111},[97,20734,2167],{"class":103},[97,20736,20737],{"class":99,"line":2807},[97,20738,1738],{"class":103},[97,20740,20741],{"class":99,"line":2812},[97,20742,20743],{"class":191},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[97,20745,20746,20749],{"class":99,"line":8139},[97,20747,20748],{"class":103},"    Person p1;",[97,20750,20751],{"class":191}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[97,20753,20754,20756,20758,20760,20762,20764],{"class":99,"line":8163},[97,20755,19621],{"class":103},[97,20757,7224],{"class":111},[97,20759,323],{"class":103},[97,20761,766],{"class":370},[97,20763,6157],{"class":103},[97,20765,20766],{"class":191}," \u002F\u002F用户提供的有参\n",[97,20768,20769,20771,20774,20777],{"class":99,"line":8168},[97,20770,19621],{"class":103},[97,20772,20773],{"class":111},"p3",[97,20775,20776],{"class":103},"(p2);",[97,20778,20779],{"class":191}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[97,20781,20782],{"class":99,"line":8174},[97,20783,2591],{"emptyLinePlaceholder":249},[97,20785,20786],{"class":99,"line":8201},[97,20787,20788],{"class":191},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[97,20790,20791,20794],{"class":99,"line":8206},[97,20792,20793],{"class":103},"    Person p4;",[97,20795,20751],{"class":191},[97,20797,20798,20800,20803,20805,20807,20809],{"class":99,"line":8212},[97,20799,19621],{"class":103},[97,20801,20802],{"class":111},"p5",[97,20804,323],{"class":103},[97,20806,766],{"class":370},[97,20808,6157],{"class":103},[97,20810,20811],{"class":191}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[97,20813,20814,20816,20819,20822],{"class":99,"line":8224},[97,20815,19621],{"class":103},[97,20817,20818],{"class":111},"p6",[97,20820,20821],{"class":103},"(p5);",[97,20823,20824],{"class":191}," \u002F\u002F用户自己提供拷贝构造\n",[97,20826,20827],{"class":99,"line":8236},[97,20828,1757],{"class":103},[97,20830,20831],{"class":99,"line":8248},[97,20832,2591],{"emptyLinePlaceholder":249},[97,20834,20835,20837,20839],{"class":99,"line":9907},[97,20836,326],{"class":319},[97,20838,2164],{"class":111},[97,20840,11044],{"class":103},[97,20842,20843],{"class":99,"line":9932},[97,20844,2591],{"emptyLinePlaceholder":249},[97,20846,20847,20849],{"class":99,"line":9955},[97,20848,5824],{"class":111},[97,20850,5827],{"class":103},[97,20852,20853],{"class":99,"line":9979},[97,20854,2591],{"emptyLinePlaceholder":249},[97,20856,20857,20859,20861,20863],{"class":99,"line":9984},[97,20858,2494],{"class":111},[97,20860,323],{"class":103},[97,20862,2499],{"class":118},[97,20864,2910],{"class":103},[97,20866,20867],{"class":99,"line":9989},[97,20868,2591],{"emptyLinePlaceholder":249},[97,20870,20871,20873,20875],{"class":99,"line":9994},[97,20872,4281],{"class":319},[97,20874,4284],{"class":370},[97,20876,1483],{"class":103},[97,20878,20879],{"class":99,"line":10003},[97,20880,1757],{"class":103},[48,20882,20884],{"id":20883},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[24,20886,20887],{},"浅拷贝：简单的赋值拷贝操作",[24,20889,20890],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[87,20892,20894],{"className":310,"code":20893,"language":312,"meta":92,"style":92},"#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",[94,20895,20896,20902,20912,20918,20922,20926,20931,20937,20941,20954,20958,20962,20969,20973,20983,20998,21011,21015,21020,21025,21041,21045,21058,21063,21068,21073,21082,21087,21102,21106,21110,21114,21120,21124,21129,21144,21148,21159,21173,21177,21186,21190,21196,21208,21212,21220,21224,21241,21272,21280,21308,21312,21316,21324,21328,21334],{"__ignoreMap":92},[97,20897,20898,20900],{"class":99,"line":100},[97,20899,2141],{"class":319},[97,20901,2144],{"class":118},[97,20903,20904,20906,20908,20910],{"class":99,"line":195},[97,20905,2149],{"class":319},[97,20907,2152],{"class":319},[97,20909,2155],{"class":111},[97,20911,1483],{"class":103},[97,20913,20914,20916],{"class":99,"line":241},[97,20915,14885],{"class":319},[97,20917,15361],{"class":111},[97,20919,20920],{"class":99,"line":1387},[97,20921,1738],{"class":103},[97,20923,20924],{"class":99,"line":1393},[97,20925,14907],{"class":319},[97,20927,20928],{"class":99,"line":1407},[97,20929,20930],{"class":191},"    \u002F\u002F默认构造函数\n",[97,20932,20933,20935],{"class":99,"line":1413},[97,20934,18709],{"class":111},[97,20936,2167],{"class":103},[97,20938,20939],{"class":99,"line":1504},[97,20940,2221],{"class":103},[97,20942,20943,20945,20947,20950,20952],{"class":99,"line":1510},[97,20944,3642],{"class":103},[97,20946,1362],{"class":319},[97,20948,20949],{"class":118},"\"默认构造函数\"",[97,20951,1362],{"class":319},[97,20953,1384],{"class":103},[97,20955,20956],{"class":99,"line":1522},[97,20957,2378],{"class":103},[97,20959,20960],{"class":99,"line":1804},[97,20961,20533],{"class":191},[97,20963,20964,20966],{"class":99,"line":1809},[97,20965,18742],{"class":111},[97,20967,20968],{"class":103},"(int age,int height)\n",[97,20970,20971],{"class":99,"line":1815},[97,20972,2221],{"class":103},[97,20974,20975,20978,20980],{"class":99,"line":1820},[97,20976,20977],{"class":103},"        m_Age",[97,20979,115],{"class":319},[97,20981,20982],{"class":103},"age;\n",[97,20984,20985,20988,20990,20992,20995],{"class":99,"line":1834},[97,20986,20987],{"class":103},"        m_Height",[97,20989,11908],{"class":319},[97,20991,2573],{"class":319},[97,20993,20994],{"class":103},"(height);",[97,20996,20997],{"class":191},"\u002F\u002F放到堆区\n",[97,20999,21000,21002,21004,21007,21009],{"class":99,"line":1839},[97,21001,3642],{"class":103},[97,21003,1362],{"class":319},[97,21005,21006],{"class":118},"\"有参构造函数\"",[97,21008,1362],{"class":319},[97,21010,1384],{"class":103},[97,21012,21013],{"class":99,"line":1845},[97,21014,2378],{"class":103},[97,21016,21017],{"class":99,"line":1866},[97,21018,21019],{"class":191},"    \u002F\u002F深拷贝解决上述问题\n",[97,21021,21022],{"class":99,"line":1871},[97,21023,21024],{"class":191},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[97,21026,21027,21029,21031,21033,21035,21037,21039],{"class":99,"line":1885},[97,21028,18709],{"class":111},[97,21030,323],{"class":103},[97,21032,6983],{"class":319},[97,21034,15759],{"class":111},[97,21036,10775],{"class":319},[97,21038,24],{"class":5407},[97,21040,329],{"class":103},[97,21042,21043],{"class":99,"line":1890},[97,21044,2221],{"class":103},[97,21046,21047,21049,21051,21054,21056],{"class":99,"line":1919},[97,21048,3642],{"class":103},[97,21050,1362],{"class":319},[97,21052,21053],{"class":118},"\"拷贝构造函数\"",[97,21055,1362],{"class":319},[97,21057,1384],{"class":103},[97,21059,21060],{"class":99,"line":1924},[97,21061,21062],{"class":191},"        \u002F\u002F编译器默认的写如下注释部分\n",[97,21064,21065],{"class":99,"line":1941},[97,21066,21067],{"class":191},"        \u002F\u002Fm_Age=p.m_Age;\n",[97,21069,21070],{"class":99,"line":1946},[97,21071,21072],{"class":191},"        \u002F\u002Fm_Height=p.m_Height;\n",[97,21074,21075,21077,21079],{"class":99,"line":1951},[97,21076,20977],{"class":103},[97,21078,115],{"class":319},[97,21080,21081],{"class":103},"p.m_Age;\n",[97,21083,21084],{"class":99,"line":1956},[97,21085,21086],{"class":191},"        \u002F\u002F深拷贝操作\n",[97,21088,21089,21091,21093,21095,21097,21099],{"class":99,"line":1970},[97,21090,20987],{"class":103},[97,21092,11908],{"class":319},[97,21094,2573],{"class":319},[97,21096,323],{"class":103},[97,21098,775],{"class":319},[97,21100,21101],{"class":103},"p.m_Height);\n",[97,21103,21104],{"class":99,"line":1975},[97,21105,2378],{"class":103},[97,21107,21108],{"class":99,"line":2768},[97,21109,2591],{"emptyLinePlaceholder":249},[97,21111,21112],{"class":99,"line":2782},[97,21113,18737],{"class":191},[97,21115,21116,21118],{"class":99,"line":2790},[97,21117,18742],{"class":111},[97,21119,2167],{"class":103},[97,21121,21122],{"class":99,"line":2795},[97,21123,2221],{"class":103},[97,21125,21126],{"class":99,"line":2801},[97,21127,21128],{"class":191},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[97,21130,21131,21133,21136,21139,21142],{"class":99,"line":2807},[97,21132,2688],{"class":319},[97,21134,21135],{"class":103},"(m_Height ",[97,21137,21138],{"class":319},"!=",[97,21140,21141],{"class":370}," NULL",[97,21143,329],{"class":103},[97,21145,21146],{"class":99,"line":2812},[97,21147,2701],{"class":103},[97,21149,21150,21153,21156],{"class":99,"line":8139},[97,21151,21152],{"class":319},"            delete",[97,21154,21155],{"class":103}," m_Height;",[97,21157,21158],{"class":191}," \u002F\u002F释放堆区内存\n",[97,21160,21161,21164,21166,21168,21170],{"class":99,"line":8163},[97,21162,21163],{"class":103},"            m_Height",[97,21165,115],{"class":319},[97,21167,2583],{"class":370},[97,21169,377],{"class":103},[97,21171,21172],{"class":191}," \u002F\u002F防止野指针\n",[97,21174,21175],{"class":99,"line":8168},[97,21176,2720],{"class":103},[97,21178,21179,21181,21183],{"class":99,"line":8174},[97,21180,3642],{"class":103},[97,21182,1362],{"class":319},[97,21184,21185],{"class":118},"\"Person的析构函数调用\"\n",[97,21187,21188],{"class":99,"line":8201},[97,21189,2378],{"class":103},[97,21191,21192,21194],{"class":99,"line":8206},[97,21193,2176],{"class":319},[97,21195,15856],{"class":103},[97,21197,21198,21200,21202,21205],{"class":99,"line":8212},[97,21199,2176],{"class":319},[97,21201,6709],{"class":319},[97,21203,21204],{"class":103},"m_Height;",[97,21206,21207],{"class":191}," \u002F\u002F定义一个指针，指向身高\n",[97,21209,21210],{"class":99,"line":8224},[97,21211,4186],{"class":103},[97,21213,21214,21216,21218],{"class":99,"line":8236},[97,21215,5555],{"class":319},[97,21217,5779],{"class":111},[97,21219,2167],{"class":103},[97,21221,21222],{"class":99,"line":8248},[97,21223,1738],{"class":103},[97,21225,21226,21228,21230,21232,21234,21236,21239],{"class":99,"line":9907},[97,21227,19621],{"class":103},[97,21229,7321],{"class":111},[97,21231,323],{"class":103},[97,21233,970],{"class":370},[97,21235,698],{"class":103},[97,21237,21238],{"class":370},"160",[97,21240,2910],{"class":103},[97,21242,21243,21245,21247,21250,21252,21255,21257,21260,21262,21265,21267,21269],{"class":99,"line":9932},[97,21244,1743],{"class":103},[97,21246,1362],{"class":319},[97,21248,21249],{"class":118},"\"p1的年龄为:\"",[97,21251,1362],{"class":319},[97,21253,21254],{"class":103},"p1.m_Age",[97,21256,1362],{"class":319},[97,21258,21259],{"class":118},"\"身高为：\"",[97,21261,6610],{"class":319},[97,21263,21264],{"class":103},"p1.m_Height",[97,21266,1362],{"class":319},[97,21268,1431],{"class":103},[97,21270,21271],{"class":191},"  \u002F\u002F18\n",[97,21273,21274,21276,21278],{"class":99,"line":9955},[97,21275,19621],{"class":103},[97,21277,7224],{"class":111},[97,21279,17705],{"class":103},[97,21281,21282,21284,21286,21289,21291,21293,21295,21297,21299,21302,21304,21306],{"class":99,"line":9979},[97,21283,1743],{"class":103},[97,21285,1362],{"class":319},[97,21287,21288],{"class":118},"\"p2的年龄为：\"",[97,21290,1362],{"class":319},[97,21292,19651],{"class":103},[97,21294,1362],{"class":319},[97,21296,21259],{"class":118},[97,21298,6610],{"class":319},[97,21300,21301],{"class":103},"p2.m_Height",[97,21303,1362],{"class":319},[97,21305,1431],{"class":103},[97,21307,21271],{"class":191},[97,21309,21310],{"class":99,"line":9984},[97,21311,13401],{"class":103},[97,21313,21314],{"class":99,"line":9989},[97,21315,1757],{"class":103},[97,21317,21318,21320,21322],{"class":99,"line":9994},[97,21319,326],{"class":319},[97,21321,2164],{"class":111},[97,21323,2167],{"class":103},[97,21325,21326],{"class":99,"line":10003},[97,21327,1738],{"class":103},[97,21329,21330,21332],{"class":99,"line":10008},[97,21331,5824],{"class":111},[97,21333,5827],{"class":103},[97,21335,21336],{"class":99,"line":10014},[97,21337,1757],{"class":103},[24,21339,21340],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[24,21342,21343],{},"浅拷贝带来的问题是堆区的内存重复释放",[24,21345,21346],{},[19,21347],{"alt":92,"src":21348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[24,21350,21351],{},"浅拷贝问题要使用深拷贝来解决",[24,21353,21354],{},[19,21355],{"alt":92,"src":21356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[24,21358,21359],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[48,21361,21363],{"id":21362},"_826初始化列表","8.2.6初始化列表",[24,21365,21366],{},"作用：初始化属性",[24,21368,5372],{},[87,21370,21373],{"className":21371,"code":21372,"language":5378},[5376],"构造函数():属性1(值1),属性2(值2).....{}\n",[94,21374,21372],{"__ignoreMap":92},[24,21376,21377],{},"例子",[87,21379,21381],{"className":310,"code":21380,"language":312,"meta":92,"style":92},"#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",[94,21382,21383,21389,21399,21405,21409,21414,21418,21423,21428,21433,21438,21443,21448,21452,21457,21462,21505,21514,21532,21550,21568,21572,21576,21583,21590,21597,21601,21605,21613,21617,21621,21641,21650,21654,21658,21668,21672,21680],{"__ignoreMap":92},[97,21384,21385,21387],{"class":99,"line":100},[97,21386,2141],{"class":319},[97,21388,2144],{"class":118},[97,21390,21391,21393,21395,21397],{"class":99,"line":195},[97,21392,2149],{"class":319},[97,21394,2152],{"class":319},[97,21396,2155],{"class":111},[97,21398,1483],{"class":103},[97,21400,21401,21403],{"class":99,"line":241},[97,21402,14885],{"class":319},[97,21404,15361],{"class":111},[97,21406,21407],{"class":99,"line":1387},[97,21408,1738],{"class":103},[97,21410,21411],{"class":99,"line":1393},[97,21412,21413],{"class":319},"    public:\n",[97,21415,21416],{"class":99,"line":1407},[97,21417,2591],{"emptyLinePlaceholder":249},[97,21419,21420],{"class":99,"line":1413},[97,21421,21422],{"class":191},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[97,21424,21425],{"class":99,"line":1504},[97,21426,21427],{"class":191},"    \u002F\u002FPerson(int a, int b, int c) {\n",[97,21429,21430],{"class":99,"line":1510},[97,21431,21432],{"class":191},"    \u002F\u002F  m_A = a;\n",[97,21434,21435],{"class":99,"line":1522},[97,21436,21437],{"class":191},"    \u002F\u002F  m_B = b;\n",[97,21439,21440],{"class":99,"line":1804},[97,21441,21442],{"class":191},"    \u002F\u002F  m_C = c;\n",[97,21444,21445],{"class":99,"line":1809},[97,21446,21447],{"class":191},"    \u002F\u002F}\n",[97,21449,21450],{"class":99,"line":1815},[97,21451,2591],{"emptyLinePlaceholder":249},[97,21453,21454],{"class":99,"line":1820},[97,21455,21456],{"class":191},"    \u002F\u002F初始化列表方式初始化\n",[97,21458,21459],{"class":99,"line":1834},[97,21460,21461],{"class":191},"    \u002F\u002F使用有参构造函数\n",[97,21463,21464,21466,21468,21470,21472,21474,21476,21478,21480,21482,21484,21487,21490,21493,21496,21499,21502],{"class":99,"line":1839},[97,21465,18709],{"class":111},[97,21467,323],{"class":103},[97,21469,326],{"class":319},[97,21471,1591],{"class":5407},[97,21473,12626],{"class":103},[97,21475,326],{"class":319},[97,21477,3024],{"class":5407},[97,21479,12626],{"class":103},[97,21481,326],{"class":319},[97,21483,3040],{"class":5407},[97,21485,21486],{"class":103},") :",[97,21488,21489],{"class":111},"m_A",[97,21491,21492],{"class":103},"(a), ",[97,21494,21495],{"class":111},"m_B",[97,21497,21498],{"class":103},"(b), ",[97,21500,21501],{"class":111},"m_C",[97,21503,21504],{"class":103},"(c) {}\n",[97,21506,21507,21509,21512],{"class":99,"line":1845},[97,21508,15100],{"class":319},[97,21510,21511],{"class":111}," PrintPerson",[97,21513,11044],{"class":103},[97,21515,21516,21518,21520,21523,21525,21528,21530],{"class":99,"line":1866},[97,21517,9860],{"class":103},[97,21519,1362],{"class":319},[97,21521,21522],{"class":118}," \"mA:\"",[97,21524,1637],{"class":319},[97,21526,21527],{"class":103}," m_A ",[97,21529,1362],{"class":319},[97,21531,9031],{"class":103},[97,21533,21534,21536,21538,21541,21543,21546,21548],{"class":99,"line":1871},[97,21535,9860],{"class":103},[97,21537,1362],{"class":319},[97,21539,21540],{"class":118}," \"mB:\"",[97,21542,1637],{"class":319},[97,21544,21545],{"class":103}," m_B ",[97,21547,1362],{"class":319},[97,21549,9031],{"class":103},[97,21551,21552,21554,21556,21559,21561,21564,21566],{"class":99,"line":1885},[97,21553,9860],{"class":103},[97,21555,1362],{"class":319},[97,21557,21558],{"class":118}," \"mC:\"",[97,21560,1637],{"class":319},[97,21562,21563],{"class":103}," m_C ",[97,21565,1362],{"class":319},[97,21567,9031],{"class":103},[97,21569,21570],{"class":99,"line":1890},[97,21571,2378],{"class":103},[97,21573,21574],{"class":99,"line":1919},[97,21575,15412],{"class":319},[97,21577,21578,21580],{"class":99,"line":1924},[97,21579,2176],{"class":319},[97,21581,21582],{"class":103}," m_A;\n",[97,21584,21585,21587],{"class":99,"line":1941},[97,21586,2176],{"class":319},[97,21588,21589],{"class":103}," m_B;\n",[97,21591,21592,21594],{"class":99,"line":1946},[97,21593,2176],{"class":319},[97,21595,21596],{"class":103}," m_C;\n",[97,21598,21599],{"class":99,"line":1951},[97,21600,4186],{"class":103},[97,21602,21603],{"class":99,"line":1956},[97,21604,2591],{"emptyLinePlaceholder":249},[97,21606,21607,21609,21611],{"class":99,"line":1970},[97,21608,326],{"class":319},[97,21610,2164],{"class":111},[97,21612,6169],{"class":103},[97,21614,21615],{"class":99,"line":1975},[97,21616,1738],{"class":103},[97,21618,21619],{"class":99,"line":2768},[97,21620,2591],{"emptyLinePlaceholder":249},[97,21622,21623,21625,21627,21629,21631,21633,21635,21637,21639],{"class":99,"line":2782},[97,21624,19621],{"class":103},[97,21626,24],{"class":111},[97,21628,323],{"class":103},[97,21630,537],{"class":370},[97,21632,12626],{"class":103},[97,21634,398],{"class":370},[97,21636,12626],{"class":103},[97,21638,392],{"class":370},[97,21640,2910],{"class":103},[97,21642,21643,21645,21648],{"class":99,"line":2790},[97,21644,16056],{"class":103},[97,21646,21647],{"class":111},"PrintPerson",[97,21649,5827],{"class":103},[97,21651,21652],{"class":99,"line":2795},[97,21653,2591],{"emptyLinePlaceholder":249},[97,21655,21656],{"class":99,"line":2801},[97,21657,2591],{"emptyLinePlaceholder":249},[97,21659,21660,21662,21664,21666],{"class":99,"line":2807},[97,21661,2494],{"class":111},[97,21663,323],{"class":103},[97,21665,2499],{"class":118},[97,21667,2910],{"class":103},[97,21669,21670],{"class":99,"line":2812},[97,21671,2591],{"emptyLinePlaceholder":249},[97,21673,21674,21676,21678],{"class":99,"line":8139},[97,21675,4281],{"class":319},[97,21677,4284],{"class":370},[97,21679,1483],{"class":103},[97,21681,21682],{"class":99,"line":8163},[97,21683,1757],{"class":103},[24,21685,21686,21687,21690,21691],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[469,21688,21689],{},"参数名就是定义的对象属性","，",[469,21692,21693],{},"属性后面的值为有参构造函数的形参",[87,21695,21697],{"className":310,"code":21696,"language":312,"meta":92,"style":92},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[94,21698,21699],{"__ignoreMap":92},[97,21700,21701,21703,21705,21707,21710,21712,21715,21717,21720,21722,21725,21727,21730,21732],{"class":99,"line":100},[97,21702,19236],{"class":111},[97,21704,323],{"class":103},[97,21706,326],{"class":319},[97,21708,21709],{"class":103}," a.",[97,21711,326],{"class":319},[97,21713,21714],{"class":103}," b,",[97,21716,326],{"class":319},[97,21718,21719],{"class":103}," b):",[97,21721,21489],{"class":111},[97,21723,21724],{"class":103},"(a),",[97,21726,21495],{"class":111},[97,21728,21729],{"class":103},"(c),",[97,21731,21501],{"class":111},[97,21733,21734],{"class":103},"(b) {}\n",[48,21736,21738],{"id":21737},"_827类对象作为类成员","8.2.7类对象作为类成员",[24,21740,21741],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[24,21743,14824],{},[87,21745,21747],{"className":310,"code":21746,"language":312,"meta":92,"style":92},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[94,21748,21749,21754,21759,21763,21768,21772],{"__ignoreMap":92},[97,21750,21751],{"class":99,"line":100},[97,21752,21753],{"class":103},"A{};\n",[97,21755,21756],{"class":99,"line":195},[97,21757,21758],{"class":103},"B\n",[97,21760,21761],{"class":99,"line":241},[97,21762,1738],{"class":103},[97,21764,21765],{"class":99,"line":1387},[97,21766,21767],{"class":103},"    A a;\n",[97,21769,21770],{"class":99,"line":1393},[97,21771,1757],{"class":103},[97,21773,21774],{"class":99,"line":1407},[97,21775,21776],{"class":191},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[24,21778,21779],{},"案例",[87,21781,21783],{"className":310,"code":21782,"language":312,"meta":92,"style":92},"\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",[94,21784,21785,21790,21797,21801,21806,21811,21825,21829,21839,21850,21854,21861,21865,21878,21882,21887,21892,21896,21902,21906,21910,21914,21945,21949,21960,21964,21970,21974,21987,21991,21995,21999,22004,22009,22013,22021,22025,22042,22061,22065,22073,22077,22083],{"__ignoreMap":92},[97,21786,21787],{"class":99,"line":100},[97,21788,21789],{"class":191},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[97,21791,21792,21794],{"class":99,"line":195},[97,21793,14885],{"class":319},[97,21795,21796],{"class":111}," Phone\n",[97,21798,21799],{"class":99,"line":241},[97,21800,1738],{"class":103},[97,21802,21803],{"class":99,"line":1387},[97,21804,21805],{"class":103},"public：\n",[97,21807,21808],{"class":99,"line":1393},[97,21809,21810],{"class":191},"    \u002F\u002F 赋值(构造函数)\n",[97,21812,21813,21816,21818,21820,21823],{"class":99,"line":1407},[97,21814,21815],{"class":111},"    Phone",[97,21817,323],{"class":103},[97,21819,15108],{"class":111},[97,21821,21822],{"class":5407}," pName",[97,21824,329],{"class":103},[97,21826,21827],{"class":99,"line":1413},[97,21828,2221],{"class":103},[97,21830,21831,21834,21836],{"class":99,"line":1504},[97,21832,21833],{"class":103},"        m_pName",[97,21835,115],{"class":319},[97,21837,21838],{"class":103},"pName;\n",[97,21840,21841,21843,21845,21848],{"class":99,"line":1510},[97,21842,3642],{"class":103},[97,21844,1362],{"class":319},[97,21846,21847],{"class":118},"\"Phone的构造函数调用\"",[97,21849,1483],{"class":103},[97,21851,21852],{"class":99,"line":1522},[97,21853,2378],{"class":103},[97,21855,21856,21859],{"class":99,"line":1804},[97,21857,21858],{"class":111},"    ~Phone",[97,21860,2167],{"class":103},[97,21862,21863],{"class":99,"line":1809},[97,21864,2221],{"class":103},[97,21866,21867,21869,21871,21874,21876],{"class":99,"line":1815},[97,21868,3642],{"class":103},[97,21870,1362],{"class":319},[97,21872,21873],{"class":118},"\"Phone析构函数调用\"",[97,21875,1362],{"class":319},[97,21877,1384],{"class":103},[97,21879,21880],{"class":99,"line":1820},[97,21881,2378],{"class":103},[97,21883,21884],{"class":99,"line":1834},[97,21885,21886],{"class":191},"    \u002F\u002F\n",[97,21888,21889],{"class":99,"line":1839},[97,21890,21891],{"class":103},"    string m_PName;\n",[97,21893,21894],{"class":99,"line":1845},[97,21895,4186],{"class":103},[97,21897,21898,21900],{"class":99,"line":1866},[97,21899,14885],{"class":319},[97,21901,15361],{"class":111},[97,21903,21904],{"class":99,"line":1871},[97,21905,1738],{"class":103},[97,21907,21908],{"class":99,"line":1885},[97,21909,14907],{"class":319},[97,21911,21912],{"class":99,"line":1890},[97,21913,17184],{"class":191},[97,21915,21916,21918,21920,21922,21924,21926,21928,21931,21934,21936,21939,21942],{"class":99,"line":1919},[97,21917,18709],{"class":111},[97,21919,323],{"class":103},[97,21921,15108],{"class":111},[97,21923,112],{"class":5407},[97,21925,698],{"class":103},[97,21927,15108],{"class":111},[97,21929,21930],{"class":5407}," pname",[97,21932,21933],{"class":103},"):",[97,21935,15200],{"class":111},[97,21937,21938],{"class":103},"(name),m_phone.",[97,21940,21941],{"class":111},"m_PName",[97,21943,21944],{"class":103},"(pname) \n",[97,21946,21947],{"class":99,"line":1924},[97,21948,2221],{"class":103},[97,21950,21951,21953,21955,21958],{"class":99,"line":1941},[97,21952,3642],{"class":103},[97,21954,1362],{"class":319},[97,21956,21957],{"class":118},"\"Person的构造函数调用\"",[97,21959,1483],{"class":103},[97,21961,21962],{"class":99,"line":1946},[97,21963,2378],{"class":103},[97,21965,21966,21968],{"class":99,"line":1951},[97,21967,18742],{"class":111},[97,21969,2167],{"class":103},[97,21971,21972],{"class":99,"line":1956},[97,21973,2221],{"class":103},[97,21975,21976,21978,21980,21983,21985],{"class":99,"line":1970},[97,21977,3642],{"class":103},[97,21979,1362],{"class":319},[97,21981,21982],{"class":118},"\"Person析构函数调用\"",[97,21984,1362],{"class":319},[97,21986,1384],{"class":103},[97,21988,21989],{"class":99,"line":1975},[97,21990,2378],{"class":103},[97,21992,21993],{"class":99,"line":2768},[97,21994,7971],{"class":191},[97,21996,21997],{"class":99,"line":2782},[97,21998,15083],{"class":103},[97,22000,22001],{"class":99,"line":2790},[97,22002,22003],{"class":191},"    \u002F\u002F手机\n",[97,22005,22006],{"class":99,"line":2795},[97,22007,22008],{"class":103},"    Phone m_Phone;\n",[97,22010,22011],{"class":99,"line":2801},[97,22012,4186],{"class":103},[97,22014,22015,22017,22019],{"class":99,"line":2807},[97,22016,5555],{"class":319},[97,22018,5779],{"class":111},[97,22020,2167],{"class":103},[97,22022,22023],{"class":99,"line":2812},[97,22024,1738],{"class":103},[97,22026,22027,22029,22031,22033,22035,22037,22040],{"class":99,"line":8139},[97,22028,19621],{"class":103},[97,22030,24],{"class":111},[97,22032,323],{"class":103},[97,22034,8107],{"class":118},[97,22036,698],{"class":103},[97,22038,22039],{"class":118},"\"安卓\"",[97,22041,2910],{"class":103},[97,22043,22044,22046,22048,22051,22053,22056,22058],{"class":99,"line":8163},[97,22045,1743],{"class":103},[97,22047,1362],{"class":319},[97,22049,22050],{"class":103},"p.Name",[97,22052,1362],{"class":319},[97,22054,22055],{"class":118},"\"拿着：\"",[97,22057,1362],{"class":319},[97,22059,22060],{"class":103},"p.m_phone.m_PName;\n",[97,22062,22063],{"class":99,"line":8168},[97,22064,1757],{"class":103},[97,22066,22067,22069,22071],{"class":99,"line":8174},[97,22068,326],{"class":319},[97,22070,2164],{"class":111},[97,22072,2167],{"class":103},[97,22074,22075],{"class":99,"line":8201},[97,22076,1738],{"class":103},[97,22078,22079,22081],{"class":99,"line":8206},[97,22080,5824],{"class":111},[97,22082,5827],{"class":103},[97,22084,22085],{"class":99,"line":8212},[97,22086,1757],{"class":103},[24,22088,9216],{},[87,22090,22092],{"className":310,"code":22091,"language":312,"meta":92,"style":92},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[94,22093,22094,22099],{"__ignoreMap":92},[97,22095,22096],{"class":99,"line":100},[97,22097,22098],{"class":191},"    \u002F\u002F不需要写这个：\n",[97,22100,22101],{"class":99,"line":195},[97,22102,22103],{"class":191},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[24,22105,22106],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[87,22108,22110],{"className":310,"code":22109,"language":312,"meta":92,"style":92},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[94,22111,22112],{"__ignoreMap":92},[97,22113,22114,22116,22119,22121,22124,22127],{"class":99,"line":100},[97,22115,19236],{"class":111},[97,22117,22118],{"class":103},"(string name.string pname):",[97,22120,15200],{"class":111},[97,22122,22123],{"class":103},"(name),",[97,22125,22126],{"class":111},"m_phone",[97,22128,22129],{"class":103},"(pname) {}\n",[24,22131,22132,22133,115,22136],{},"采用的是隐式转换法，实际为如下：\n",[94,22134,22135],{},"m_phone(pname)",[94,22137,22138],{},"Phone m_phone=pname",[24,22140,22141,22144],{},[469,22142,22143],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[24,22146,22147],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[48,22149,22151],{"id":22150},"_828静态对象","8.2.8静态对象",[24,22153,22154],{},"静态对象在成员对象前static，称为静态对象",[24,22156,22157],{},"静态对象分为两类：",[138,22159,22160],{},[70,22161,22162],{},"静态成员变量",[67,22164,22165,22168,22171],{},[70,22166,22167],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[70,22169,22170],{},"②在编译阶段分配内存",[70,22172,22173],{},"③类内声明，类外初始化",[138,22175,22176],{"start":195},[70,22177,22178],{},"静态成员函数",[67,22180,22181,22184],{},[70,22182,22183],{},"①所有对象共享同一个函数",[70,22185,22186],{},"②静态成员函数只能访问静态成员变量",[160,22188,22190],{"id":22189},"_8281静态成员变量","8.2.8.1静态成员变量",[87,22192,22194],{"className":310,"code":22193,"language":312,"meta":92,"style":92},"#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",[94,22195,22196,22202,22212,22218,22222,22226,22231,22236,22241,22249,22253,22257,22261,22269,22273,22277,22282,22295,22299,22307,22311,22317],{"__ignoreMap":92},[97,22197,22198,22200],{"class":99,"line":100},[97,22199,2141],{"class":319},[97,22201,2144],{"class":118},[97,22203,22204,22206,22208,22210],{"class":99,"line":195},[97,22205,2149],{"class":319},[97,22207,2152],{"class":319},[97,22209,2155],{"class":111},[97,22211,1483],{"class":103},[97,22213,22214,22216],{"class":99,"line":241},[97,22215,14885],{"class":319},[97,22217,15361],{"class":111},[97,22219,22220],{"class":99,"line":1387},[97,22221,1738],{"class":103},[97,22223,22224],{"class":99,"line":1393},[97,22225,14907],{"class":319},[97,22227,22228],{"class":99,"line":1407},[97,22229,22230],{"class":191},"    \u002F\u002F非静态成员变量\n",[97,22232,22233],{"class":99,"line":1413},[97,22234,22235],{"class":191},"    \u002F\u002F int m_A;\n",[97,22237,22238],{"class":99,"line":1504},[97,22239,22240],{"class":191},"    \u002F\u002F定义静态成员变量\n",[97,22242,22243,22245,22247],{"class":99,"line":1510},[97,22244,11211],{"class":319},[97,22246,2573],{"class":319},[97,22248,21582],{"class":103},[97,22250,22251],{"class":99,"line":1522},[97,22252,2591],{"emptyLinePlaceholder":249},[97,22254,22255],{"class":99,"line":1804},[97,22256,2591],{"emptyLinePlaceholder":249},[97,22258,22259],{"class":99,"line":1809},[97,22260,4186],{"class":103},[97,22262,22263,22265,22267],{"class":99,"line":1815},[97,22264,5555],{"class":319},[97,22266,5779],{"class":111},[97,22268,2167],{"class":103},[97,22270,22271],{"class":99,"line":1820},[97,22272,1738],{"class":103},[97,22274,22275],{"class":99,"line":1834},[97,22276,15503],{"class":103},[97,22278,22279],{"class":99,"line":1839},[97,22280,22281],{"class":191},"    \u002F\u002F输出类成员变量这块内存\n",[97,22283,22284,22286,22288,22291,22293],{"class":99,"line":1845},[97,22285,1743],{"class":103},[97,22287,1362],{"class":319},[97,22289,22290],{"class":103},"p.m_A",[97,22292,1362],{"class":319},[97,22294,1384],{"class":103},[97,22296,22297],{"class":99,"line":1866},[97,22298,1757],{"class":103},[97,22300,22301,22303,22305],{"class":99,"line":1871},[97,22302,326],{"class":319},[97,22304,2164],{"class":111},[97,22306,2167],{"class":103},[97,22308,22309],{"class":99,"line":1885},[97,22310,1738],{"class":103},[97,22312,22313,22315],{"class":99,"line":1890},[97,22314,5824],{"class":111},[97,22316,2167],{"class":103},[97,22318,22319],{"class":99,"line":1919},[97,22320,1757],{"class":103},[24,22322,22323],{},"此时输出是报错的：无法解析外部命令",[24,22325,22326],{},"解决这一问题：必须用到类内声明，类外初始化操作",[87,22328,22330],{"className":310,"code":22329,"language":312,"meta":92,"style":92},"#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",[94,22331,22332,22338,22348,22354,22358,22362,22367,22375,22379,22384,22399,22407,22411,22415,22420,22425,22437,22442,22453,22458,22463,22476,22480,22488,22492,22498],{"__ignoreMap":92},[97,22333,22334,22336],{"class":99,"line":100},[97,22335,2141],{"class":319},[97,22337,2144],{"class":118},[97,22339,22340,22342,22344,22346],{"class":99,"line":195},[97,22341,2149],{"class":319},[97,22343,2152],{"class":319},[97,22345,2155],{"class":111},[97,22347,1483],{"class":103},[97,22349,22350,22352],{"class":99,"line":241},[97,22351,14885],{"class":319},[97,22353,15361],{"class":111},[97,22355,22356],{"class":99,"line":1387},[97,22357,1738],{"class":103},[97,22359,22360],{"class":99,"line":1393},[97,22361,14907],{"class":319},[97,22363,22364],{"class":99,"line":1407},[97,22365,22366],{"class":191},"    \u002F\u002F类内声明\n",[97,22368,22369,22371,22373],{"class":99,"line":1413},[97,22370,11211],{"class":319},[97,22372,2573],{"class":319},[97,22374,21582],{"class":103},[97,22376,22377],{"class":99,"line":1504},[97,22378,4186],{"class":103},[97,22380,22381],{"class":99,"line":1510},[97,22382,22383],{"class":191},"\u002F\u002F类外初始化\n",[97,22385,22386,22388,22390,22393,22395,22397],{"class":99,"line":1522},[97,22387,326],{"class":319},[97,22389,15759],{"class":111},[97,22391,22392],{"class":103},"::m_A",[97,22394,115],{"class":319},[97,22396,766],{"class":370},[97,22398,1483],{"class":103},[97,22400,22401,22403,22405],{"class":99,"line":1804},[97,22402,5555],{"class":319},[97,22404,5779],{"class":111},[97,22406,2167],{"class":103},[97,22408,22409],{"class":99,"line":1809},[97,22410,1738],{"class":103},[97,22412,22413],{"class":99,"line":1815},[97,22414,15503],{"class":103},[97,22416,22417],{"class":99,"line":1820},[97,22418,22419],{"class":191},"    \u002F\u002F访问变量的原内存空间\n",[97,22421,22422],{"class":99,"line":1834},[97,22423,22424],{"class":191},"    \u002F\u002F100\n",[97,22426,22427,22429,22431,22433,22435],{"class":99,"line":1839},[97,22428,1743],{"class":103},[97,22430,1362],{"class":319},[97,22432,22290],{"class":103},[97,22434,1362],{"class":319},[97,22436,1384],{"class":103},[97,22438,22439],{"class":99,"line":1845},[97,22440,22441],{"class":103},"    Person p2;\n",[97,22443,22444,22447,22449,22451],{"class":99,"line":1866},[97,22445,22446],{"class":103},"    p2.m_A",[97,22448,115],{"class":319},[97,22450,1914],{"class":370},[97,22452,1483],{"class":103},[97,22454,22455],{"class":99,"line":1871},[97,22456,22457],{"class":191},"    \u002F\u002F继续访问这片空间\n",[97,22459,22460],{"class":99,"line":1885},[97,22461,22462],{"class":191},"    \u002F\u002F200\n",[97,22464,22465,22467,22469,22472,22474],{"class":99,"line":1890},[97,22466,1743],{"class":103},[97,22468,1362],{"class":319},[97,22470,22471],{"class":103},"p2.m_A",[97,22473,1362],{"class":319},[97,22475,1384],{"class":103},[97,22477,22478],{"class":99,"line":1919},[97,22479,1757],{"class":103},[97,22481,22482,22484,22486],{"class":99,"line":1924},[97,22483,326],{"class":319},[97,22485,2164],{"class":111},[97,22487,2167],{"class":103},[97,22489,22490],{"class":99,"line":1941},[97,22491,1738],{"class":103},[97,22493,22494,22496],{"class":99,"line":1946},[97,22495,5824],{"class":111},[97,22497,5827],{"class":103},[97,22499,22500],{"class":99,"line":1951},[97,22501,1757],{"class":103},[24,22503,22504],{},[469,22505,22506],{},"静态变量的访问",[87,22508,22510],{"className":310,"code":22509,"language":312,"meta":92,"style":92},"#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",[94,22511,22512,22518,22528,22534,22538,22542,22546,22554,22558,22563,22571,22575,22579,22593,22608,22616,22620,22625,22630,22635,22640,22652,22657,22662,22676,22693,22697,22705,22709,22715],{"__ignoreMap":92},[97,22513,22514,22516],{"class":99,"line":100},[97,22515,2141],{"class":319},[97,22517,2144],{"class":118},[97,22519,22520,22522,22524,22526],{"class":99,"line":195},[97,22521,2149],{"class":319},[97,22523,2152],{"class":319},[97,22525,2155],{"class":111},[97,22527,1483],{"class":103},[97,22529,22530,22532],{"class":99,"line":241},[97,22531,14885],{"class":319},[97,22533,15361],{"class":111},[97,22535,22536],{"class":99,"line":1387},[97,22537,1738],{"class":103},[97,22539,22540],{"class":99,"line":1393},[97,22541,14907],{"class":319},[97,22543,22544],{"class":99,"line":1407},[97,22545,22366],{"class":191},[97,22547,22548,22550,22552],{"class":99,"line":1413},[97,22549,11211],{"class":319},[97,22551,2573],{"class":319},[97,22553,21582],{"class":103},[97,22555,22556],{"class":99,"line":1504},[97,22557,15412],{"class":319},[97,22559,22560],{"class":99,"line":1510},[97,22561,22562],{"class":191},"    \u002F\u002F静态成员变量也是有访问权限的\n",[97,22564,22565,22567,22569],{"class":99,"line":1522},[97,22566,11211],{"class":319},[97,22568,2573],{"class":319},[97,22570,21589],{"class":103},[97,22572,22573],{"class":99,"line":1804},[97,22574,4186],{"class":103},[97,22576,22577],{"class":99,"line":1809},[97,22578,22383],{"class":191},[97,22580,22581,22583,22585,22587,22589,22591],{"class":99,"line":1815},[97,22582,326],{"class":319},[97,22584,15759],{"class":111},[97,22586,22392],{"class":103},[97,22588,115],{"class":319},[97,22590,766],{"class":370},[97,22592,1483],{"class":103},[97,22594,22595,22597,22599,22602,22604,22606],{"class":99,"line":1820},[97,22596,326],{"class":319},[97,22598,15759],{"class":111},[97,22600,22601],{"class":103},"::m_B",[97,22603,115],{"class":319},[97,22605,1020],{"class":370},[97,22607,1483],{"class":103},[97,22609,22610,22612,22614],{"class":99,"line":1834},[97,22611,5555],{"class":319},[97,22613,5848],{"class":111},[97,22615,2167],{"class":103},[97,22617,22618],{"class":99,"line":1839},[97,22619,1738],{"class":103},[97,22621,22622],{"class":99,"line":1845},[97,22623,22624],{"class":191},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[97,22626,22627],{"class":99,"line":1866},[97,22628,22629],{"class":191},"    \u002F\u002F静态成员变量有两种访问方式：\n",[97,22631,22632],{"class":99,"line":1871},[97,22633,22634],{"class":191},"    \u002F\u002F1.通过对象进行访问\n",[97,22636,22637],{"class":99,"line":1885},[97,22638,22639],{"class":103},"    Person p;  \n",[97,22641,22642,22644,22646,22648,22650],{"class":99,"line":1890},[97,22643,1743],{"class":103},[97,22645,1362],{"class":319},[97,22647,22290],{"class":103},[97,22649,1362],{"class":319},[97,22651,1384],{"class":103},[97,22653,22654],{"class":99,"line":1919},[97,22655,22656],{"class":191},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[97,22658,22659],{"class":99,"line":1924},[97,22660,22661],{"class":191},"    \u002F\u002F2.通过类名进行访问\n",[97,22663,22664,22666,22668,22670,22672,22674],{"class":99,"line":1941},[97,22665,1743],{"class":103},[97,22667,1362],{"class":319},[97,22669,19236],{"class":111},[97,22671,22392],{"class":103},[97,22673,1362],{"class":319},[97,22675,1384],{"class":103},[97,22677,22678,22680,22682,22684,22686,22688,22690],{"class":99,"line":1946},[97,22679,1743],{"class":103},[97,22681,1362],{"class":319},[97,22683,19236],{"class":111},[97,22685,22601],{"class":103},[97,22687,1362],{"class":319},[97,22689,1431],{"class":103},[97,22691,22692],{"class":191}," \u002F\u002F没有访问权限，报错\n",[97,22694,22695],{"class":99,"line":1951},[97,22696,1757],{"class":103},[97,22698,22699,22701,22703],{"class":99,"line":1956},[97,22700,326],{"class":319},[97,22702,2164],{"class":111},[97,22704,2167],{"class":103},[97,22706,22707],{"class":99,"line":1970},[97,22708,1738],{"class":103},[97,22710,22711,22713],{"class":99,"line":1975},[97,22712,5893],{"class":111},[97,22714,5827],{"class":103},[97,22716,22717],{"class":99,"line":2768},[97,22718,1757],{"class":103},[160,22720,22722],{"id":22721},"_8282静态成员函数","8.2.8.2静态成员函数",[24,22724,22725],{},"1.静态成员函数定义与访问",[87,22727,22729],{"className":310,"code":22728,"language":312,"meta":92,"style":92},"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",[94,22730,22731,22737,22741,22745,22750,22761,22765,22779,22783,22787,22795,22799,22804,22809,22813,22821,22826,22836],{"__ignoreMap":92},[97,22732,22733,22735],{"class":99,"line":100},[97,22734,14885],{"class":319},[97,22736,15361],{"class":111},[97,22738,22739],{"class":99,"line":195},[97,22740,1738],{"class":103},[97,22742,22743],{"class":99,"line":241},[97,22744,14907],{"class":319},[97,22746,22747],{"class":99,"line":1387},[97,22748,22749],{"class":191},"    \u002F\u002F在公共权限下定义静态成员函数\n",[97,22751,22752,22754,22757,22759],{"class":99,"line":1393},[97,22753,11211],{"class":319},[97,22755,22756],{"class":319}," void",[97,22758,11576],{"class":111},[97,22760,2167],{"class":103},[97,22762,22763],{"class":99,"line":1407},[97,22764,2221],{"class":103},[97,22766,22767,22770,22772,22775,22777],{"class":99,"line":1413},[97,22768,22769],{"class":103},"        coout",[97,22771,1362],{"class":319},[97,22773,22774],{"class":118},"\"静态成员函数的调用\"",[97,22776,1362],{"class":319},[97,22778,1384],{"class":103},[97,22780,22781],{"class":99,"line":1504},[97,22782,2378],{"class":103},[97,22784,22785],{"class":99,"line":1510},[97,22786,4186],{"class":103},[97,22788,22789,22791,22793],{"class":99,"line":1522},[97,22790,5555],{"class":319},[97,22792,5779],{"class":111},[97,22794,2167],{"class":103},[97,22796,22797],{"class":99,"line":1804},[97,22798,1738],{"class":103},[97,22800,22801],{"class":99,"line":1809},[97,22802,22803],{"class":191},"    \u002F\u002F静态成员函数的调用方式:\n",[97,22805,22806],{"class":99,"line":1815},[97,22807,22808],{"class":191},"    \u002F\u002F1.通过对象访问\n",[97,22810,22811],{"class":99,"line":1820},[97,22812,15503],{"class":103},[97,22814,22815,22817,22819],{"class":99,"line":1834},[97,22816,16056],{"class":103},[97,22818,11742],{"class":111},[97,22820,5827],{"class":103},[97,22822,22823],{"class":99,"line":1839},[97,22824,22825],{"class":191},"    \u002F\u002F2.通过类名访问\n",[97,22827,22828,22830,22832,22834],{"class":99,"line":1845},[97,22829,18709],{"class":111},[97,22831,17922],{"class":103},[97,22833,11742],{"class":111},[97,22835,5827],{"class":103},[97,22837,22838],{"class":99,"line":1866},[97,22839,1757],{"class":103},[138,22841,22842],{"start":195},[70,22843,22844],{},"静态成员函数只能访问静态成员变量",[87,22846,22848],{"className":310,"code":22847,"language":312,"meta":92,"style":92},"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",[94,22849,22850,22856,22860,22864,22868,22878,22882,22896,22901,22913,22917,22928,22938,22942,22946,22950,22960,22964,22977,22981,22985,22989,22993,23007,23015,23019,23023,23027,23031,23039,23043,23053,23058,23062,23070,23074,23080],{"__ignoreMap":92},[97,22851,22852,22854],{"class":99,"line":100},[97,22853,14885],{"class":319},[97,22855,15361],{"class":111},[97,22857,22858],{"class":99,"line":195},[97,22859,1738],{"class":103},[97,22861,22862],{"class":99,"line":241},[97,22863,14907],{"class":319},[97,22865,22866],{"class":99,"line":1387},[97,22867,22749],{"class":191},[97,22869,22870,22872,22874,22876],{"class":99,"line":1393},[97,22871,11211],{"class":319},[97,22873,22756],{"class":319},[97,22875,11576],{"class":111},[97,22877,2167],{"class":103},[97,22879,22880],{"class":99,"line":1407},[97,22881,2221],{"class":103},[97,22883,22884,22887,22889,22891,22893],{"class":99,"line":1413},[97,22885,22886],{"class":103},"        m_A",[97,22888,115],{"class":319},[97,22890,631],{"class":370},[97,22892,377],{"class":103},[97,22894,22895],{"class":191}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[97,22897,22898],{"class":99,"line":1504},[97,22899,22900],{"class":191},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[97,22902,22903,22905,22907,22909,22911],{"class":99,"line":1510},[97,22904,22769],{"class":103},[97,22906,1362],{"class":319},[97,22908,22774],{"class":118},[97,22910,1362],{"class":319},[97,22912,1384],{"class":103},[97,22914,22915],{"class":99,"line":1522},[97,22916,2378],{"class":103},[97,22918,22919,22921,22923,22925],{"class":99,"line":1804},[97,22920,11211],{"class":319},[97,22922,2573],{"class":319},[97,22924,15638],{"class":103},[97,22926,22927],{"class":191}," \u002F\u002F静态成员变量\n",[97,22929,22930,22932,22935],{"class":99,"line":1809},[97,22931,2176],{"class":319},[97,22933,22934],{"class":103}," m_B;",[97,22936,22937],{"class":191}," \u002F\u002F非静态成员变量\n",[97,22939,22940],{"class":99,"line":1815},[97,22941,2591],{"emptyLinePlaceholder":249},[97,22943,22944],{"class":99,"line":1820},[97,22945,15412],{"class":319},[97,22947,22948],{"class":99,"line":1834},[97,22949,22562],{"class":191},[97,22951,22952,22954,22956,22958],{"class":99,"line":1839},[97,22953,11211],{"class":319},[97,22955,22756],{"class":319},[97,22957,13809],{"class":111},[97,22959,2167],{"class":103},[97,22961,22962],{"class":99,"line":1845},[97,22963,2221],{"class":103},[97,22965,22966,22968,22970,22973,22975],{"class":99,"line":1866},[97,22967,3642],{"class":103},[97,22969,1362],{"class":319},[97,22971,22972],{"class":118},"\"这是私有权限下的静态函数调用\"",[97,22974,1362],{"class":319},[97,22976,1384],{"class":103},[97,22978,22979],{"class":99,"line":1871},[97,22980,2378],{"class":103},[97,22982,22983],{"class":99,"line":1885},[97,22984,2591],{"emptyLinePlaceholder":249},[97,22986,22987],{"class":99,"line":1890},[97,22988,2591],{"emptyLinePlaceholder":249},[97,22990,22991],{"class":99,"line":1919},[97,22992,4186],{"class":103},[97,22994,22995,22997,22999,23001,23003,23005],{"class":99,"line":1924},[97,22996,326],{"class":319},[97,22998,15759],{"class":111},[97,23000,22392],{"class":103},[97,23002,115],{"class":319},[97,23004,511],{"class":370},[97,23006,1483],{"class":103},[97,23008,23009,23011,23013],{"class":99,"line":1941},[97,23010,5555],{"class":319},[97,23012,5779],{"class":111},[97,23014,2167],{"class":103},[97,23016,23017],{"class":99,"line":1946},[97,23018,1738],{"class":103},[97,23020,23021],{"class":99,"line":1951},[97,23022,22803],{"class":191},[97,23024,23025],{"class":99,"line":1956},[97,23026,22808],{"class":191},[97,23028,23029],{"class":99,"line":1970},[97,23030,15503],{"class":103},[97,23032,23033,23035,23037],{"class":99,"line":1975},[97,23034,16056],{"class":103},[97,23036,11742],{"class":111},[97,23038,5827],{"class":103},[97,23040,23041],{"class":99,"line":2768},[97,23042,22825],{"class":191},[97,23044,23045,23047,23049,23051],{"class":99,"line":2782},[97,23046,18709],{"class":111},[97,23048,17922],{"class":103},[97,23050,11742],{"class":111},[97,23052,5827],{"class":103},[97,23054,23055],{"class":99,"line":2790},[97,23056,23057],{"class":191},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[97,23059,23060],{"class":99,"line":2795},[97,23061,1757],{"class":103},[97,23063,23064,23066,23068],{"class":99,"line":2801},[97,23065,326],{"class":319},[97,23067,2164],{"class":111},[97,23069,2167],{"class":103},[97,23071,23072],{"class":99,"line":2807},[97,23073,1738],{"class":103},[97,23075,23076,23078],{"class":99,"line":2812},[97,23077,5824],{"class":111},[97,23079,5827],{"class":103},[97,23081,23082],{"class":99,"line":8139},[97,23083,1757],{"class":103},[48,23085,23087],{"id":23086},"_83c对象模型和this指针","8.3C++对象模型和this指针",[160,23089,23091],{"id":23090},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[24,23093,23094],{},"在c++中，类内的成员变量和成员函数分开存储",[24,23096,23097],{},"只有非静态成员变量才属于类的对象上",[23099,23100,23102],"h5",{"id":23101},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[87,23104,23106],{"className":310,"code":23105,"language":312,"meta":92,"style":92},"#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",[94,23107,23108,23115,23125,23131,23135,23139,23143,23151,23155,23159,23182,23186,23194,23198,23204],{"__ignoreMap":92},[97,23109,23110,23112],{"class":99,"line":100},[97,23111,2141],{"class":319},[97,23113,23114],{"class":118},"\u003Ciostraem>\n",[97,23116,23117,23119,23121,23123],{"class":99,"line":195},[97,23118,2149],{"class":319},[97,23120,2152],{"class":319},[97,23122,2155],{"class":111},[97,23124,1483],{"class":103},[97,23126,23127,23129],{"class":99,"line":241},[97,23128,14885],{"class":319},[97,23130,15361],{"class":111},[97,23132,23133],{"class":99,"line":1387},[97,23134,1738],{"class":103},[97,23136,23137],{"class":99,"line":1393},[97,23138,2591],{"emptyLinePlaceholder":249},[97,23140,23141],{"class":99,"line":1407},[97,23142,4186],{"class":103},[97,23144,23145,23147,23149],{"class":99,"line":1413},[97,23146,5555],{"class":319},[97,23148,5779],{"class":111},[97,23150,2167],{"class":103},[97,23152,23153],{"class":99,"line":1504},[97,23154,1738],{"class":103},[97,23156,23157],{"class":99,"line":1510},[97,23158,15503],{"class":103},[97,23160,23161,23163,23165,23168,23170,23173,23175,23177,23179],{"class":99,"line":1522},[97,23162,1743],{"class":103},[97,23164,1362],{"class":319},[97,23166,23167],{"class":118},"\"size of p=\"",[97,23169,1362],{"class":319},[97,23171,23172],{"class":111},"sizeoif",[97,23174,6730],{"class":103},[97,23176,1362],{"class":319},[97,23178,1431],{"class":103},[97,23180,23181],{"class":191}," \u002F\u002F查看这个空类的占用的内存空间\n",[97,23183,23184],{"class":99,"line":1804},[97,23185,1757],{"class":103},[97,23187,23188,23190,23192],{"class":99,"line":1809},[97,23189,326],{"class":319},[97,23191,2164],{"class":111},[97,23193,2167],{"class":103},[97,23195,23196],{"class":99,"line":1815},[97,23197,1738],{"class":103},[97,23199,23200,23202],{"class":99,"line":1820},[97,23201,5824],{"class":111},[97,23203,5827],{"class":103},[97,23205,23206],{"class":99,"line":1834},[97,23207,1757],{"class":103},[24,23209,23210],{},"输出结果为：size of p=1",[24,23212,23213],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[24,23215,23216],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23099,23218,23220],{"id":23219},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[87,23222,23224],{"className":310,"code":23223,"language":312,"meta":92,"style":92},"#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",[94,23225,23226,23232,23242,23250,23254,23263,23267,23275,23279,23283,23302,23306,23310,23318,23322,23328],{"__ignoreMap":92},[97,23227,23228,23230],{"class":99,"line":100},[97,23229,2141],{"class":319},[97,23231,2144],{"class":118},[97,23233,23234,23236,23238,23240],{"class":99,"line":195},[97,23235,2149],{"class":319},[97,23237,2152],{"class":319},[97,23239,2155],{"class":111},[97,23241,1483],{"class":103},[97,23243,23244,23246,23248],{"class":99,"line":241},[97,23245,14885],{"class":319},[97,23247,15759],{"class":111},[97,23249,2865],{"class":103},[97,23251,23252],{"class":99,"line":1387},[97,23253,1738],{"class":103},[97,23255,23256,23258,23260],{"class":99,"line":1393},[97,23257,2176],{"class":319},[97,23259,15638],{"class":103},[97,23261,23262],{"class":191},"\u002F\u002F非静态成员变量\n",[97,23264,23265],{"class":99,"line":1407},[97,23266,4186],{"class":103},[97,23268,23269,23271,23273],{"class":99,"line":1413},[97,23270,5555],{"class":319},[97,23272,5779],{"class":111},[97,23274,2167],{"class":103},[97,23276,23277],{"class":99,"line":1504},[97,23278,1738],{"class":103},[97,23280,23281],{"class":99,"line":1510},[97,23282,15503],{"class":103},[97,23284,23285,23287,23289,23291,23293,23295,23297,23299],{"class":99,"line":1522},[97,23286,1743],{"class":103},[97,23288,1362],{"class":319},[97,23290,23167],{"class":118},[97,23292,1565],{"class":319},[97,23294,6730],{"class":103},[97,23296,1362],{"class":319},[97,23298,1431],{"class":103},[97,23300,23301],{"class":191}," \u002F\u002F查看不是空对象时占用多少内存\n",[97,23303,23304],{"class":99,"line":1804},[97,23305,2591],{"emptyLinePlaceholder":249},[97,23307,23308],{"class":99,"line":1809},[97,23309,1757],{"class":103},[97,23311,23312,23314,23316],{"class":99,"line":1815},[97,23313,326],{"class":319},[97,23315,2164],{"class":111},[97,23317,2167],{"class":103},[97,23319,23320],{"class":99,"line":1820},[97,23321,1738],{"class":103},[97,23323,23324,23326],{"class":99,"line":1834},[97,23325,5824],{"class":111},[97,23327,5827],{"class":103},[97,23329,23330],{"class":99,"line":1839},[97,23331,1757],{"class":103},[24,23333,23334],{},"输出结果：size of p=4",[24,23336,23337],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[138,23339,23340],{},[70,23341,23342],{},"如果加上非静态成员变量，Person类修改如下",[87,23344,23346],{"className":310,"code":23345,"language":312,"meta":92,"style":92},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[94,23347,23348,23354,23358,23364,23372,23376,23381],{"__ignoreMap":92},[97,23349,23350,23352],{"class":99,"line":100},[97,23351,14885],{"class":319},[97,23353,15361],{"class":111},[97,23355,23356],{"class":99,"line":195},[97,23357,1738],{"class":103},[97,23359,23360,23362],{"class":99,"line":241},[97,23361,2176],{"class":319},[97,23363,21582],{"class":103},[97,23365,23366,23368,23370],{"class":99,"line":1387},[97,23367,11211],{"class":319},[97,23369,2573],{"class":319},[97,23371,21589],{"class":103},[97,23373,23374],{"class":99,"line":1393},[97,23375,4186],{"class":103},[97,23377,23378],{"class":99,"line":1407},[97,23379,23380],{"class":191},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[97,23382,23383,23385,23387,23389,23391,23393],{"class":99,"line":1413},[97,23384,326],{"class":319},[97,23386,15759],{"class":111},[97,23388,22601],{"class":103},[97,23390,115],{"class":319},[97,23392,511],{"class":370},[97,23394,1483],{"class":103},[24,23396,23397],{},"输出结果：4",[24,23399,23400],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[138,23402,23403],{"start":195},[70,23404,23405],{},"加上非静态成员函数",[87,23407,23409],{"className":310,"code":23408,"language":312,"meta":92,"style":92},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[94,23410,23411,23418,23422,23428,23436,23440,23444,23448],{"__ignoreMap":92},[97,23412,23413,23415],{"class":99,"line":100},[97,23414,14885],{"class":319},[97,23416,23417],{"class":111},"  Person\n",[97,23419,23420],{"class":99,"line":195},[97,23421,1738],{"class":103},[97,23423,23424,23426],{"class":99,"line":241},[97,23425,2176],{"class":319},[97,23427,21582],{"class":103},[97,23429,23430,23432,23434],{"class":99,"line":1387},[97,23431,15100],{"class":319},[97,23433,11576],{"class":111},[97,23435,2167],{"class":103},[97,23437,23438],{"class":99,"line":1393},[97,23439,2221],{"class":103},[97,23441,23442],{"class":99,"line":1407},[97,23443,2591],{"emptyLinePlaceholder":249},[97,23445,23446],{"class":99,"line":1413},[97,23447,2378],{"class":103},[97,23449,23450],{"class":99,"line":1504},[97,23451,4186],{"class":103},[24,23453,23454],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[138,23456,23457],{"start":241},[70,23458,23459],{},"加上静态成员函数",[87,23461,23463],{"className":310,"code":23462,"language":312,"meta":92,"style":92},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[94,23464,23465,23471,23475,23481,23489,23493,23497,23501,23512,23516,23520,23524],{"__ignoreMap":92},[97,23466,23467,23469],{"class":99,"line":100},[97,23468,14885],{"class":319},[97,23470,23417],{"class":111},[97,23472,23473],{"class":99,"line":195},[97,23474,1738],{"class":103},[97,23476,23477,23479],{"class":99,"line":241},[97,23478,2176],{"class":319},[97,23480,21582],{"class":103},[97,23482,23483,23485,23487],{"class":99,"line":1387},[97,23484,15100],{"class":319},[97,23486,11576],{"class":111},[97,23488,2167],{"class":103},[97,23490,23491],{"class":99,"line":1393},[97,23492,2221],{"class":103},[97,23494,23495],{"class":99,"line":1407},[97,23496,2591],{"emptyLinePlaceholder":249},[97,23498,23499],{"class":99,"line":1413},[97,23500,2378],{"class":103},[97,23502,23503,23505,23507,23510],{"class":99,"line":1504},[97,23504,11211],{"class":319},[97,23506,22756],{"class":319},[97,23508,23509],{"class":111}," func1",[97,23511,2167],{"class":103},[97,23513,23514],{"class":99,"line":1510},[97,23515,2221],{"class":103},[97,23517,23518],{"class":99,"line":1522},[97,23519,2591],{"emptyLinePlaceholder":249},[97,23521,23522],{"class":99,"line":1804},[97,23523,2378],{"class":103},[97,23525,23526],{"class":99,"line":1809},[97,23527,4186],{"class":103},[24,23529,23397],{},[24,23531,23532],{},"解释：静态成员函数也不属于类上",[231,23534,7865],{},{"title":92,"searchDepth":195,"depth":195,"links":23536},[23537,23543],{"id":14836,"depth":195,"text":14837,"children":23538},[23539,23540,23541,23542],{"id":14840,"depth":241,"text":14841},{"id":15564,"depth":241,"text":15565},{"id":15736,"depth":241,"text":15737},{"id":16195,"depth":241,"text":16196},{"id":18567,"depth":195,"text":18568,"children":23544},[23545,23546,23547,23548,23549,23550,23551,23552,23553],{"id":18579,"depth":241,"text":18580},{"id":18872,"depth":241,"text":18873},{"id":19363,"depth":241,"text":19364},{"id":20460,"depth":241,"text":20461},{"id":20883,"depth":241,"text":20884},{"id":21362,"depth":241,"text":21363},{"id":21737,"depth":241,"text":21738},{"id":22150,"depth":241,"text":22151},{"id":23086,"depth":241,"text":23087},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14801,"description":23554},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23561,"title":312,"body":23562,"description":246,"extension":247,"meta":23566,"navigation":249,"path":23568,"seo":23569,"stem":23570,"__hash__":23571},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23563,"toc":23564},[],{"title":92,"searchDepth":195,"depth":195,"links":23565},[],{"category":23567},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":312,"description":246},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23573,"title":23574,"body":23575,"description":92,"extension":247,"meta":24166,"navigation":249,"path":24167,"seo":24168,"stem":24169,"__hash__":24170},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23576,"toc":24148},[23577,23580,23584,23587,23590,23593,23611,23616,23619,23622,23625,23628,23633,23636,23641,23644,23647,23651,23654,23657,23663,23666,23684,23688,23692,23695,23700,23703,23707,23710,23723,23726,23730,23733,23736,23739,23764,23767,23776,23787,23802,23834,23838,23845,23853,23857,23860,23863,23868,23872,23875,23878,23883,23886,23890,23893,23896,23901,23904,23908,23913,23917,23984,23988,23991,23994,23997,24000,24003,24009,24030,24033,24047,24056,24060,24063,24066,24071,24074,24079,24084,24087,24090,24095,24100,24103,24108,24113,24116,24121,24126,24129,24132,24137,24140,24145],[10,23578,23574],{"id":23579},"_1强化学习基本认识",[14,23581,23583],{"id":23582},"_11什么是强化学习","1.1.什么是强化学习",[24,23585,23586],{},"强化学习有两部分组成：智能体和环境；",[24,23588,23589],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[24,23591,23592],{},"强化学习与监督学习的区别:",[138,23594,23595,23598,23601,23604],{},[70,23596,23597],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[70,23599,23600],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[70,23602,23603],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[70,23605,23606,23607,23610],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[469,23608,23609],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[24,23612,23613],{},[19,23614],{"alt":92,"src":23615},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[24,23617,23618],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[24,23620,23621],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[24,23623,23624],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[24,23626,23627],{},"获取奖励",[24,23629,23630],{},[19,23631],{"alt":92,"src":23632},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[24,23634,23635],{},"强化学习可以分成标准强化学习和深度强化学习",[24,23637,23638],{},[19,23639],{"alt":92,"src":23640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[24,23642,23643],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[24,23645,23646],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23648,23650],{"id":23649},"_12强化学习应用场景","1.2.强化学习应用场景",[24,23652,23653],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[24,23655,23656],{},"具身智能中的应用",[24,23658,23659,23662],{},[469,23660,23661],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[24,23664,23665],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[24,23667,23668,23669,23672,23673,23676,23677,23680,23681],{},"机器人是",[469,23670,23671],{},"躯体","，深度学习是",[469,23674,23675],{},"神经元****网络","，VLA是",[469,23678,23679],{},"通用的行为逻辑","，而强化学习是",[469,23682,23683],{},"教练",[14,23685,23687],{"id":23686},"_13序列决策","1.3.序列决策",[48,23689,23691],{"id":23690},"_131智能体与环境","1.3.1.智能体与环境",[24,23693,23694],{},"强化学习研究的问题是智能体agent与环境交互的问题",[24,23696,23697],{},[19,23698],{"alt":92,"src":23699},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[24,23701,23702],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[48,23704,23706],{"id":23705},"_132奖励","1.3.2.奖励",[24,23708,23709],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[24,23711,23712,23713,23722],{},"取某个策略的表现如何。强化学习的目的就是",[469,23714,23715,23716,23721],{},"最大化",[469,23717,23718],{},[469,23719,23720],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[24,23724,23725],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[48,23727,23729],{"id":23728},"_133序列决策","1.3.3.序列决策",[24,23731,23732],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[24,23734,23735],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[24,23737,23738],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[24,23740,23741,23745,23746,23748,23749,23751,23752,23754,23755,13986,23758,13986,23761],{},[23742,23743,23744],"em",{},"Ht"," = ",[23742,23747,916],{},"1*, a",[23742,23750,537],{},", r",[23742,23753,537],{},", . . . ,* ",[23742,23756,23757],{},"ot",[23742,23759,23760],{},", at ,",[23742,23762,23763],{},"rt",[24,23765,23766],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[24,23768,23769,23745,23772,1850,23774,749],{},[23742,23770,23771],{},"st",[23742,23773,374],{},[23742,23775,23744],{},[24,23777,23778,23779,23782,23783,23786],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[469,23780,23781],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[469,23784,23785],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[24,23788,23789,23790,23793,23794,23797,23798,23801],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[469,23791,23792],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[469,23795,23796],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23742,23799,23800],{},"S, A, T, R, Ω, O, γ",")。",[24,23803,23804,23805,23807,23808,23810,23811,323,23813,23816,23817,23819,23820,323,23823,23826,23827,23829,23830,23833],{},"其中 ",[23742,23806,1009],{}," 表示状态空间，为隐变量，",[23742,23809,552],{}," 为动作空间，",[23742,23812,1034],{},[23742,23814,23815],{},"s ′ |s, a",") 为状态转移概率，",[23742,23818,984],{}," 为奖励函数，",[23742,23821,23822],{},"Ω",[23742,23824,23825],{},"o|s, a",") 为观测概率，",[23742,23828,910],{}," 为观测空间，",[23742,23831,23832],{},"γ"," 为折扣因子。",[14,23835,23837],{"id":23836},"_14动作空间","1.4.动作空间",[24,23839,23840,23841,23844],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[469,23842,23843],{},"动作空间"," ，动作空间分为:",[138,23846,23847,23850],{},[70,23848,23849],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[70,23851,23852],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23854,23856],{"id":23855},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[24,23858,23859],{},"由策略、价值函数、模型三部分组成",[24,23861,23862],{},"这三者组成马尔可夫决策过程",[24,23864,23865],{},[19,23866],{"alt":92,"src":23867},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[48,23869,23871],{"id":23870},"_151策略","1.5.1.策略",[24,23873,23874],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[24,23876,23877],{},"策略可分为两种：",[24,23879,23880],{},[19,23881],{"alt":92,"src":23882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[24,23884,23885],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[48,23887,23889],{"id":23888},"_152价值函数","1.5.2.价值函数",[24,23891,23892],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[24,23894,23895],{},"价值函数中有一个折扣因子，类似于存款利息",[24,23897,23898],{},[19,23899],{"alt":92,"src":23900},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[24,23902,23903],{},"进入某个状态采取的最优动作可以通过Q函数得到",[48,23905,23907],{"id":23906},"_153模型","1.5.3.模型",[24,23909,23910],{},[19,23911],{"alt":92,"src":23912},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23914,23916],{"id":23915},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[457,23918,23919,23930],{},[460,23920,23921],{},[463,23922,23923,23927],{},[466,23924,23926],{"align":23925},"left","类型",[466,23928,23929],{"align":23925},"特点",[504,23931,23932,23942,23952,23962,23974],{},[463,23933,23934,23939],{},[509,23935,23936],{"align":23925},[469,23937,23938],{},"基于价值的智能体",[509,23940,23941],{"align":23925},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[463,23943,23944,23949],{},[509,23945,23946],{"align":23925},[469,23947,23948],{},"基于策略的智能体",[509,23950,23951],{"align":23925},"直接学习策略，没有学习价值函数",[463,23953,23954,23959],{},[509,23955,23956],{"align":23925},[469,23957,23958],{},"演员-评论员智能体",[509,23960,23961],{"align":23925},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[463,23963,23964,23969],{},[509,23965,23966],{"align":23925},[469,23967,23968],{},"有模型强化学习智能体",[509,23970,23971],{"align":23925},[19,23972],{"alt":92,"src":23973},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[463,23975,23976,23981],{},[509,23977,23978],{"align":23925},[469,23979,23980],{},"免模型强化学习智能体",[509,23982,23983],{"align":23925},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,23985,23987],{"id":23986},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[24,23989,23990],{},"学习和规划是序列决策的两个基本问题",[24,23992,23993],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[24,23995,23996],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[24,23998,23999],{},"强化学习用到的库：Gym",[24,24001,24002],{},"Gym可以检验强化学习算法的优劣",[24,24004,24005,24008],{},[469,24006,24007],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[87,24010,24014],{"className":24011,"code":24012,"language":24013,"meta":92,"style":92},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[94,24015,24016],{"__ignoreMap":92},[97,24017,24018,24021,24024,24027],{"class":99,"line":100},[97,24019,24020],{"class":111},"pip",[97,24022,24023],{"class":118}," install",[97,24025,24026],{"class":118}," gym==",[97,24028,24029],{"class":370},"0.25.2\n",[24,24031,24032],{},"显示图形界面需要",[87,24034,24036],{"className":24011,"code":24035,"language":24013,"meta":92,"style":92},"pip install pygame\n",[94,24037,24038],{"__ignoreMap":92},[97,24039,24040,24042,24044],{"class":99,"line":100},[97,24041,24020],{"class":111},[97,24043,24023],{"class":118},[97,24045,24046],{"class":118}," pygame\n",[24,24048,24049,24050],{},"有关Gym库的相关文档介绍：",[558,24051,24055],{"href":24052,"rel":24053},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24054],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24057,24059],{"id":24058},"_18一些补充基础概念","1.8.一些补充基础概念",[24,24061,24062],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[24,24064,24065],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[24,24067,24068],{},[19,24069],{"alt":92,"src":24070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[24,24072,24073],{},"折扣率需要自己来设定",[24,24075,24076],{},[19,24077],{"alt":92,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[138,24080,24081],{},[70,24082,24083],{},"状态转移函数：",[24,24085,24086],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[24,24088,24089],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[24,24091,24092],{},[19,24093],{"alt":92,"src":24094},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[138,24096,24097],{"start":195},[70,24098,24099],{},"动作价值函数：",[24,24101,24102],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[24,24104,24105],{},[19,24106],{"alt":92,"src":24107},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[138,24109,24110],{"start":241},[70,24111,24112],{},"最优动作价值函数：",[24,24114,24115],{},"这个函数是对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会基于这个分数来做决策，这样期望回报会最大化",[24,24117,24118],{},[19,24119],{"alt":92,"src":24120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[138,24122,24123],{"start":1387},[70,24124,24125],{},"状态价值函数:",[24,24127,24128],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[24,24130,24131],{},"它衡量的是“一个具体动作”的长期价值",[24,24133,24134],{},[19,24135],{"alt":92,"src":24136},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[24,24138,24139],{},"几个价值函数之间的比较：",[24,24141,24142],{},[19,24143],{"alt":92,"src":24144},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[231,24146,24147],{},"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":92,"searchDepth":195,"depth":195,"links":24149},[24150,24151,24152,24157,24158,24163,24164,24165],{"id":23582,"depth":195,"text":23583},{"id":23649,"depth":195,"text":23650},{"id":23686,"depth":195,"text":23687,"children":24153},[24154,24155,24156],{"id":23690,"depth":241,"text":23691},{"id":23705,"depth":241,"text":23706},{"id":23728,"depth":241,"text":23729},{"id":23836,"depth":195,"text":23837},{"id":23855,"depth":195,"text":23856,"children":24159},[24160,24161,24162],{"id":23870,"depth":241,"text":23871},{"id":23888,"depth":241,"text":23889},{"id":23906,"depth":241,"text":23907},{"id":23915,"depth":195,"text":23916},{"id":23986,"depth":195,"text":23987},{"id":24058,"depth":195,"text":24059},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23574,"description":92},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24172,"title":24173,"body":24174,"description":24181,"extension":247,"meta":24192,"navigation":249,"path":24193,"seo":24194,"stem":24195,"__hash__":24196},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24175,"toc":24190},[24176,24179,24182,24187],[10,24177,24173],{"id":24178},"_2马尔可夫决策过程",[24,24180,24181],{},"这是强化学习的基本框架",[24,24183,24184],{},[19,24185],{"alt":92,"src":24186},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[24,24188,24189],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":92,"searchDepth":195,"depth":195,"links":24191},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24173,"description":24181},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24198,"title":24199,"body":24200,"description":92,"extension":247,"meta":24316,"navigation":249,"path":24317,"seo":24318,"stem":24319,"__hash__":24320},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24201,"toc":24311},[24202,24205,24209,24212,24217,24222,24225,24230,24233,24238,24241,24245,24250,24253,24258,24263,24268,24271,24275,24280,24283,24288,24293,24298,24303,24306],[10,24203,24199],{"id":24204},"_3动作价值函数",[14,24206,24208],{"id":24207},"_31dqn","3.1.DQN",[24,24210,24211],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[24,24213,24214],{},[19,24215],{"alt":92,"src":24216},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[24,24218,24219],{},[19,24220],{"alt":92,"src":24221},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[24,24223,24224],{},"DQN算法的描述：",[24,24226,24227],{},[19,24228],{"alt":92,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[24,24231,24232],{},"这里的Dense指的是全连接层",[24,24234,24235],{},[19,24236],{"alt":92,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[24,24239,24240],{},"当前观测的状态为St，用DQN把St作为输入，给所有的动作打分，选出动作最高的动作作为at，agent做出at动作后，环境会改变状态，用状态转移函数p来随机抽一个新的状态st+1，环境还会告诉我们这一步的奖励Rt，这个奖励可以+-0，奖励是强化学习中的监督信号，DQN要靠这些奖励来训练，有了新的状态St+1，DQN会再对所有的动作打分，agent选择分数最高的动作作为at+1，agent执行at+1后，环境会再更新状态s和再给一个奖励R，然后会继续重复之前的动作 训练DQN的最常用方法是TD算法",[14,24242,24244],{"id":24243},"_32dqn的举例","3.2.DQN的举例",[24,24246,24247],{},[19,24248],{"alt":92,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[24,24251,24252],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[24,24254,24255],{},[19,24256],{"alt":92,"src":24257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[24,24259,24260],{},[19,24261],{"alt":92,"src":24262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[24,24264,24265],{},[19,24266],{"alt":92,"src":24267},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[24,24269,24270],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24272,24274],{"id":24273},"_33td算法","3.3.TD算法",[24,24276,24277],{},[19,24278],{"alt":92,"src":24279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[24,24281,24282],{},"强化学习TD算法公式的粗略解释：",[24,24284,24285],{},[19,24286],{"alt":92,"src":24287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[24,24289,24290],{},[19,24291],{"alt":92,"src":24292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[24,24294,24295],{},[19,24296],{"alt":92,"src":24297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[24,24299,24300],{},[19,24301],{"alt":92,"src":24302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[24,24304,24305],{},"TD算法总结：",[24,24307,24308],{},[19,24309],{"alt":92,"src":24310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":92,"searchDepth":195,"depth":195,"links":24312},[24313,24314,24315],{"id":24207,"depth":195,"text":24208},{"id":24243,"depth":195,"text":24244},{"id":24273,"depth":195,"text":24274},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24199,"description":92},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24322,"title":24323,"body":24324,"description":92,"extension":247,"meta":24557,"navigation":249,"path":24558,"seo":24559,"stem":24560,"__hash__":24561},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24325,"toc":24553},[24326,24329,24333,24336,24339,24344,24349,24352,24357,24362,24365,24370,24373,24378,24381,24386,24389,24394,24397,24402,24407,24410,24415,24418,24421,24426,24429,24434,24439,24443,24446,24449,24454,24459,24462,24467,24472,24475,24480,24483,24486,24491,24494,24499,24502,24507,24512,24515,24520,24525,24528,24533,24536,24541,24544],[10,24327,24323],{"id":24328},"_4策略学习",[14,24330,24332],{"id":24331},"_41概念描述","4.1.概念描述",[24,24334,24335],{},"用神经网络（策略网络）近似策略函数",[24,24337,24338],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[24,24340,24341],{},[19,24342],{"alt":92,"src":24343},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[24,24345,24346],{},[19,24347],{"alt":92,"src":24348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[24,24350,24351],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[24,24353,24354],{},[19,24355],{"alt":92,"src":24356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[24,24358,24359],{},[19,24360],{"alt":92,"src":24361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[24,24363,24364],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[24,24366,24367],{},[19,24368],{"alt":92,"src":24369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[24,24371,24372],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[24,24374,24375],{},[19,24376],{"alt":92,"src":24377},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[24,24379,24380],{},"改进theta要用到策略梯度算法",[24,24382,24383],{},[19,24384],{"alt":92,"src":24385},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[24,24387,24388],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[24,24390,24391],{},[19,24392],{"alt":92,"src":24393},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[24,24395,24396],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[24,24398,24399],{},[19,24400],{"alt":92,"src":24401},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[24,24403,24404],{},[19,24405],{"alt":92,"src":24406},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[24,24408,24409],{},"梯度公式总结：",[24,24411,24412],{},[19,24413],{"alt":92,"src":24414},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[24,24416,24417],{},"两个公式的分别应用场景：",[24,24419,24420],{},"对于离散的动作：",[24,24422,24423],{},[19,24424],{"alt":92,"src":24425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[24,24427,24428],{},"对于连续的动作：",[24,24430,24431],{},[19,24432],{"alt":92,"src":24433},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[24,24435,24436],{},[19,24437],{"alt":92,"src":24438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24440,24442],{"id":24441},"_42概率梯度算法总结","4.2.概率梯度算法总结",[24,24444,24445],{},"使用蒙特卡洛来近似计算策略梯度",[24,24447,24448],{},"蒙特卡洛法的解释如下：",[24,24450,24451],{},[19,24452],{"alt":92,"src":24453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[24,24455,24456],{},[19,24457],{"alt":92,"src":24458},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[24,24460,24461],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[138,24463,24464],{},[70,24465,24466],{},"方法一：reinforce算法",[24,24468,24469],{},[19,24470],{"alt":92,"src":24471},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[24,24473,24474],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[138,24476,24477],{"start":195},[70,24478,24479],{},"方法二：actor-critic算法",[24,24481,24482],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[24,24484,24485],{},"两个网络的构建：",[24,24487,24488],{},[19,24489],{"alt":92,"src":24490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[24,24492,24493],{},"actor网路：",[24,24495,24496],{},[19,24497],{"alt":92,"src":24498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[24,24500,24501],{},"critic网络",[24,24503,24504],{},[19,24505],{"alt":92,"src":24506},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[138,24508,24509],{"start":241},[70,24510,24511],{},"网络的训练",[24,24513,24514],{},"网络描述",[24,24516,24517],{},[19,24518],{"alt":92,"src":24519},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[24,24521,24522],{},[19,24523],{"alt":92,"src":24524},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[24,24526,24527],{},"TD算法更新梯度：",[24,24529,24530],{},[19,24531],{"alt":92,"src":24532},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[24,24534,24535],{},"策略网络更新梯度：",[24,24537,24538],{},[19,24539],{"alt":92,"src":24540},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[24,24542,24543],{},"训练整个流程的具体描述：",[24,24545,24546,24549,24550],{},[19,24547],{"alt":92,"src":24548},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[19,24551],{"alt":92,"src":24552},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":92,"searchDepth":195,"depth":195,"links":24554},[24555,24556],{"id":24331,"depth":195,"text":24332},{"id":24441,"depth":195,"text":24442},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24323,"description":92},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24563,"title":24564,"body":24565,"description":24572,"extension":247,"meta":24622,"navigation":249,"path":24623,"seo":24624,"stem":24625,"__hash__":24626},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24566,"toc":24618},[24567,24570,24573,24577,24580,24585,24589,24592,24597,24600,24605,24610,24613],[10,24568,24564],{"id":24569},"_5alphago算法",[24,24571,24572],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24574,24576],{"id":24575},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[24,24578,24579],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[24,24581,24582],{},[19,24583],{"alt":92,"src":24584},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24586,24588],{"id":24587},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[24,24590,24591],{},"采用强化学习的方式训练策略网络",[24,24593,24594],{},[19,24595],{"alt":92,"src":24596},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[24,24598,24599],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[24,24601,24602],{},[19,24603],{"alt":92,"src":24604},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[24,24606,24607],{},[19,24608],{"alt":92,"src":24609},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[24,24611,24612],{},"强化学习训练策略网络的总结：",[24,24614,24615],{},[19,24616],{"alt":92,"src":24617},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":92,"searchDepth":195,"depth":195,"links":24619},[24620,24621],{"id":24575,"depth":195,"text":24576},{"id":24587,"depth":195,"text":24588},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24564,"description":24572},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24628,"title":24629,"body":24630,"description":24637,"extension":247,"meta":24640,"navigation":249,"path":24641,"seo":24642,"stem":24643,"__hash__":24644},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24631,"toc":24638},[24632,24635],[10,24633,24629],{"id":24634},"_6价值网络",[24,24636,24637],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":92,"searchDepth":195,"depth":195,"links":24639},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24629,"description":24637},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24646,"title":24647,"body":24648,"description":24652,"extension":247,"meta":24653,"navigation":249,"path":24654,"seo":24655,"stem":24656,"__hash__":24657},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24649,"toc":24650},[],{"title":92,"searchDepth":195,"depth":195,"links":24651},[],"记录自己的强化学习笔记。",{"category":23567},"\u002Fwiki\u002F2025-12-04",{"title":24647,"description":24652},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24659,"title":24660,"body":24661,"description":246,"extension":247,"meta":24700,"navigation":249,"path":24701,"seo":24702,"stem":24703,"__hash__":24704},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24662,"toc":24698},[24663,24666,24669,24675,24678,24684,24687,24692,24695],[10,24664,24660],{"id":24665},"_1-项目概览与官方资源",[24,24667,24668],{},"官方文档：",[24,24670,24671],{},[558,24672,24673],{"href":24673,"rel":24674},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24054],[24,24676,24677],{},"官方代码仓库：",[24,24679,24680],{},[558,24681,24682],{"href":24682,"rel":24683},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24054],[24,24685,24686],{},"复现大体流程：",[24,24688,24689],{},[19,24690],{"alt":92,"src":24691},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[24,24693,24694],{},"本教程的目标是打通这条链路：",[24,24696,24697],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":92,"searchDepth":195,"depth":195,"links":24699},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24660,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24706,"title":24707,"body":24708,"description":246,"extension":247,"meta":24824,"navigation":249,"path":24825,"seo":24826,"stem":24827,"__hash__":24828},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24709,"toc":24819},[24710,24713,24717,24720,24727,24731,24734,24743,24753,24757,24787,24790,24816],[10,24711,24707],{"id":24712},"_2-环境准备与设备连接",[14,24714,24716],{"id":24715},"_21-系统与环境","2.1 系统与环境",[24,24718,24719],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[24,24721,24722,24723,24726],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[94,24724,24725],{},"lerobot"," 依赖。",[14,24728,24730],{"id":24729},"_22-机械臂串口识别","2.2 机械臂串口识别",[24,24732,24733],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[87,24735,24737],{"className":24011,"code":24736,"language":24013,"meta":92,"style":92},"lerobot-find-out\n",[94,24738,24739],{"__ignoreMap":92},[97,24740,24741],{"class":99,"line":100},[97,24742,24736],{"class":111},[24,24744,24745,24746,532,24749,24752],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[94,24747,24748],{},"\u002Fdev\u002FttyACM0",[94,24750,24751],{},"\u002Fdev\u002FttyACM1","）。",[14,24754,24756],{"id":24755},"_23-串口授权","2.3 串口授权",[87,24758,24760],{"className":24011,"code":24759,"language":24013,"meta":92,"style":92},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[94,24761,24762,24776],{"__ignoreMap":92},[97,24763,24764,24767,24770,24773],{"class":99,"line":100},[97,24765,24766],{"class":111},"sudo",[97,24768,24769],{"class":118}," chmod",[97,24771,24772],{"class":370}," 666",[97,24774,24775],{"class":118}," \u002Fdev\u002FttyACM0\n",[97,24777,24778,24780,24782,24784],{"class":99,"line":195},[97,24779,24766],{"class":111},[97,24781,24769],{"class":118},[97,24783,24772],{"class":370},[97,24785,24786],{"class":118}," \u002Fdev\u002FttyACM1\n",[24,24788,24789],{},"说明：",[67,24791,24792,24797,24803,24813],{},[70,24793,24794,24796],{},[94,24795,24766],{},"：以 root 权限执行命令。",[70,24798,24799,24802],{},[94,24800,24801],{},"chmod","：修改设备节点权限。",[70,24804,24805,24808,24809,24812],{},[94,24806,24807],{},"666","：",[94,24810,24811],{},"rw-rw-rw-","，所有用户可读写。",[70,24814,24815],{},"串口号必须替换为你机器上的真实端口。",[231,24817,24818],{},"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":92,"searchDepth":195,"depth":195,"links":24820},[24821,24822,24823],{"id":24715,"depth":195,"text":24716},{"id":24729,"depth":195,"text":24730},{"id":24755,"depth":195,"text":24756},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24707,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24830,"title":24831,"body":24832,"description":246,"extension":247,"meta":24993,"navigation":249,"path":24994,"seo":24995,"stem":24996,"__hash__":24997},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24833,"toc":24989},[24834,24838,24842,24848,24851,24908,24911,24915,24918,24986],[10,24835,24837],{"id":24836},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24839,24841],{"id":24840},"_31-配置电机-id","3.1 配置电机 ID",[24,24843,24844,24845,24847],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[94,24846,537],{},"，需要改成机械臂链路里不冲突的编号。",[24,24849,24850],{},"方式一：用 LeRobot 命令逐步写入。",[87,24852,24854],{"className":24011,"code":24853,"language":24013,"meta":92,"style":92},"# 主臂舵机配置 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",[94,24855,24856,24861,24869,24876,24881,24885,24890,24896,24903],{"__ignoreMap":92},[97,24857,24858],{"class":99,"line":100},[97,24859,24860],{"class":191},"# 主臂舵机配置 ID\n",[97,24862,24863,24866],{"class":99,"line":195},[97,24864,24865],{"class":111},"lerobot-setup-motors",[97,24867,24868],{"class":370}," \\\n",[97,24870,24871,24874],{"class":99,"line":241},[97,24872,24873],{"class":370},"  --teleop.type=so101_leader",[97,24875,24868],{"class":370},[97,24877,24878],{"class":99,"line":1387},[97,24879,24880],{"class":370},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[97,24882,24883],{"class":99,"line":1393},[97,24884,2591],{"emptyLinePlaceholder":249},[97,24886,24887],{"class":99,"line":1407},[97,24888,24889],{"class":191},"# 从臂舵机配置 ID\n",[97,24891,24892,24894],{"class":99,"line":1413},[97,24893,24865],{"class":111},[97,24895,24868],{"class":370},[97,24897,24898,24901],{"class":99,"line":1504},[97,24899,24900],{"class":370},"  --robot.type=so101_follower",[97,24902,24868],{"class":370},[97,24904,24905],{"class":99,"line":1510},[97,24906,24907],{"class":370},"  --robot.port=\u002Fdev\u002FttyACM1\n",[24,24909,24910],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24912,24914],{"id":24913},"_32-机械臂校准","3.2 机械臂校准",[24,24916,24917],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[87,24919,24921],{"className":24011,"code":24920,"language":24013,"meta":92,"style":92},"# 主臂校准\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",[94,24922,24923,24928,24935,24941,24948,24953,24957,24962,24968,24974,24981],{"__ignoreMap":92},[97,24924,24925],{"class":99,"line":100},[97,24926,24927],{"class":191},"# 主臂校准\n",[97,24929,24930,24933],{"class":99,"line":195},[97,24931,24932],{"class":111},"lerobot-calibrate",[97,24934,24868],{"class":370},[97,24936,24937,24939],{"class":99,"line":241},[97,24938,24873],{"class":370},[97,24940,24868],{"class":370},[97,24942,24943,24946],{"class":99,"line":1387},[97,24944,24945],{"class":370},"  --teleop.port=\u002Fdev\u002FttyACM0",[97,24947,24868],{"class":370},[97,24949,24950],{"class":99,"line":1393},[97,24951,24952],{"class":370},"  --teleop.id=my_awesome_leader_arm\n",[97,24954,24955],{"class":99,"line":1407},[97,24956,2591],{"emptyLinePlaceholder":249},[97,24958,24959],{"class":99,"line":1413},[97,24960,24961],{"class":191},"# 从臂校准\n",[97,24963,24964,24966],{"class":99,"line":1504},[97,24965,24932],{"class":111},[97,24967,24868],{"class":370},[97,24969,24970,24972],{"class":99,"line":1510},[97,24971,24900],{"class":370},[97,24973,24868],{"class":370},[97,24975,24976,24979],{"class":99,"line":1522},[97,24977,24978],{"class":370},"  --robot.port=\u002Fdev\u002FttyACM1",[97,24980,24868],{"class":370},[97,24982,24983],{"class":99,"line":1804},[97,24984,24985],{"class":370},"  --robot.id=my_awesome_follower_arm\n",[231,24987,24988],{},"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":92,"searchDepth":195,"depth":195,"links":24990},[24991,24992],{"id":24840,"depth":195,"text":24841},{"id":24913,"depth":195,"text":24914},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24831,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24999,"title":25000,"body":25001,"description":246,"extension":247,"meta":25192,"navigation":249,"path":25193,"seo":25194,"stem":25195,"__hash__":25196},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25002,"toc":25188},[25003,25006,25010,25057,25061,25074,25137,25140,25185],[10,25004,25000],{"id":25005},"_4-遥操与相机接入",[14,25007,25009],{"id":25008},"_41-不带相机遥操","4.1 不带相机遥操",[87,25011,25013],{"className":24011,"code":25012,"language":24013,"meta":92,"style":92},"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",[94,25014,25015,25022,25028,25034,25041,25047,25053],{"__ignoreMap":92},[97,25016,25017,25020],{"class":99,"line":100},[97,25018,25019],{"class":111},"lerobot-teleoperate",[97,25021,24868],{"class":370},[97,25023,25024,25026],{"class":99,"line":195},[97,25025,24900],{"class":370},[97,25027,24868],{"class":370},[97,25029,25030,25032],{"class":99,"line":241},[97,25031,24978],{"class":370},[97,25033,24868],{"class":370},[97,25035,25036,25039],{"class":99,"line":1387},[97,25037,25038],{"class":370},"  --robot.id=my_awesome_follower_arm",[97,25040,24868],{"class":370},[97,25042,25043,25045],{"class":99,"line":1393},[97,25044,24873],{"class":370},[97,25046,24868],{"class":370},[97,25048,25049,25051],{"class":99,"line":1407},[97,25050,24945],{"class":370},[97,25052,24868],{"class":370},[97,25054,25055],{"class":99,"line":1413},[97,25056,24952],{"class":370},[14,25058,25060],{"id":25059},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[87,25062,25064],{"className":24011,"code":25063,"language":24013,"meta":92,"style":92},"lerobot-find-cameras opencv\n",[94,25065,25066],{"__ignoreMap":92},[97,25067,25068,25071],{"class":99,"line":100},[97,25069,25070],{"class":111},"lerobot-find-cameras",[97,25072,25073],{"class":118}," opencv\n",[87,25075,25077],{"className":24011,"code":25076,"language":24013,"meta":92,"style":92},"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",[94,25078,25079,25085,25091,25097,25103,25113,25119,25125,25132],{"__ignoreMap":92},[97,25080,25081,25083],{"class":99,"line":100},[97,25082,25019],{"class":111},[97,25084,24868],{"class":370},[97,25086,25087,25089],{"class":99,"line":195},[97,25088,24900],{"class":370},[97,25090,24868],{"class":370},[97,25092,25093,25095],{"class":99,"line":241},[97,25094,24978],{"class":370},[97,25096,24868],{"class":370},[97,25098,25099,25101],{"class":99,"line":1387},[97,25100,25038],{"class":370},[97,25102,24868],{"class":370},[97,25104,25105,25108,25111],{"class":99,"line":1393},[97,25106,25107],{"class":370},"  --robot.cameras=",[97,25109,25110],{"class":118},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[97,25112,24868],{"class":370},[97,25114,25115,25117],{"class":99,"line":1407},[97,25116,24873],{"class":370},[97,25118,24868],{"class":370},[97,25120,25121,25123],{"class":99,"line":1413},[97,25122,24945],{"class":370},[97,25124,24868],{"class":370},[97,25126,25127,25130],{"class":99,"line":1504},[97,25128,25129],{"class":370},"  --teleop.id=my_awesome_leader_arm",[97,25131,24868],{"class":370},[97,25133,25134],{"class":99,"line":1510},[97,25135,25136],{"class":370},"  --display_data=true\n",[24,25138,25139],{},"相机参数说明：",[67,25141,25142,25148,25154,25163,25173,25179],{},[70,25143,25144,25147],{},[94,25145,25146],{},"front","：相机名称。",[70,25149,25150,25153],{},[94,25151,25152],{},"type: opencv","：相机驱动类型。",[70,25155,25156,25159,25160,24752],{},[94,25157,25158],{},"index_or_path","：设备编号或设备路径（如 ",[94,25161,25162],{},"\u002Fdev\u002Fvideo4",[70,25164,25165,25168,25169,25172],{},[94,25166,25167],{},"width"," \u002F ",[94,25170,25171],{},"height","：图像分辨率。",[70,25174,25175,25178],{},[94,25176,25177],{},"fps","：采样帧率。",[70,25180,25181,25184],{},[94,25182,25183],{},"--display_data=true","：启用实时可视化。",[231,25186,25187],{},"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":92,"searchDepth":195,"depth":195,"links":25189},[25190,25191],{"id":25008,"depth":195,"text":25009},{"id":25059,"depth":195,"text":25060},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25000,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25198,"title":25199,"body":25200,"description":246,"extension":247,"meta":25372,"navigation":249,"path":25373,"seo":25374,"stem":25375,"__hash__":25376},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25201,"toc":25367},[25202,25206,25210,25215,25220,25223,25265,25271,25275,25324,25329,25333,25336,25344,25349,25354,25359,25364],[10,25203,25205],{"id":25204},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25207,25209],{"id":25208},"_51-生成访问令牌","5.1 生成访问令牌",[24,25211,25212],{},[19,25213],{"alt":92,"src":25214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[24,25216,25217],{},[19,25218],{"alt":92,"src":25219},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[24,25221,25222],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[87,25224,25226],{"className":24011,"code":25225,"language":24013,"meta":92,"style":92},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[94,25227,25228,25241],{"__ignoreMap":92},[97,25229,25230,25233,25236,25238],{"class":99,"line":100},[97,25231,25232],{"class":319},"export",[97,25234,25235],{"class":103}," HF_TOKEN",[97,25237,115],{"class":319},[97,25239,25240],{"class":118},"\"your_huggingface_token\"\n",[97,25242,25243,25246,25249,25252,25255,25257,25260,25262],{"class":99,"line":195},[97,25244,25245],{"class":111},"hf",[97,25247,25248],{"class":118}," auth",[97,25250,25251],{"class":118}," login",[97,25253,25254],{"class":370}," --token",[97,25256,9915],{"class":118},[97,25258,25259],{"class":103},"$HF_TOKEN",[97,25261,571],{"class":118},[97,25263,25264],{"class":370}," --add-to-git-credential\n",[24,25266,25267,25270],{},[94,25268,25269],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25272,25274],{"id":25273},"_52-验证登录","5.2 验证登录",[87,25276,25278],{"className":24011,"code":25277,"language":24013,"meta":92,"style":92},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[94,25279,25280,25311],{"__ignoreMap":92},[97,25281,25282,25285,25287,25290,25292,25294,25297,25300,25303,25306,25309],{"class":99,"line":100},[97,25283,25284],{"class":103},"HF_USER",[97,25286,115],{"class":319},[97,25288,25289],{"class":103},"$(",[97,25291,25245],{"class":111},[97,25293,25248],{"class":118},[97,25295,25296],{"class":118}," whoami",[97,25298,25299],{"class":319}," |",[97,25301,25302],{"class":111}," head",[97,25304,25305],{"class":370}," -n",[97,25307,25308],{"class":370}," 1",[97,25310,329],{"class":103},[97,25312,25313,25316,25318,25321],{"class":99,"line":195},[97,25314,25315],{"class":370},"echo",[97,25317,9915],{"class":118},[97,25319,25320],{"class":103},"$HF_USER",[97,25322,25323],{"class":118},"\"\n",[24,25325,25326],{},[19,25327],{"alt":92,"src":25328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25330,25332],{"id":25331},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[24,25334,25335],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[67,25337,25338,25341],{},[70,25339,25340],{},"Dataset Repo（用于上传演示数据）",[70,25342,25343],{},"Model Repo（用于上传训练后的 ACT 权重）",[24,25345,25346],{},[19,25347],{"alt":92,"src":25348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[24,25350,25351],{},[19,25352],{"alt":92,"src":25353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[24,25355,25356],{},[19,25357],{"alt":92,"src":25358},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[24,25360,25361],{},[19,25362],{"alt":92,"src":25363},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[231,25365,25366],{},"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":92,"searchDepth":195,"depth":195,"links":25368},[25369,25370,25371],{"id":25208,"depth":195,"text":25209},{"id":25273,"depth":195,"text":25274},{"id":25331,"depth":195,"text":25332},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25199,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25378,"title":25379,"body":25380,"description":246,"extension":247,"meta":25577,"navigation":249,"path":25578,"seo":25579,"stem":25580,"__hash__":25581},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25381,"toc":25572},[25382,25386,25390,25486,25494,25499,25503,25519,25522,25526,25569],[10,25383,25385],{"id":25384},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25387,25389],{"id":25388},"_61-录制示教数据","6.1 录制示教数据",[87,25391,25393],{"className":24011,"code":25392,"language":24013,"meta":92,"style":92},"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",[94,25394,25395,25402,25408,25414,25420,25429,25435,25441,25447,25454,25464,25471,25481],{"__ignoreMap":92},[97,25396,25397,25400],{"class":99,"line":100},[97,25398,25399],{"class":111},"lerobot-record",[97,25401,24868],{"class":370},[97,25403,25404,25406],{"class":99,"line":195},[97,25405,24900],{"class":370},[97,25407,24868],{"class":370},[97,25409,25410,25412],{"class":99,"line":241},[97,25411,24978],{"class":370},[97,25413,24868],{"class":370},[97,25415,25416,25418],{"class":99,"line":1387},[97,25417,25038],{"class":370},[97,25419,24868],{"class":370},[97,25421,25422,25424,25427],{"class":99,"line":1393},[97,25423,25107],{"class":370},[97,25425,25426],{"class":118},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[97,25428,24868],{"class":370},[97,25430,25431,25433],{"class":99,"line":1407},[97,25432,24873],{"class":370},[97,25434,24868],{"class":370},[97,25436,25437,25439],{"class":99,"line":1413},[97,25438,24945],{"class":370},[97,25440,24868],{"class":370},[97,25442,25443,25445],{"class":99,"line":1504},[97,25444,25129],{"class":370},[97,25446,24868],{"class":370},[97,25448,25449,25452],{"class":99,"line":1510},[97,25450,25451],{"class":370},"  --display_data=true",[97,25453,24868],{"class":370},[97,25455,25456,25459,25462],{"class":99,"line":1522},[97,25457,25458],{"class":370},"  --dataset.repo_id=",[97,25460,25461],{"class":118},"\"Embodied-AI-6\u002Fso101_test\"",[97,25463,24868],{"class":370},[97,25465,25466,25469],{"class":99,"line":1804},[97,25467,25468],{"class":370},"  --dataset.num_episodes=10",[97,25470,24868],{"class":370},[97,25472,25473,25476,25479],{"class":99,"line":1809},[97,25474,25475],{"class":370},"  --dataset.single_task=",[97,25477,25478],{"class":118},"\"Grab the green cube\"",[97,25480,24868],{"class":370},[97,25482,25483],{"class":99,"line":1815},[97,25484,25485],{"class":370},"  --resume=true\n",[67,25487,25488],{},[70,25489,25490,25493],{},[94,25491,25492],{},"--resume=true","：已有同一数据集时继续追加 episode。",[24,25495,25496],{},[19,25497],{"alt":92,"src":25498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25500,25502],{"id":25501},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[87,25504,25506],{"className":24011,"code":25505,"language":24013,"meta":92,"style":92},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[94,25507,25508],{"__ignoreMap":92},[97,25509,25510,25513,25516],{"class":99,"line":100},[97,25511,25512],{"class":111},"rm",[97,25514,25515],{"class":370}," -rf",[97,25517,25518],{"class":118}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[24,25520,25521],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25523,25525],{"id":25524},"_63-回放指定-episode","6.3 回放指定 episode",[87,25527,25529],{"className":24011,"code":25528,"language":24013,"meta":92,"style":92},"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",[94,25530,25531,25538,25544,25550,25556,25564],{"__ignoreMap":92},[97,25532,25533,25536],{"class":99,"line":100},[97,25534,25535],{"class":111},"lerobot-replay",[97,25537,24868],{"class":370},[97,25539,25540,25542],{"class":99,"line":195},[97,25541,24900],{"class":370},[97,25543,24868],{"class":370},[97,25545,25546,25548],{"class":99,"line":241},[97,25547,24978],{"class":370},[97,25549,24868],{"class":370},[97,25551,25552,25554],{"class":99,"line":1387},[97,25553,25038],{"class":370},[97,25555,24868],{"class":370},[97,25557,25558,25560,25562],{"class":99,"line":1393},[97,25559,25458],{"class":370},[97,25561,25461],{"class":118},[97,25563,24868],{"class":370},[97,25565,25566],{"class":99,"line":1407},[97,25567,25568],{"class":370},"  --dataset.episode=0\n",[231,25570,25571],{},"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":92,"searchDepth":195,"depth":195,"links":25573},[25574,25575,25576],{"id":25388,"depth":195,"text":25389},{"id":25501,"depth":195,"text":25502},{"id":25524,"depth":195,"text":25525},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25379,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25583,"title":25584,"body":25585,"description":246,"extension":247,"meta":25713,"navigation":249,"path":25714,"seo":25715,"stem":25716,"__hash__":25717},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25586,"toc":25711},[25587,25591,25654,25657,25704,25709],[10,25588,25590],{"id":25589},"_7-act-模型训练","7. ACT 模型训练",[87,25592,25594],{"className":24011,"code":25593,"language":24013,"meta":92,"style":92},"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",[94,25595,25596,25603,25611,25618,25625,25632,25639,25646],{"__ignoreMap":92},[97,25597,25598,25601],{"class":99,"line":100},[97,25599,25600],{"class":111},"lerobot-train",[97,25602,24868],{"class":370},[97,25604,25605,25607,25609],{"class":99,"line":195},[97,25606,25458],{"class":370},[97,25608,25461],{"class":118},[97,25610,24868],{"class":370},[97,25612,25613,25616],{"class":99,"line":241},[97,25614,25615],{"class":370},"  --policy.type=act",[97,25617,24868],{"class":370},[97,25619,25620,25623],{"class":99,"line":1387},[97,25621,25622],{"class":370},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[97,25624,24868],{"class":370},[97,25626,25627,25630],{"class":99,"line":1393},[97,25628,25629],{"class":370},"  --job_name=act_so101_test",[97,25631,24868],{"class":370},[97,25633,25634,25637],{"class":99,"line":1407},[97,25635,25636],{"class":370},"  --policy.device=cuda",[97,25638,24868],{"class":370},[97,25640,25641,25644],{"class":99,"line":1413},[97,25642,25643],{"class":370},"  --wandb.enable=false",[97,25645,24868],{"class":370},[97,25647,25648,25651],{"class":99,"line":1504},[97,25649,25650],{"class":370},"  --policy.repo_id=",[97,25652,25653],{"class":118},"\"Embodied-AI-6\u002Flerobot_new\"\n",[24,25655,25656],{},"参数说明：",[67,25658,25659,25665,25671,25677,25683,25692,25698],{},[70,25660,25661,25664],{},[94,25662,25663],{},"--dataset.repo_id","：训练数据集仓库。",[70,25666,25667,25670],{},[94,25668,25669],{},"--policy.type=act","：策略模型类型为 ACT。",[70,25672,25673,25676],{},[94,25674,25675],{},"--output_dir","：本地训练输出目录。",[70,25678,25679,25682],{},[94,25680,25681],{},"--job_name","：训练任务名称。",[70,25684,25685,25688,25689,24752],{},[94,25686,25687],{},"--policy.device","：训练设备（如 ",[94,25690,25691],{},"cuda",[70,25693,25694,25697],{},[94,25695,25696],{},"--wandb.enable","：是否启用 WandB 可视化。",[70,25699,25700,25703],{},[94,25701,25702],{},"--policy.repo_id","：训练后模型推送目标仓库。",[24,25705,25706],{},[19,25707],{"alt":92,"src":25708},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[231,25710,25571],{},{"title":92,"searchDepth":195,"depth":195,"links":25712},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25584,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25719,"title":25720,"body":25721,"description":246,"extension":247,"meta":25808,"navigation":249,"path":25809,"seo":25810,"stem":25811,"__hash__":25812},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25722,"toc":25806},[25723,25726,25729,25796,25804],[10,25724,25720],{"id":25725},"_8-策略部署与自动采集",[24,25727,25728],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[87,25730,25732],{"className":24011,"code":25731,"language":24013,"meta":92,"style":92},"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",[94,25733,25734,25740,25746,25752,25760,25766,25773,25781,25789],{"__ignoreMap":92},[97,25735,25736,25738],{"class":99,"line":100},[97,25737,25399],{"class":111},[97,25739,24868],{"class":370},[97,25741,25742,25744],{"class":99,"line":195},[97,25743,24900],{"class":370},[97,25745,24868],{"class":370},[97,25747,25748,25750],{"class":99,"line":241},[97,25749,24978],{"class":370},[97,25751,24868],{"class":370},[97,25753,25754,25756,25758],{"class":99,"line":1387},[97,25755,25107],{"class":370},[97,25757,25426],{"class":118},[97,25759,24868],{"class":370},[97,25761,25762,25764],{"class":99,"line":1393},[97,25763,25038],{"class":370},[97,25765,24868],{"class":370},[97,25767,25768,25771],{"class":99,"line":1407},[97,25769,25770],{"class":370},"  --display_data=false",[97,25772,24868],{"class":370},[97,25774,25775,25777,25779],{"class":99,"line":1413},[97,25776,25458],{"class":370},[97,25778,25461],{"class":118},[97,25780,24868],{"class":370},[97,25782,25783,25785,25787],{"class":99,"line":1504},[97,25784,25475],{"class":370},[97,25786,25478],{"class":118},[97,25788,24868],{"class":370},[97,25790,25791,25794],{"class":99,"line":1510},[97,25792,25793],{"class":370},"  --policy.path=",[97,25795,25653],{"class":118},[67,25797,25798],{},[70,25799,25800,25803],{},[94,25801,25802],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[231,25805,25571],{},{"title":92,"searchDepth":195,"depth":195,"links":25807},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25720,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25814,"title":25815,"body":25816,"description":246,"extension":247,"meta":25845,"navigation":249,"path":25846,"seo":25847,"stem":25848,"__hash__":25849},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25817,"toc":25843},[25818,25822,25825,25831,25834,25840],[10,25819,25821],{"id":25820},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[24,25823,25824],{},"项目地址：",[24,25826,25827],{},[558,25828,25829],{"href":25829,"rel":25830},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24054],[24,25832,25833],{},"参考教程：",[24,25835,25836],{},[558,25837,25838],{"href":25838,"rel":25839},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24054],[24,25841,25842],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":92,"searchDepth":195,"depth":195,"links":25844},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25815,"description":246},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25851,"title":25852,"body":25853,"description":25857,"extension":247,"meta":25858,"navigation":249,"path":25859,"seo":25860,"stem":25861,"__hash__":25862},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25854,"toc":25855},[],{"title":92,"searchDepth":195,"depth":195,"links":25856},[],"act复现",{"category":23567},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25852,"description":25857},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25864,"title":25865,"body":25866,"description":92,"extension":247,"meta":26168,"navigation":249,"path":26169,"seo":26170,"stem":26171,"__hash__":26172},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25867,"toc":26160},[25868,25871,25875,25885,25892,25899,25902,25909,25912,25915,25919,25931,25935,25981,25984,25987,25990,25993,25996,26000,26038,26044,26048,26102,26107,26110,26113,26118,26121,26126,26129,26132,26136,26139,26142,26146],[10,25869,25865],{"id":25870},"_1简介",[48,25872,25874],{"id":25873},"_11什么是-docker","1.1什么是 Docker？",[24,25876,25877,25878,25881,25882],{},"Docker 是一个开源的 ",[469,25879,25880],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[469,25883,25884],{},"一次构建，到处运行。",[24,25886,25887,25888,25891],{},"“ ",[469,25889,25890],{},"一次构建，到处运行"," ”也就是说：",[138,25893,25894],{},[70,25895,25896],{},[469,25897,25898],{},"之前：",[24,25900,25901],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[138,25903,25904],{},[70,25905,25906],{},[469,25907,25908],{},"使用docker后：",[24,25910,25911],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[24,25913,25914],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[48,25916,25918],{"id":25917},"_12它是怎么工作的","1.2.它是怎么工作的？",[67,25920,25921,25924],{},[70,25922,25923],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[70,25925,25926,25927,25930],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[469,25928,25929],{},"无论在哪运行都一样稳定"," 。",[48,25932,25934],{"id":25933},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[457,25936,25937,25947],{},[460,25938,25939],{},[463,25940,25941,25944],{},[466,25942,25943],{"align":23925},"概念",[466,25945,25946],{"align":23925},"解释",[504,25948,25949,25957,25965,25973],{},[463,25950,25951,25954],{},[509,25952,25953],{"align":23925},"镜像",[509,25955,25956],{"align":23925},"Image，运行容器的模板，像是一个应用快照",[463,25958,25959,25962],{},[509,25960,25961],{"align":23925},"容器",[509,25963,25964],{"align":23925},"Container，运行中的镜像实例，有自己的文件系统、网络等",[463,25966,25967,25970],{},[509,25968,25969],{"align":23925},"Dockerfile",[509,25971,25972],{"align":23925},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[463,25974,25975,25978],{},[509,25976,25977],{"align":23925},"仓库",[509,25979,25980],{"align":23925},"Registry，存放镜像的地方，比如 Docker Hub",[24,25982,25983],{},"抽象化理解:",[24,25985,25986],{},"Docker镜像≈C++类",[24,25988,25989],{},"Docker容器≈C++类实例(即对象)",[24,25991,25992],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[24,25994,25995],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[48,25997,25999],{"id":25998},"_14类比理解","1.4.类比理解",[457,26001,26002,26012],{},[460,26003,26004],{},[463,26005,26006,26009],{},[466,26007,26008],{"align":23925},"传统部署",[466,26010,26011],{"align":23925},"Docker部署",[504,26013,26014,26022,26030],{},[463,26015,26016,26019],{},[509,26017,26018],{"align":23925},"手动安装依赖、调试版本不一致问题",[509,26020,26021],{"align":23925},"一次打包环境和代码",[463,26023,26024,26027],{},[509,26025,26026],{"align":23925},"程序“裸奔”跑在系统上",[509,26028,26029],{"align":23925},"程序“穿着容器”隔离运行",[463,26031,26032,26035],{},[509,26033,26034],{"align":23925},"容易“在我电脑上能跑”",[509,26036,26037],{"align":23925},"保证“无论在哪都能跑”",[24,26039,26040,26041],{},"就像快递包裹： ",[469,26042,26043],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[48,26045,26047],{"id":26046},"_15docker-的核心优势","1.5.Docker 的核心优势",[457,26049,26050,26060],{},[460,26051,26052],{},[463,26053,26054,26057],{},[466,26055,26056],{"align":23925},"优势",[466,26058,26059],{"align":23925},"说明",[504,26061,26062,26070,26078,26086,26094],{},[463,26063,26064,26067],{},[509,26065,26066],{"align":23925},"轻量级",[509,26068,26069],{"align":23925},"基于系统内核共享，启动速度快，占资源少",[463,26071,26072,26075],{},[509,26073,26074],{"align":23925},"跨平台",[509,26076,26077],{"align":23925},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[463,26079,26080,26083],{},[509,26081,26082],{"align":23925},"易于迁移部署",[509,26084,26085],{"align":23925},"应用和环境一起封装，不怕依赖不一致",[463,26087,26088,26091],{},[509,26089,26090],{"align":23925},"易于版本控制",[509,26092,26093],{"align":23925},"镜像版本可控，支持回滚",[463,26095,26096,26099],{},[509,26097,26098],{"align":23925},"生态丰富",[509,26100,26101],{"align":23925},"Docker Hub 上有成千上万的现成镜像可用",[138,26103,26104],{},[70,26105,26106],{},"在Linux上可以几乎实现无性能损失。",[24,26108,26109],{},"docker里的发行版和本机共用Linux内核。",[24,26111,26112],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[138,26114,26115],{},[70,26116,26117],{},"可以快速部署在绝大多数Linux发行版",[24,26119,26120],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[138,26122,26123],{},[70,26124,26125],{},"配置环境简单",[24,26127,26128],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[24,26130,26131],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[138,26133,26134],{},[70,26135,26098],{},[24,26137,26138],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[24,26140,26141],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[48,26143,26145],{"id":26144},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[67,26147,26148,26151,26154,26157],{},[70,26149,26150],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[70,26152,26153],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[70,26155,26156],{},"微服务架构：每个服务一个容器，灵活组合",[70,26158,26159],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":92,"searchDepth":195,"depth":195,"links":26161},[26162,26163,26164,26165,26166,26167],{"id":25873,"depth":241,"text":25874},{"id":25917,"depth":241,"text":25918},{"id":25933,"depth":241,"text":25934},{"id":25998,"depth":241,"text":25999},{"id":26046,"depth":241,"text":26047},{"id":26144,"depth":241,"text":26145},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25865,"description":92},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26174,"title":26175,"body":26176,"description":92,"extension":247,"meta":26909,"navigation":249,"path":26910,"seo":26911,"stem":26912,"__hash__":26913},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26177,"toc":26904},[26178,26181,26185,26188,26191,26197,26203,26207,26216,26219,26276,26279,26330,26333,26416,26419,26456,26460,26471,26484,26491,26494,26574,26577,26627,26630,26653,26657,26664,26667,26683,26689,26692,26708,26714,26717,26733,26747,26753,26773,26779,26782,26794,26800,26803,26817,26823,26826,26846,26851,26854,26857,26861,26864,26867,26870,26877,26880,26883,26886,26891,26896,26901],[10,26179,26175],{"id":26180},"_2安装docker",[48,26182,26184],{"id":26183},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[24,26186,26187],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[24,26189,26190],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[24,26192,26193],{},[558,26194,26195],{"href":26195,"rel":26196},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24054],[24,26198,26199],{},[558,26200,26201],{"href":26201,"rel":26202},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24054],[160,26204,26206],{"id":26205},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[24,26208,26209,26210,26215],{},"以下内容根据 ",[558,26211,26214],{"href":26212,"rel":26213},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24054],"官方文档"," 修改而来。",[24,26217,26218],{},"如果你过去安装过 docker，先删掉：",[87,26220,26222],{"className":24011,"code":26221,"language":24013,"meta":92,"style":92},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[94,26223,26224],{"__ignoreMap":92},[97,26225,26226,26228,26231,26234,26237,26240,26243,26246,26249,26252,26255,26258,26261,26264,26267,26270,26273],{"class":99,"line":100},[97,26227,3216],{"class":319},[97,26229,26230],{"class":103}," pkg ",[97,26232,26233],{"class":319},"in",[97,26235,26236],{"class":118}," docker.io",[97,26238,26239],{"class":118}," docker-doc",[97,26241,26242],{"class":118}," docker-compose",[97,26244,26245],{"class":118}," docker-compose-v2",[97,26247,26248],{"class":118}," podman-docker",[97,26250,26251],{"class":118}," containerd",[97,26253,26254],{"class":118}," runc",[97,26256,26257],{"class":103},"; ",[97,26259,26260],{"class":319},"do",[97,26262,26263],{"class":111}," sudo",[97,26265,26266],{"class":118}," apt-get",[97,26268,26269],{"class":118}," remove",[97,26271,26272],{"class":103}," $pkg; ",[97,26274,26275],{"class":319},"done\n",[24,26277,26278],{},"首先安装依赖和GPG：",[87,26280,26284],{"className":26281,"code":26282,"language":26283,"meta":92,"style":92},"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",[94,26285,26286,26291,26296,26301,26306,26311,26316,26320,26325],{"__ignoreMap":92},[97,26287,26288],{"class":99,"line":100},[97,26289,26290],{},"# Add Docker's official GPG key:\n",[97,26292,26293],{"class":99,"line":195},[97,26294,26295],{},"sudo apt-get update\n",[97,26297,26298],{"class":99,"line":241},[97,26299,26300],{},"sudo apt-get install ca-certificates curl\n",[97,26302,26303],{"class":99,"line":1387},[97,26304,26305],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[97,26307,26308],{"class":99,"line":1393},[97,26309,26310],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[97,26312,26313],{"class":99,"line":1407},[97,26314,26315],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[97,26317,26318],{"class":99,"line":1413},[97,26319,2591],{"emptyLinePlaceholder":249},[97,26321,26322],{"class":99,"line":1504},[97,26323,26324],{},"# 如果上面这行报错就弄下面这行\n",[97,26326,26327],{"class":99,"line":1510},[97,26328,26329],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[24,26331,26332],{},"信任 Docker 的 GPG 公钥并添加仓库：",[87,26334,26336],{"className":24011,"code":26335,"language":24013,"meta":92,"style":92},"# 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",[94,26337,26338,26343,26349,26366,26399],{"__ignoreMap":92},[97,26339,26340],{"class":99,"line":100},[97,26341,26342],{"class":191},"# Add the repository to Apt sources:\n",[97,26344,26345,26347],{"class":99,"line":195},[97,26346,25315],{"class":370},[97,26348,24868],{"class":370},[97,26350,26351,26354,26357,26360,26363],{"class":99,"line":241},[97,26352,26353],{"class":118},"  \"deb [arch=$(",[97,26355,26356],{"class":111},"dpkg",[97,26358,26359],{"class":370}," --print-architecture",[97,26361,26362],{"class":118},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[97,26364,26365],{"class":370},"\\\n",[97,26367,26368,26371,26373,26375,26378,26381,26383,26385,26388,26390,26392,26395,26397],{"class":99,"line":1387},[97,26369,26370],{"class":118},"  \"",[97,26372,25289],{"class":103},[97,26374,878],{"class":370},[97,26376,26377],{"class":118}," \u002Fetc\u002Fos-release",[97,26379,26380],{"class":103}," && ",[97,26382,25315],{"class":370},[97,26384,9915],{"class":118},[97,26386,26387],{"class":103},"$VERSION_CODENAME",[97,26389,571],{"class":118},[97,26391,749],{"class":103},[97,26393,26394],{"class":118},"\" stable\"",[97,26396,25299],{"class":319},[97,26398,24868],{"class":370},[97,26400,26401,26404,26407,26410,26413],{"class":99,"line":1393},[97,26402,26403],{"class":111},"  sudo",[97,26405,26406],{"class":118}," tee",[97,26408,26409],{"class":118}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[97,26411,26412],{"class":319}," >",[97,26414,26415],{"class":118}," \u002Fdev\u002Fnull\n",[24,26417,26418],{},"最后安装",[87,26420,26422],{"className":24011,"code":26421,"language":24013,"meta":92,"style":92},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[94,26423,26424,26433],{"__ignoreMap":92},[97,26425,26426,26428,26430],{"class":99,"line":100},[97,26427,24766],{"class":111},[97,26429,26266],{"class":118},[97,26431,26432],{"class":118}," update\n",[97,26434,26435,26437,26439,26441,26444,26447,26450,26453],{"class":99,"line":195},[97,26436,24766],{"class":111},[97,26438,26266],{"class":118},[97,26440,24023],{"class":118},[97,26442,26443],{"class":118}," docker-ce",[97,26445,26446],{"class":118}," docker-ce-cli",[97,26448,26449],{"class":118}," containerd.io",[97,26451,26452],{"class":118}," docker-buildx-plugin",[97,26454,26455],{"class":118}," docker-compose-plugin\n",[160,26457,26459],{"id":26458},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[24,26461,26462,26463,26466,26467,26470],{},"查看自己自己包管理工具版本（dnf是 ",[469,26464,26465],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[469,26468,26469],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[87,26472,26474],{"className":24011,"code":26473,"language":24013,"meta":92,"style":92},"dnf --version\n",[94,26475,26476],{"__ignoreMap":92},[97,26477,26478,26481],{"class":99,"line":100},[97,26479,26480],{"class":111},"dnf",[97,26482,26483],{"class":370}," --version\n",[24,26485,26209,26486,26490],{},[558,26487,26214],{"href":26488,"rel":26489},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24054]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[24,26492,26493],{},"如果你之前安装过 docker，请先删掉",[87,26495,26497],{"className":24011,"code":26496,"language":24013,"meta":92,"style":92},"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",[94,26498,26499,26513,26520,26527,26534,26541,26548,26555,26562,26569],{"__ignoreMap":92},[97,26500,26501,26503,26506,26508,26511],{"class":99,"line":100},[97,26502,24766],{"class":111},[97,26504,26505],{"class":118}," dnf",[97,26507,26269],{"class":118},[97,26509,26510],{"class":118}," docker",[97,26512,24868],{"class":370},[97,26514,26515,26518],{"class":99,"line":195},[97,26516,26517],{"class":118},"                  docker-client",[97,26519,24868],{"class":370},[97,26521,26522,26525],{"class":99,"line":241},[97,26523,26524],{"class":118},"                  docker-client-latest",[97,26526,24868],{"class":370},[97,26528,26529,26532],{"class":99,"line":1387},[97,26530,26531],{"class":118},"                  docker-common",[97,26533,24868],{"class":370},[97,26535,26536,26539],{"class":99,"line":1393},[97,26537,26538],{"class":118},"                  docker-latest",[97,26540,24868],{"class":370},[97,26542,26543,26546],{"class":99,"line":1407},[97,26544,26545],{"class":118},"                  docker-latest-logrotate",[97,26547,24868],{"class":370},[97,26549,26550,26553],{"class":99,"line":1413},[97,26551,26552],{"class":118},"                  docker-logrotate",[97,26554,24868],{"class":370},[97,26556,26557,26560],{"class":99,"line":1504},[97,26558,26559],{"class":118},"                  docker-selinux",[97,26561,24868],{"class":370},[97,26563,26564,26567],{"class":99,"line":1510},[97,26565,26566],{"class":118},"                  docker-engine-selinux",[97,26568,24868],{"class":370},[97,26570,26571],{"class":99,"line":1522},[97,26572,26573],{"class":118},"                  docker-engine\n",[24,26575,26576],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[87,26578,26580],{"className":24011,"code":26579,"language":24013,"meta":92,"style":92},"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",[94,26581,26582,26596,26611],{"__ignoreMap":92},[97,26583,26584,26586,26588,26591,26593],{"class":99,"line":100},[97,26585,24766],{"class":111},[97,26587,26505],{"class":118},[97,26589,26590],{"class":370}," -y",[97,26592,24023],{"class":118},[97,26594,26595],{"class":118}," dnf-plugins-core\n",[97,26597,26598,26600,26602,26605,26608],{"class":99,"line":195},[97,26599,24766],{"class":111},[97,26601,26505],{"class":118},[97,26603,26604],{"class":118}," config-manager",[97,26606,26607],{"class":118}," addrepo",[97,26609,26610],{"class":370}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[97,26612,26613,26615,26618,26621,26624],{"class":99,"line":241},[97,26614,24766],{"class":111},[97,26616,26617],{"class":118}," sed",[97,26619,26620],{"class":370}," -i",[97,26622,26623],{"class":118}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[97,26625,26626],{"class":118}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[24,26628,26629],{},"最后安装：",[87,26631,26633],{"className":24011,"code":26632,"language":24013,"meta":92,"style":92},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[94,26634,26635],{"__ignoreMap":92},[97,26636,26637,26639,26641,26643,26645,26647,26649,26651],{"class":99,"line":100},[97,26638,24766],{"class":111},[97,26640,26505],{"class":118},[97,26642,24023],{"class":118},[97,26644,26443],{"class":118},[97,26646,26446],{"class":118},[97,26648,26449],{"class":118},[97,26650,26452],{"class":118},[97,26652,26455],{"class":118},[48,26654,26656],{"id":26655},"_22配置环境","2.2.配置环境",[160,26658,26660,26663],{"id":26659},"_221检查-docker-服务状态",[469,26661,26662],{},"2.2.1.检查 Docker 服务状态"," ：",[24,26665,26666],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[87,26668,26670],{"className":24011,"code":26669,"language":24013,"meta":92,"style":92},"systemctl status docker\n",[94,26671,26672],{"__ignoreMap":92},[97,26673,26674,26677,26680],{"class":99,"line":100},[97,26675,26676],{"class":111},"systemctl",[97,26678,26679],{"class":118}," status",[97,26681,26682],{"class":118}," docker\n",[160,26684,26686,26663],{"id":26685},"_222启动-docker-服务",[469,26687,26688],{},"2.2.2.启动 Docker 服务",[24,26690,26691],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[87,26693,26695],{"className":24011,"code":26694,"language":24013,"meta":92,"style":92},"sudo systemctl start docker\n",[94,26696,26697],{"__ignoreMap":92},[97,26698,26699,26701,26704,26706],{"class":99,"line":100},[97,26700,24766],{"class":111},[97,26702,26703],{"class":118}," systemctl",[97,26705,4375],{"class":118},[97,26707,26682],{"class":118},[160,26709,26711,26663],{"id":26710},"_223设置-docker-开机自启",[469,26712,26713],{},"2.2.3.设置 Docker 开机自启",[24,26715,26716],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[87,26718,26720],{"className":24011,"code":26719,"language":24013,"meta":92,"style":92},"sudo systemctl enable docker\n",[94,26721,26722],{"__ignoreMap":92},[97,26723,26724,26726,26728,26731],{"class":99,"line":100},[97,26725,24766],{"class":111},[97,26727,26703],{"class":118},[97,26729,26730],{"class":118}," enable",[97,26732,26682],{"class":118},[160,26734,26736,13986,26739,13986,26744,26663],{"id":26735},"_224将用户添加到-docker-组",[469,26737,26738],{},"2.2.4.将用户添加到",[469,26740,26741],{},[94,26742,26743],{},"docker",[469,26745,26746],{},"组",[24,26748,26749,26750,26752],{},"使用以下命令将当前用户添加到 ",[94,26751,26743],{}," 组：",[87,26754,26756],{"className":24011,"code":26755,"language":24013,"meta":92,"style":92},"sudo usermod -aG docker $USER\n",[94,26757,26758],{"__ignoreMap":92},[97,26759,26760,26762,26765,26768,26770],{"class":99,"line":100},[97,26761,24766],{"class":111},[97,26763,26764],{"class":118}," usermod",[97,26766,26767],{"class":370}," -aG",[97,26769,26510],{"class":118},[97,26771,26772],{"class":103}," $USER\n",[160,26774,26776,26663],{"id":26775},"_225退出并重新登录",[469,26777,26778],{},"2.2.5.退出并重新登录",[24,26780,26781],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[87,26783,26785],{"className":24011,"code":26784,"language":24013,"meta":92,"style":92},"newgrp docker\n",[94,26786,26787],{"__ignoreMap":92},[97,26788,26789,26792],{"class":99,"line":100},[97,26790,26791],{"class":111},"newgrp",[97,26793,26682],{"class":118},[160,26795,26797,26663],{"id":26796},"_226重新启动-docker-服务如果需要",[469,26798,26799],{},"2.2.6.重新启动 Docker 服务（如果需要）",[24,26801,26802],{},"确保 Docker 服务正在运行，可以使用以下命令：",[87,26804,26805],{"className":24011,"code":26694,"language":24013,"meta":92,"style":92},[94,26806,26807],{"__ignoreMap":92},[97,26808,26809,26811,26813,26815],{"class":99,"line":100},[97,26810,24766],{"class":111},[97,26812,26703],{"class":118},[97,26814,4375],{"class":118},[97,26816,26682],{"class":118},[160,26818,26820,26663],{"id":26819},"_227重启电脑后检查-docker-服务状态",[469,26821,26822],{},"2.2.7.重启电脑后检查 Docker 服务状态",[24,26824,26825],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[87,26827,26829],{"className":24011,"code":26828,"language":24013,"meta":92,"style":92},"sudo reboot\nsystemctl status docker\n",[94,26830,26831,26838],{"__ignoreMap":92},[97,26832,26833,26835],{"class":99,"line":100},[97,26834,24766],{"class":111},[97,26836,26837],{"class":118}," reboot\n",[97,26839,26840,26842,26844],{"class":99,"line":195},[97,26841,26676],{"class":111},[97,26843,26679],{"class":118},[97,26845,26682],{"class":118},[24,26847,26848],{},[19,26849],{"alt":92,"src":26850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[24,26852,26853],{},"第三行显示enabled说明开机自启动成功",[24,26855,26856],{},"按q退出",[48,26858,26860],{"id":26859},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[24,26862,26863],{},"优先使用linux来使用docker是比较好的",[24,26865,26866],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[24,26868,26869],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[24,26871,26872,26873],{},"官方下载安装:",[558,26874,26875],{"href":26875,"rel":26876},"https:\u002F\u002Fwww.docker.com\u002F",[24054],[24,26878,26879],{},"Windows的Docker显卡直通与USB直通:",[24,26881,26882],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[24,26884,26885],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[24,26887,26888],{},[19,26889],{"alt":92,"src":26890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[24,26892,26893],{},[19,26894],{"alt":92,"src":26895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[24,26897,26898],{},[19,26899],{"alt":92,"src":26900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[231,26902,26903],{},"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":92,"searchDepth":195,"depth":195,"links":26905},[26906,26907,26908],{"id":26183,"depth":241,"text":26184},{"id":26655,"depth":241,"text":26656},{"id":26859,"depth":241,"text":26860},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26175,"description":92},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26915,"title":26916,"body":26917,"description":26924,"extension":247,"meta":27617,"navigation":249,"path":27618,"seo":27619,"stem":27620,"__hash__":27621},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26918,"toc":27611},[26919,26922,26925,26929,26934,26939,26942,26970,26975,26984,26987,26992,26996,27003,27008,27014,27018,27021,27025,27030,27122,27127,27145,27150,27171,27176,27192,27196,27201,27230,27235,27281,27286,27330,27338,27355,27360,27376,27381,27395,27398,27401,27404,27407,27436,27439,27444,27448,27451,27454,27460,27463,27466,27469,27531,27538,27543,27546,27564,27568,27571,27588,27591,27594,27608],[10,26920,26916],{"id":26921},"_3docker直通",[24,26923,26924],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[48,26926,26928],{"id":26927},"_31usb直通","3.1.USB直通",[24,26930,26931],{},[19,26932],{"alt":92,"src":26933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[138,26935,26936],{},[70,26937,26938],{},"方法一(不是很推荐新手)：",[24,26940,26941],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[87,26943,26945],{"className":24011,"code":26944,"language":24013,"meta":92,"style":92},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[94,26946,26947,26955,26960],{"__ignoreMap":92},[97,26948,26949,26952],{"class":99,"line":100},[97,26950,26951],{"class":111},"ls",[97,26953,26954],{"class":118}," \u002Fdev\n",[97,26956,26957],{"class":99,"line":195},[97,26958,26959],{"class":191},"#例如\n",[97,26961,26962,26965,26967],{"class":99,"line":241},[97,26963,26964],{"class":103},"--device",[97,26966,115],{"class":319},[97,26968,26969],{"class":118},"\u002Fdev\u002Ftty_USB0\n",[138,26971,26972],{"start":195},[70,26973,26974],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[87,26976,26978],{"className":24011,"code":26977,"language":24013,"meta":92,"style":92},"--privileged\n",[94,26979,26980],{"__ignoreMap":92},[97,26981,26982],{"class":99,"line":100},[97,26983,26977],{"class":111},[24,26985,26986],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[24,26988,26989],{},[19,26990],{"alt":92,"src":26991},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[48,26993,26995],{"id":26994},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[24,26997,26998,26999,27002],{},"NVIDIA Container Toolkit使用户 ",[469,27000,27001],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[24,27004,27005],{},[19,27006],{"alt":92,"src":27007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[24,27009,27010],{},[558,27011,27012],{"href":27012,"rel":27013},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24054],[160,27015,27017],{"id":27016},"_321安装","3.2.1.安装",[24,27019,27020],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23099,27022,27024],{"id":27023},"_3211ubuntu","3.2.1.1.Ubuntu",[138,27026,27027],{},[70,27028,27029],{},"配置存储库 并更新",[87,27031,27033],{"className":24011,"code":27032,"language":24013,"meta":92,"style":92},"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",[94,27034,27035,27064,27084,27096,27108,27114],{"__ignoreMap":92},[97,27036,27037,27040,27043,27046,27048,27050,27053,27056,27059,27062],{"class":99,"line":100},[97,27038,27039],{"class":111},"curl",[97,27041,27042],{"class":370}," -fsSL",[97,27044,27045],{"class":118}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[97,27047,25299],{"class":319},[97,27049,26263],{"class":111},[97,27051,27052],{"class":118}," gpg",[97,27054,27055],{"class":370}," --dearmor",[97,27057,27058],{"class":370}," -o",[97,27060,27061],{"class":118}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[97,27063,24868],{"class":370},[97,27065,27066,27069,27071,27074,27077,27080,27082],{"class":99,"line":195},[97,27067,27068],{"class":103},"  && ",[97,27070,27039],{"class":111},[97,27072,27073],{"class":370}," -s",[97,27075,27076],{"class":370}," -L",[97,27078,27079],{"class":118}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[97,27081,25299],{"class":319},[97,27083,24868],{"class":370},[97,27085,27086,27089,27092,27094],{"class":99,"line":241},[97,27087,27088],{"class":111},"    sed",[97,27090,27091],{"class":118}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[97,27093,25299],{"class":319},[97,27095,24868],{"class":370},[97,27097,27098,27101,27103,27106],{"class":99,"line":1387},[97,27099,27100],{"class":111},"    sudo",[97,27102,26406],{"class":118},[97,27104,27105],{"class":118}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[97,27107,24868],{"class":370},[97,27109,27110,27112],{"class":99,"line":1393},[97,27111,27068],{"class":103},[97,27113,26365],{"class":370},[97,27115,27116,27118,27120],{"class":99,"line":1407},[97,27117,27100],{"class":111},[97,27119,26266],{"class":118},[97,27121,26432],{"class":118},[138,27123,27124],{"start":195},[70,27125,27126],{},"安装nvidia-docker2",[87,27128,27130],{"className":24011,"code":27129,"language":24013,"meta":92,"style":92},"sudo apt-get install -y nvidia-docker2\n",[94,27131,27132],{"__ignoreMap":92},[97,27133,27134,27136,27138,27140,27142],{"class":99,"line":100},[97,27135,24766],{"class":111},[97,27137,26266],{"class":118},[97,27139,24023],{"class":118},[97,27141,26590],{"class":370},[97,27143,27144],{"class":118}," nvidia-docker2\n",[138,27146,27147],{"start":241},[70,27148,27149],{},"使用nvidia-ctk命令配置container runtime",[87,27151,27153],{"className":24011,"code":27152,"language":24013,"meta":92,"style":92},"sudo nvidia-ctk runtime configure --runtime=docker\n",[94,27154,27155],{"__ignoreMap":92},[97,27156,27157,27159,27162,27165,27168],{"class":99,"line":100},[97,27158,24766],{"class":111},[97,27160,27161],{"class":118}," nvidia-ctk",[97,27163,27164],{"class":118}," runtime",[97,27166,27167],{"class":118}," configure",[97,27169,27170],{"class":370}," --runtime=docker\n",[138,27172,27173],{"start":1387},[70,27174,27175],{},"重启docker服务:",[87,27177,27179],{"className":24011,"code":27178,"language":24013,"meta":92,"style":92},"sudo systemctl restart docker\n",[94,27180,27181],{"__ignoreMap":92},[97,27182,27183,27185,27187,27190],{"class":99,"line":100},[97,27184,24766],{"class":111},[97,27186,26703],{"class":118},[97,27188,27189],{"class":118}," restart",[97,27191,26682],{"class":118},[23099,27193,27195],{"id":27194},"_3212fedora","3.2.1.2.Fedora",[138,27197,27198],{},[70,27199,27200],{},"配置存储库",[87,27202,27204],{"className":24011,"code":27203,"language":24013,"meta":92,"style":92},"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",[94,27205,27206,27221],{"__ignoreMap":92},[97,27207,27208,27210,27212,27214,27217,27219],{"class":99,"line":100},[97,27209,27039],{"class":111},[97,27211,27073],{"class":370},[97,27213,27076],{"class":370},[97,27215,27216],{"class":118}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[97,27218,25299],{"class":319},[97,27220,24868],{"class":370},[97,27222,27223,27225,27227],{"class":99,"line":195},[97,27224,24766],{"class":111},[97,27226,26406],{"class":118},[97,27228,27229],{"class":118}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[138,27231,27232],{"start":195},[70,27233,27234],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[87,27236,27238],{"className":24011,"code":27237,"language":24013,"meta":92,"style":92},"# 如果是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",[94,27239,27240,27245,27259,27263,27268],{"__ignoreMap":92},[97,27241,27242],{"class":99,"line":100},[97,27243,27244],{"class":191},"# 如果是RHEL或者Rocky（DNF4）\n",[97,27246,27247,27249,27251,27253,27256],{"class":99,"line":195},[97,27248,24766],{"class":111},[97,27250,26505],{"class":118},[97,27252,26604],{"class":118},[97,27254,27255],{"class":370}," --add-repo",[97,27257,27258],{"class":118}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[97,27260,27261],{"class":99,"line":241},[97,27262,2591],{"emptyLinePlaceholder":249},[97,27264,27265],{"class":99,"line":1387},[97,27266,27267],{"class":191},"# 如果是Feodra41+（DNF5）\n",[97,27269,27270,27272,27274,27276,27278],{"class":99,"line":1393},[97,27271,24766],{"class":111},[97,27273,26505],{"class":118},[97,27275,26604],{"class":118},[97,27277,26607],{"class":118},[97,27279,27280],{"class":370}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[138,27282,27283],{"start":241},[70,27284,27285],{},"安装NVIDIA Container Toolki包",[87,27287,27289],{"className":24011,"code":27288,"language":24013,"meta":92,"style":92},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[94,27290,27291,27296,27309,27313,27318],{"__ignoreMap":92},[97,27292,27293],{"class":99,"line":100},[97,27294,27295],{"class":191},"# 如果是RHEL或者Rocky\n",[97,27297,27298,27300,27302,27304,27306],{"class":99,"line":195},[97,27299,24766],{"class":111},[97,27301,26505],{"class":118},[97,27303,24023],{"class":118},[97,27305,26590],{"class":370},[97,27307,27308],{"class":118}," nvidia-container-toolkit\n",[97,27310,27311],{"class":99,"line":241},[97,27312,2591],{"emptyLinePlaceholder":249},[97,27314,27315],{"class":99,"line":1387},[97,27316,27317],{"class":191},"# 如果是Fedora\n",[97,27319,27320,27322,27324,27326,27328],{"class":99,"line":1393},[97,27321,24766],{"class":111},[97,27323,26505],{"class":118},[97,27325,24023],{"class":118},[97,27327,26590],{"class":370},[97,27329,27308],{"class":118},[138,27331,27332],{"start":1387},[70,27333,27334,27335,27337],{},"安装nvidia-docker2 ： 在Fedora上使用",[94,27336,26480],{},"进行安装",[87,27339,27341],{"className":24011,"code":27340,"language":24013,"meta":92,"style":92},"sudo dnf install -y nvidia-docker2\n",[94,27342,27343],{"__ignoreMap":92},[97,27344,27345,27347,27349,27351,27353],{"class":99,"line":100},[97,27346,24766],{"class":111},[97,27348,26505],{"class":118},[97,27350,24023],{"class":118},[97,27352,26590],{"class":370},[97,27354,27144],{"class":118},[138,27356,27357],{"start":1393},[70,27358,27359],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[87,27361,27362],{"className":24011,"code":27152,"language":24013,"meta":92,"style":92},[94,27363,27364],{"__ignoreMap":92},[97,27365,27366,27368,27370,27372,27374],{"class":99,"line":100},[97,27367,24766],{"class":111},[97,27369,27161],{"class":118},[97,27371,27164],{"class":118},[97,27373,27167],{"class":118},[97,27375,27170],{"class":370},[138,27377,27378],{"start":1407},[70,27379,27380],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[87,27382,27383],{"className":24011,"code":27178,"language":24013,"meta":92,"style":92},[94,27384,27385],{"__ignoreMap":92},[97,27386,27387,27389,27391,27393],{"class":99,"line":100},[97,27388,24766],{"class":111},[97,27390,26703],{"class":118},[97,27392,27189],{"class":118},[97,27394,26682],{"class":118},[24,27396,27397],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[24,27399,27400],{},"方法：",[24,27402,27403],{},"1️⃣nvidia-smi",[24,27405,27406],{},"2️⃣运行nvidia cuda 容器进行测试",[87,27408,27410],{"className":24011,"code":27409,"language":24013,"meta":92,"style":92},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[94,27411,27412],{"__ignoreMap":92},[97,27413,27414,27416,27418,27421,27424,27427,27430,27433],{"class":99,"line":100},[97,27415,24766],{"class":111},[97,27417,26510],{"class":118},[97,27419,27420],{"class":118}," run",[97,27422,27423],{"class":370}," --rm",[97,27425,27426],{"class":370}," --gpus",[97,27428,27429],{"class":118}," all",[97,27431,27432],{"class":118}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[97,27434,27435],{"class":118}," nvidia-smi\n",[24,27437,27438],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[24,27440,27441],{},[19,27442],{"alt":92,"src":27443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[48,27445,27447],{"id":27446},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[24,27449,27450],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[24,27452,27453],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[24,27455,27456],{},[558,27457,27458],{"href":27458,"rel":27459},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24054],[24,27461,27462],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[24,27464,27465],{},"我们只需要找到对应的Docker镜像当底包即可。",[24,27467,27468],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[457,27470,27471,27487],{},[460,27472,27473],{},[463,27474,27475,27478,27481,27484],{},[466,27476,27477],{"align":23925},"镜像类型",[466,27479,27480],{"align":23925},"适用场景",[466,27482,27483],{"align":23925},"示例标签",[466,27485,27486],{"align":23925},"大小",[504,27488,27489,27503,27517],{},[463,27490,27491,27494,27497,27500],{},[509,27492,27493],{"align":23925},"base",[509,27495,27496],{"align":23925},"仅需 CUDA 运行时库",[509,27498,27499],{"align":23925},"12.4.0-base-ubuntu22.04",[509,27501,27502],{"align":23925},"~240MB",[463,27504,27505,27508,27511,27514],{},[509,27506,27507],{"align":23925},"runtime",[509,27509,27510],{"align":23925},"部署编译后的应用（含数学库）",[509,27512,27513],{"align":23925},"12.4.0-runtime-ubuntu22.04",[509,27515,27516],{"align":23925},"~2GB",[463,27518,27519,27522,27525,27528],{},[509,27520,27521],{"align":23925},"devel",[509,27523,27524],{"align":23925},"开发环境（含编译工具）",[509,27526,27527],{"align":23925},"12.4.0-devel-ubuntu22.04",[509,27529,27530],{"align":23925},"~3GB",[24,27532,27533,27534,27537],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[94,27535,27536],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[24,27539,27540],{},[19,27541],{"alt":92,"src":27542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[24,27544,27545],{},"在dockerfile里就可以开头这么写：",[87,27547,27549],{"className":24011,"code":27548,"language":24013,"meta":92,"style":92},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[94,27550,27551,27556],{"__ignoreMap":92},[97,27552,27553],{"class":99,"line":100},[97,27554,27555],{"class":191},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[97,27557,27558,27561],{"class":99,"line":195},[97,27559,27560],{"class":111},"FROM",[97,27562,27563],{"class":118}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[48,27565,27567],{"id":27566},"_34配置以太网","3.4.配置以太网",[24,27569,27570],{},"指定网络模式",[87,27572,27574],{"className":24011,"code":27573,"language":24013,"meta":92,"style":92},"--net=host \\\n",[94,27575,27576],{"__ignoreMap":92},[97,27577,27578,27581,27583,27586],{"class":99,"line":100},[97,27579,27580],{"class":103},"--net",[97,27582,115],{"class":319},[97,27584,27585],{"class":118},"host",[97,27587,24868],{"class":111},[24,27589,27590],{},"启动参数里加上这行即可。具体在下方",[24,27592,27593],{},"--net选项：指定网络模式，该选项有以下参数可选：",[67,27595,27596,27599,27602,27605],{},[70,27597,27598],{},"--net=bridge:默认选项，表示连接到默认的网桥",[70,27600,27601],{},"--net=host:容器使用宿主机的网络",[70,27603,27604],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[70,27606,27607],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[231,27609,27610],{},"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":92,"searchDepth":195,"depth":195,"links":27612},[27613,27614,27615,27616],{"id":26927,"depth":241,"text":26928},{"id":26994,"depth":241,"text":26995},{"id":27446,"depth":241,"text":27447},{"id":27566,"depth":241,"text":27567},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26916,"description":26924},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27623,"title":27624,"body":27625,"description":27632,"extension":247,"meta":27638,"navigation":249,"path":27639,"seo":27640,"stem":27641,"__hash__":27642},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27626,"toc":27636},[27627,27630,27633],[10,27628,27624],{"id":27629},"_4dockerhub换源",[24,27631,27632],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[24,27634,27635],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":92,"searchDepth":195,"depth":195,"links":27637},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27624,"description":27632},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27644,"title":27645,"body":27646,"description":92,"extension":247,"meta":28658,"navigation":249,"path":28659,"seo":28660,"stem":28661,"__hash__":28662},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27647,"toc":28653},[27648,27651,27655,27661,27665,27668,28008,28011,28014,28017,28022,28027,28030,28033,28036,28039,28058,28061,28072,28078,28260,28270,28286,28549,28551,28576,28591,28600,28650],[10,27649,27645],{"id":27650},"_5docker命令学习",[48,27652,27654],{"id":27653},"_51参考文档","5.1.参考文档",[24,27656,27657],{},[558,27658,27659],{"href":27659,"rel":27660},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24054],[48,27662,27664],{"id":27663},"_52常用命令","5.2.常用命令",[24,27666,27667],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[457,27669,27670,27683],{},[460,27671,27672],{},[463,27673,27674,27677,27680],{},[466,27675,27676],{"align":23925},"命令",[466,27678,27679],{"align":23925},"描述",[466,27681,27682],{"align":23925},"示例",[504,27684,27685,27696,27707,27718,27729,27740,27751,27762,27772,27783,27794,27805,27815,27826,27837,27848,27858,27868,27878,27888,27899,27910,27921,27932,27943,27954,27964,27975,27986,27997],{},[463,27686,27687,27690,27693],{},[509,27688,27689],{"align":23925},"docker run",[509,27691,27692],{"align":23925},"创建并启动一个新的容器。",[509,27694,27695],{"align":23925},"docker run -it ubuntu bash",[463,27697,27698,27701,27704],{},[509,27699,27700],{"align":23925},"docker build",[509,27702,27703],{"align":23925},"通过指定的 Dockerfile 创建一个新的镜像。",[509,27705,27706],{"align":23925},"docker build -t myimage .",[463,27708,27709,27712,27715],{},[509,27710,27711],{"align":23925},"docker pull",[509,27713,27714],{"align":23925},"从 Docker 仓库拉取镜像。",[509,27716,27717],{"align":23925},"docker pull ubuntu",[463,27719,27720,27723,27726],{},[509,27721,27722],{"align":23925},"docker push",[509,27724,27725],{"align":23925},"将本地镜像推送到 Docker 仓库。",[509,27727,27728],{"align":23925},"docker push myimage",[463,27730,27731,27734,27737],{},[509,27732,27733],{"align":23925},"docker stop",[509,27735,27736],{"align":23925},"停止一个正在运行的容器。",[509,27738,27739],{"align":23925},"docker stop container_id",[463,27741,27742,27745,27748],{},[509,27743,27744],{"align":23925},"docker start",[509,27746,27747],{"align":23925},"启动一个已经存在的容器。",[509,27749,27750],{"align":23925},"docker start container_id",[463,27752,27753,27756,27759],{},[509,27754,27755],{"align":23925},"docker restart",[509,27757,27758],{"align":23925},"重新启动容器。",[509,27760,27761],{"align":23925},"docker restart container_id",[463,27763,27764,27767,27770],{},[509,27765,27766],{"align":23925},"docker ps",[509,27768,27769],{"align":23925},"列出当前正在运行的容器。",[509,27771,27766],{"align":23925},[463,27773,27774,27777,27780],{},[509,27775,27776],{"align":23925},"docker rm",[509,27778,27779],{"align":23925},"删除一个或多个停止的容器。",[509,27781,27782],{"align":23925},"docker rm container_id",[463,27784,27785,27788,27791],{},[509,27786,27787],{"align":23925},"docker exec",[509,27789,27790],{"align":23925},"在一个正在运行的容器中执行命令。",[509,27792,27793],{"align":23925},"docker exec -it container_id bash",[463,27795,27796,27799,27802],{},[509,27797,27798],{"align":23925},"docker logs",[509,27800,27801],{"align":23925},"查看容器的日志输出。",[509,27803,27804],{"align":23925},"docker logs container_id",[463,27806,27807,27810,27813],{},[509,27808,27809],{"align":23925},"docker images",[509,27811,27812],{"align":23925},"列出本地所有镜像。",[509,27814,27809],{"align":23925},[463,27816,27817,27820,27823],{},[509,27818,27819],{"align":23925},"docker rmi",[509,27821,27822],{"align":23925},"删除一个或多个镜像。",[509,27824,27825],{"align":23925},"docker rmi myimage",[463,27827,27828,27831,27834],{},[509,27829,27830],{"align":23925},"docker network",[509,27832,27833],{"align":23925},"管理 Docker 网络。",[509,27835,27836],{"align":23925},"docker network ls",[463,27838,27839,27842,27845],{},[509,27840,27841],{"align":23925},"docker volume",[509,27843,27844],{"align":23925},"管理 Docker 数据卷。",[509,27846,27847],{"align":23925},"docker volume ls",[463,27849,27850,27853,27856],{},[509,27851,27852],{"align":23925},"docker-compose up",[509,27854,27855],{"align":23925},"启动 docker-compose.yml 中定义的所有服务。",[509,27857,27852],{"align":23925},[463,27859,27860,27863,27866],{},[509,27861,27862],{"align":23925},"docker-compose down",[509,27864,27865],{"align":23925},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[509,27867,27862],{"align":23925},[463,27869,27870,27873,27876],{},[509,27871,27872],{"align":23925},"docker info",[509,27874,27875],{"align":23925},"显示 Docker 系统的详细信息。",[509,27877,27872],{"align":23925},[463,27879,27880,27883,27886],{},[509,27881,27882],{"align":23925},"docker stats",[509,27884,27885],{"align":23925},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[509,27887,27882],{"align":23925},[463,27889,27890,27893,27896],{},[509,27891,27892],{"align":23925},"docker inspect",[509,27894,27895],{"align":23925},"查看容器或镜像的详细信息（JSON 格式）。",[509,27897,27898],{"align":23925},"docker inspect container_id",[463,27900,27901,27904,27907],{},[509,27902,27903],{"align":23925},"docker save",[509,27905,27906],{"align":23925},"将一个镜像保存为 tar 文件。",[509,27908,27909],{"align":23925},"docker save -o myimage.tar myimage",[463,27911,27912,27915,27918],{},[509,27913,27914],{"align":23925},"docker load",[509,27916,27917],{"align":23925},"从 tar 文件中加载镜像。",[509,27919,27920],{"align":23925},"docker load -i myimage.tar",[463,27922,27923,27926,27929],{},[509,27924,27925],{"align":23925},"docker tag",[509,27927,27928],{"align":23925},"为镜像添加标签（tag）。",[509,27930,27931],{"align":23925},"docker tag myimage myimage:v1",[463,27933,27934,27937,27940],{},[509,27935,27936],{"align":23925},"docker buildx build",[509,27938,27939],{"align":23925},"使用 Buildx 构建多架构镜像。",[509,27941,27942],{"align":23925},"docker buildx build -t myimage .",[463,27944,27945,27948,27951],{},[509,27946,27947],{"align":23925},"docker buildx create",[509,27949,27950],{"align":23925},"创建一个新的 Buildx 构建实例。",[509,27952,27953],{"align":23925},"docker buildx create –use",[463,27955,27956,27959,27962],{},[509,27957,27958],{"align":23925},"docker buildx ls",[509,27960,27961],{"align":23925},"列出所有可用的 Buildx 构建实例。",[509,27963,27958],{"align":23925},[463,27965,27966,27969,27972],{},[509,27967,27968],{"align":23925},"docker buildx use",[509,27970,27971],{"align":23925},"设置当前的 Buildx 构建实例。",[509,27973,27974],{"align":23925},"docker buildx use mybuilder",[463,27976,27977,27980,27983],{},[509,27978,27979],{"align":23925},"docker buildx bake",[509,27981,27982],{"align":23925},"使用 Bake 文件批量构建镜像。",[509,27984,27985],{"align":23925},"docker buildx bake -f bake.hcl",[463,27987,27988,27991,27994],{},[509,27989,27990],{"align":23925},"docker buildx build –push",[509,27992,27993],{"align":23925},"构建镜像并推送到镜像仓库。",[509,27995,27996],{"align":23925},"docker buildx build –push -t myimage .",[463,27998,27999,28002,28005],{},[509,28000,28001],{"align":23925},"docker buildx build –platform",[509,28003,28004],{"align":23925},"构建镜像并为多个平台生成支持。",[509,28006,28007],{"align":23925},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[24,28009,28010],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[24,28012,28013],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[24,28015,28016],{},"docker images 可以查看已经下载的镜像",[24,28018,28019],{},[19,28020],{"alt":92,"src":28021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[24,28023,28024],{},[469,28025,28026],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[24,28028,28029],{},"docker rmi $(docker images -q) 删除所有的镜像",[24,28031,28032],{},"docker container logs 查看容器日志",[24,28034,28035],{},"docker top 查看容器里的进程",[24,28037,28038],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[87,28040,28042],{"className":24011,"code":28041,"language":24013,"meta":92,"style":92},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[94,28043,28044],{"__ignoreMap":92},[97,28045,28046,28049,28052,28055],{"class":99,"line":100},[97,28047,28048],{"class":111},"如：docker",[97,28050,28051],{"class":118}," cp",[97,28053,28054],{"class":118}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[97,28056,28057],{"class":118}," \u002Fmydata\u002Fnginx\n",[24,28059,28060],{},"docker run时在启动容器的时候会有几个常用的选项：",[67,28062,28063,28066,28069],{},[70,28064,28065],{},"-d选项：表示后台运行",[70,28067,28068],{},"-P选项：随机端口映射",[70,28070,28071],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[48,28073,28075],{"id":28074},"_53run命令的参数非常重要",[469,28076,28077],{},"5.3.run命令的参数（非常重要）",[457,28079,28080,28093],{},[460,28081,28082],{},[463,28083,28084,28087,28090],{},[466,28085,28086],{"align":23925},"参数\u002F配置",[466,28088,28089],{"align":23925},"功能说明",[466,28091,28092],{"align":23925},"重要性与参考依据",[504,28094,28095,28106,28117,28128,28139,28150,28161,28172,28183,28194,28205,28216,28227,28238,28249],{},[463,28096,28097,28100,28103],{},[509,28098,28099],{"align":23925},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[509,28101,28102],{"align":23925},"指定容器名称，便于后续管理",[509,28104,28105],{"align":23925},"替代随机生成的容器名。",[463,28107,28108,28111,28114],{},[509,28109,28110],{"align":23925},"–gpus all",[509,28112,28113],{"align":23925},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[509,28115,28116],{"align":23925},"用于CUDA加速等GPU依赖任务。",[463,28118,28119,28122,28125],{},[509,28120,28121],{"align":23925},"-e NVIDIA_DRIVER_CAPABILITIES=all",[509,28123,28124],{"align":23925},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[509,28126,28127],{"align":23925},"确保容器内GPU功能完整67。",[463,28129,28130,28133,28136],{},[509,28131,28132],{"align":23925},"-dit",[509,28134,28135],{"align":23925},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[509,28137,28138],{"align":23925},"允许容器在后台运行并支持交互操作。",[463,28140,28141,28144,28147],{},[509,28142,28143],{"align":23925},"–privileged",[509,28145,28146],{"align":23925},"赋予容器完全主机权限（可访问设备、内核模块等）",[509,28148,28149],{"align":23925},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[463,28151,28152,28155,28158],{},[509,28153,28154],{"align":23925},"–net=host",[509,28156,28157],{"align":23925},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[509,28159,28160],{"align":23925},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[463,28162,28163,28166,28169],{},[509,28164,28165],{"align":23925},"–group-add audio–group-add video–group-add dialout",[509,28167,28168],{"align":23925},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[509,28170,28171],{"align":23925},"避免权限问题（如避免无法调用摄像头、麦克风）。",[463,28173,28174,28177,28180],{},[509,28175,28176],{"align":23925},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[509,28178,28179],{"align":23925},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[509,28181,28182],{"align":23925},"支持容器内运行图形界面应用（如OpenCV可视化）。",[463,28184,28185,28188,28191],{},[509,28186,28187],{"align":23925},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[509,28189,28190],{"align":23925},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[509,28192,28193],{"align":23925},"实现容器内图形显示。",[463,28195,28196,28199,28202],{},[509,28197,28198],{"align":23925},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[509,28200,28201],{"align":23925},"挂载X11认证文件（只读）",[509,28203,28204],{"align":23925},"确保容器有权连接宿主机显示服务。",[463,28206,28207,28210,28213],{},[509,28208,28209],{"align":23925},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[509,28211,28212],{"align":23925},"挂载Wayland显示协议相关目录",[509,28214,28215],{"align":23925},"支持Wayland协议的图形显示。",[463,28217,28218,28221,28224],{},[509,28219,28220],{"align":23925},"–ulimit nofile=1024:524288",[509,28222,28223],{"align":23925},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[509,28225,28226],{"align":23925},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[463,28228,28229,28232,28235],{},[509,28230,28231],{"align":23925},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[509,28233,28234],{"align":23925},"挂载宿主机用户目录到容器内同名路径",[509,28236,28237],{"align":23925},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[463,28239,28240,28243,28246],{},[509,28241,28242],{"align":23925},"-w \u002Fhome\u002Ftungchiahui",[509,28244,28245],{"align":23925},"设置容器启动后的默认工作目录",[509,28247,28248],{"align":23925},"直接进入项目路径，方便执行命令2324。",[463,28250,28251,28254,28257],{},[509,28252,28253],{"align":23925},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[509,28255,28256],{"align":23925},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[509,28258,28259],{"align":23925},"提供预配置的深度学习与机器人开发环境。",[24,28261,28262,28263,28265,28266,28269],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[94,28264,24766],{},"加不加",[94,28267,28268],{},"sudo -E","都无所谓。",[24,28271,28272,28273,28275,28276,28278,28279,28282,28283,28285],{},"用户已经被加到docker组了，不用",[94,28274,24766],{},"也行跑，其次，",[94,28277,24766],{},"运行的话，你的",[94,28280,28281],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[94,28284,28281],{},"更不可能变了。",[87,28287,28289],{"className":24011,"code":28288,"language":24013,"meta":92,"style":92},"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",[94,28290,28291,28304,28314,28324,28336,28343,28350,28357,28367,28376,28385,28399,28411,28423,28432,28442,28451,28466,28499,28526,28537,28544],{"__ignoreMap":92},[97,28292,28293,28295,28297,28299,28302],{"class":99,"line":100},[97,28294,24766],{"class":111},[97,28296,26510],{"class":118},[97,28298,27420],{"class":118},[97,28300,28301],{"class":370}," --name=ros_opencv_cuda",[97,28303,24868],{"class":370},[97,28305,28306,28309,28312],{"class":99,"line":195},[97,28307,28308],{"class":103},"--gpus ",[97,28310,28311],{"class":118},"all",[97,28313,24868],{"class":370},[97,28315,28316,28319,28322],{"class":99,"line":241},[97,28317,28318],{"class":103},"-e ",[97,28320,28321],{"class":118},"NVIDIA_DRIVER_CAPABILITIES=all",[97,28323,24868],{"class":370},[97,28325,28326,28328,28331,28334],{"class":99,"line":1387},[97,28327,28318],{"class":103},[97,28329,28330],{"class":118},"DISPLAY=",[97,28332,28333],{"class":103},"$DISPLAY ",[97,28335,26365],{"class":370},[97,28337,28338,28341],{"class":99,"line":1393},[97,28339,28340],{"class":103},"-dit ",[97,28342,26365],{"class":370},[97,28344,28345,28348],{"class":99,"line":1407},[97,28346,28347],{"class":103},"--privileged ",[97,28349,26365],{"class":370},[97,28351,28352,28355],{"class":99,"line":1413},[97,28353,28354],{"class":103},"--net=host ",[97,28356,26365],{"class":370},[97,28358,28359,28362,28365],{"class":99,"line":1504},[97,28360,28361],{"class":103},"--group-add ",[97,28363,28364],{"class":118},"audio",[97,28366,24868],{"class":370},[97,28368,28369,28371,28374],{"class":99,"line":1510},[97,28370,28361],{"class":103},[97,28372,28373],{"class":118},"video",[97,28375,24868],{"class":370},[97,28377,28378,28380,28383],{"class":99,"line":1522},[97,28379,28361],{"class":103},[97,28381,28382],{"class":118},"dialout",[97,28384,24868],{"class":370},[97,28386,28387,28389,28392,28394,28397],{"class":99,"line":1804},[97,28388,28318],{"class":103},[97,28390,28391],{"class":118},"XAUTHORITY=",[97,28393,28281],{"class":103},[97,28395,28396],{"class":118},"\u002F.Xauthority",[97,28398,24868],{"class":370},[97,28400,28401,28403,28406,28409],{"class":99,"line":1809},[97,28402,28318],{"class":103},[97,28404,28405],{"class":118},"WAYLAND_DISPLAY=",[97,28407,28408],{"class":103},"$WAYLAND_DISPLAY ",[97,28410,26365],{"class":370},[97,28412,28413,28415,28418,28421],{"class":99,"line":1815},[97,28414,28318],{"class":103},[97,28416,28417],{"class":118},"XDG_RUNTIME_DIR=",[97,28419,28420],{"class":103},"$XDG_RUNTIME_DIR ",[97,28422,26365],{"class":370},[97,28424,28425,28427,28430],{"class":99,"line":1820},[97,28426,28318],{"class":103},[97,28428,28429],{"class":118},"QT_QPA_PLATFORM=xcb",[97,28431,24868],{"class":370},[97,28433,28434,28437,28440],{"class":99,"line":1834},[97,28435,28436],{"class":103},"-v ",[97,28438,28439],{"class":118},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[97,28441,24868],{"class":370},[97,28443,28444,28446,28449],{"class":99,"line":1839},[97,28445,28436],{"class":103},[97,28447,28448],{"class":118},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[97,28450,24868],{"class":370},[97,28452,28453,28456,28459,28461,28464],{"class":99,"line":1845},[97,28454,28455],{"class":103},"-v $HOME",[97,28457,28458],{"class":118},"\u002F.Xauthority:",[97,28460,28281],{"class":103},[97,28462,28463],{"class":118},"\u002F.Xauthority:ro",[97,28465,24868],{"class":370},[97,28467,28468,28470,28473,28475,28478,28481,28483,28486,28488,28490,28492,28494,28497],{"class":99,"line":1866},[97,28469,28436],{"class":103},[97,28471,28472],{"class":118},"\u002Frun\u002Fuser\u002F",[97,28474,25289],{"class":103},[97,28476,28477],{"class":111},"id",[97,28479,28480],{"class":370}," -u",[97,28482,749],{"class":103},[97,28484,28485],{"class":118},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[97,28487,25289],{"class":103},[97,28489,28477],{"class":111},[97,28491,28480],{"class":370},[97,28493,749],{"class":103},[97,28495,28496],{"class":118},"\u002Fwayland-0",[97,28498,24868],{"class":370},[97,28500,28501,28503,28505,28507,28509,28511,28513,28516,28518,28520,28522,28524],{"class":99,"line":1871},[97,28502,28436],{"class":103},[97,28504,28472],{"class":118},[97,28506,25289],{"class":103},[97,28508,28477],{"class":111},[97,28510,28480],{"class":370},[97,28512,749],{"class":103},[97,28514,28515],{"class":118},":\u002Frun\u002Fuser\u002F",[97,28517,25289],{"class":103},[97,28519,28477],{"class":111},[97,28521,28480],{"class":370},[97,28523,13905],{"class":103},[97,28525,26365],{"class":370},[97,28527,28528,28530,28532,28535],{"class":99,"line":1885},[97,28529,28455],{"class":103},[97,28531,1179],{"class":118},[97,28533,28534],{"class":103},"$HOME ",[97,28536,26365],{"class":370},[97,28538,28539,28542],{"class":99,"line":1890},[97,28540,28541],{"class":103},"-w $HOME ",[97,28543,26365],{"class":370},[97,28545,28546],{"class":99,"line":1919},[97,28547,28548],{"class":103},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[24,28550,9216],{},[138,28552,28553,28561,28564,28567],{},[70,28554,28555,13986,28557,28560],{},[94,28556,28321],{},[94,28558,28559],{},"--gpus all","没有英伟达显卡请注释。",[70,28562,28563],{},"--name后面请自己为容器起名。",[70,28565,28566],{},"最后一行仓库名称请你自己找对应的镜像填上。",[70,28568,28569,28570,28575],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23742,28571,28572],{},[469,28573,28574],{},"请不要加","。",[87,28577,28579],{"className":24011,"code":28578,"language":24013,"meta":92,"style":92},"--ulimit nofile=1024:524288 \\\n",[94,28580,28581],{"__ignoreMap":92},[97,28582,28583,28586,28589],{"class":99,"line":100},[97,28584,28585],{"class":111},"--ulimit",[97,28587,28588],{"class":118}," nofile=1024:524288",[97,28590,24868],{"class":370},[24,28592,28593,28594,28599],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23742,28595,28596],{},[469,28597,28598],{},"不建议","**.**",[87,28601,28603],{"className":24011,"code":28602,"language":24013,"meta":92,"style":92},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[94,28604,28605,28632,28641],{"__ignoreMap":92},[97,28606,28607,28610,28613,28615,28617,28619,28621,28623,28625,28628,28630],{"class":99,"line":100},[97,28608,28609],{"class":111},"--user",[97,28611,28612],{"class":103}," $(",[97,28614,28477],{"class":111},[97,28616,28480],{"class":370},[97,28618,749],{"class":103},[97,28620,1179],{"class":118},[97,28622,25289],{"class":103},[97,28624,28477],{"class":111},[97,28626,28627],{"class":370}," -g",[97,28629,13905],{"class":103},[97,28631,26365],{"class":370},[97,28633,28634,28636,28639],{"class":99,"line":195},[97,28635,28436],{"class":103},[97,28637,28638],{"class":118},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[97,28640,24868],{"class":370},[97,28642,28643,28645,28648],{"class":99,"line":241},[97,28644,28436],{"class":103},[97,28646,28647],{"class":118},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[97,28649,24868],{"class":370},[231,28651,28652],{},"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":92,"searchDepth":195,"depth":195,"links":28654},[28655,28656,28657],{"id":27653,"depth":241,"text":27654},{"id":27663,"depth":241,"text":27664},{"id":28074,"depth":241,"text":28077},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27645,"description":92},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28664,"title":28665,"body":28666,"description":92,"extension":247,"meta":30289,"navigation":249,"path":30290,"seo":30291,"stem":30292,"__hash__":30293},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28667,"toc":30284},[28668,28671,28675,28678,28900,28904,28908,28911,29017,29022,29025,29030,29033,29038,29041,29046,29049,29061,29064,29069,29076,29104,29111,29187,29192,29195,29218,29220,29295,29300,29303,29307,29315,29320,29325,29329,29340,29346,29349,29352,29376,29379,29382,29410,29413,29416,29881,29884,29889,29894,29898,29921,29926,29930,29934,29937,29940,29943,29970,29973,29976,29994,29997,30000,30022,30030,30035,30040,30044,30047,30050,30053,30056,30101,30104,30122,30125,30130,30133,30154,30157,30213,30216,30221,30225,30228,30235,30238,30241,30246,30249,30265,30268,30281],[10,28669,28665],{"id":28670},"_6手动创建docker镜像",[48,28672,28674],{"id":28673},"_61dockerfile","6.1.DockerFile",[24,28676,28677],{},"常用命令：",[457,28679,28680,28691],{},[460,28681,28682],{},[463,28683,28684,28687,28689],{},[466,28685,28686],{"align":23925},"指令",[466,28688,26059],{"align":23925},[466,28690,27682],{"align":23925},[504,28692,28693,28703,28719,28730,28741,28752,28763,28774,28785,28799,28813,28824,28838,28849,28860,28874,28889],{},[463,28694,28695,28697,28700],{},[509,28696,27560],{"align":23925},[509,28698,28699],{"align":23925},"指定基础镜像，是 Dockerfile 的起点",[509,28701,28702],{"align":23925},"FROM ubuntu:22.04",[463,28704,28705,28708,28711],{},[509,28706,28707],{"align":23925},"LABEL",[509,28709,28710],{"align":23925},"添加元数据（如作者、版本等）",[509,28712,28713,28714,28718],{"align":23925},"LABEL maintainer=”",[558,28715,28717],{"href":28716},"mailto:you@example.com","you@example.com","”",[463,28720,28721,28724,28727],{},[509,28722,28723],{"align":23925},"ENV",[509,28725,28726],{"align":23925},"设置环境变量",[509,28728,28729],{"align":23925},"ENV PORT=8080",[463,28731,28732,28735,28738],{},[509,28733,28734],{"align":23925},"ARG",[509,28736,28737],{"align":23925},"构建参数，只在构建期间可用",[509,28739,28740],{"align":23925},"ARG VERSION=1.0",[463,28742,28743,28746,28749],{},[509,28744,28745],{"align":23925},"RUN",[509,28747,28748],{"align":23925},"构建镜像时运行命令",[509,28750,28751],{"align":23925},"RUN apt-get update && apt-get install -y curl",[463,28753,28754,28757,28760],{},[509,28755,28756],{"align":23925},"COPY",[509,28758,28759],{"align":23925},"复制文件到镜像中",[509,28761,28762],{"align":23925},"COPY . \u002Fapp",[463,28764,28765,28768,28771],{},[509,28766,28767],{"align":23925},"ADD",[509,28769,28770],{"align":23925},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[509,28772,28773],{"align":23925},"ADD archive.tar.gz \u002Fdata\u002F",[463,28775,28776,28779,28782],{},[509,28777,28778],{"align":23925},"WORKDIR",[509,28780,28781],{"align":23925},"设置工作目录",[509,28783,28784],{"align":23925},"WORKDIR \u002Fopt",[463,28786,28787,28790,28793],{},[509,28788,28789],{"align":23925},"CMD",[509,28791,28792],{"align":23925},"设置容器启动时默认命令（可被 docker run 覆盖）",[509,28794,28795,28796],{"align":23925},"CMD ",[97,28797,28798],{},"“node”, “index.js”",[463,28800,28801,28804,28807],{},[509,28802,28803],{"align":23925},"ENTRYPOINT",[509,28805,28806],{"align":23925},"设置容器启动时固定命令（通常用于 CLI 工具等）",[509,28808,28809,28810],{"align":23925},"ENTRYPOINT ",[97,28811,28812],{},"“python3”",[463,28814,28815,28818,28821],{},[509,28816,28817],{"align":23925},"EXPOSE",[509,28819,28820],{"align":23925},"声明镜像内服务监听的端口（不会自动映射）",[509,28822,28823],{"align":23925},"EXPOSE 80",[463,28825,28826,28829,28832],{},[509,28827,28828],{"align":23925},"VOLUME",[509,28830,28831],{"align":23925},"声明数据卷挂载点",[509,28833,28834,28835],{"align":23925},"VOLUME ",[97,28836,28837],{},"“\u002Fdata”",[463,28839,28840,28843,28846],{},[509,28841,28842],{"align":23925},"USER",[509,28844,28845],{"align":23925},"设置后续命令执行的用户",[509,28847,28848],{"align":23925},"USER appuser",[463,28850,28851,28854,28857],{},[509,28852,28853],{"align":23925},"ONBUILD",[509,28855,28856],{"align":23925},"当镜像作为其他镜像基础镜像时触发的构建指令",[509,28858,28859],{"align":23925},"ONBUILD COPY . \u002Fsrc",[463,28861,28862,28865,28868],{},[509,28863,28864],{"align":23925},"SHELL",[509,28866,28867],{"align":23925},"更改默认 shell，比如将 sh -c 改为 bash -c",[509,28869,28870,28871],{"align":23925},"SHELL ",[97,28872,28873],{},"“\u002Fbin\u002Fbash”, “-c”",[463,28875,28876,28879,28882],{},[509,28877,28878],{"align":23925},"HEALTHCHECK",[509,28880,28881],{"align":23925},"定义容器运行时的健康检查命令",[509,28883,28884,28885],{"align":23925},"`HEALTHCHECK CMD curl –fail ",[558,28886,28887],{"href":28887,"rel":28888},"http:\u002F\u002Flocalhost:8080",[24054],[463,28890,28891,28894,28897],{},[509,28892,28893],{"align":23925},"STOPSIGNAL",[509,28895,28896],{"align":23925},"容器停止时发送的信号",[509,28898,28899],{"align":23925},"STOPSIGNAL SIGKILL",[48,28901,28903],{"id":28902},"_62自己创建容器","6.2.自己创建容器",[160,28905,28907],{"id":28906},"_621手动创建","6.2.1.手动创建",[24,28909,28910],{},"在x86电脑上编译x86的：",[87,28912,28914],{"className":24011,"code":28913,"language":24013,"meta":92,"style":92},"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",[94,28915,28916,28932,28936,28949,28953,28966,28970,28983,28987,29000,29004],{"__ignoreMap":92},[97,28917,28918,28920,28923,28926,28929],{"class":99,"line":100},[97,28919,26743],{"class":111},[97,28921,28922],{"class":118}," build",[97,28924,28925],{"class":370}," -t",[97,28927,28928],{"class":118}," ros-melodic-cuda118-cudnn8-bionic:latest",[97,28930,28931],{"class":118}," .\n",[97,28933,28934],{"class":99,"line":195},[97,28935,2591],{"emptyLinePlaceholder":249},[97,28937,28938,28940,28942,28944,28947],{"class":99,"line":241},[97,28939,26743],{"class":111},[97,28941,28922],{"class":118},[97,28943,28925],{"class":370},[97,28945,28946],{"class":118}," ros-noetic-focal:latest",[97,28948,28931],{"class":118},[97,28950,28951],{"class":99,"line":1387},[97,28952,2591],{"emptyLinePlaceholder":249},[97,28954,28955,28957,28959,28961,28964],{"class":99,"line":1393},[97,28956,26743],{"class":111},[97,28958,28922],{"class":118},[97,28960,28925],{"class":370},[97,28962,28963],{"class":118}," ros-humble-jammy:latest",[97,28965,28931],{"class":118},[97,28967,28968],{"class":99,"line":1407},[97,28969,2591],{"emptyLinePlaceholder":249},[97,28971,28972,28974,28976,28978,28981],{"class":99,"line":1413},[97,28973,26743],{"class":111},[97,28975,28922],{"class":118},[97,28977,28925],{"class":370},[97,28979,28980],{"class":118}," ros-jazzy-noble:latest",[97,28982,28931],{"class":118},[97,28984,28985],{"class":99,"line":1504},[97,28986,2591],{"emptyLinePlaceholder":249},[97,28988,28989,28991,28993,28995,28998],{"class":99,"line":1510},[97,28990,26743],{"class":111},[97,28992,28922],{"class":118},[97,28994,28925],{"class":370},[97,28996,28997],{"class":118}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[97,28999,28931],{"class":118},[97,29001,29002],{"class":99,"line":1522},[97,29003,2591],{"emptyLinePlaceholder":249},[97,29005,29006,29008,29010,29012,29015],{"class":99,"line":1804},[97,29007,26743],{"class":111},[97,29009,28922],{"class":118},[97,29011,28925],{"class":370},[97,29013,29014],{"class":118}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[97,29016,28931],{"class":118},[24,29018,29019],{},[19,29020],{"alt":92,"src":29021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[24,29023,29024],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[24,29026,29027],{},[19,29028],{"alt":92,"src":29029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[24,29031,29032],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[138,29034,29035],{},[70,29036,29037],{},"创建 Docker Hub 账户",[24,29039,29040],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[138,29042,29043],{"start":195},[70,29044,29045],{},"登录 Docker Hub",[24,29047,29048],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[87,29050,29052],{"className":24011,"code":29051,"language":24013,"meta":92,"style":92},"docker login\n",[94,29053,29054],{"__ignoreMap":92},[97,29055,29056,29058],{"class":99,"line":100},[97,29057,26743],{"class":111},[97,29059,29060],{"class":118}," login\n",[24,29062,29063],{},"输入你的 Docker Hub 用户名和密码进行验证。",[138,29065,29066],{},[70,29067,29068],{},"为你的镜像打标签",[24,29070,29071,29072,29075],{},"Docker Hub 使用 ",[94,29073,29074],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[87,29077,29079],{"className":24011,"code":29078,"language":24013,"meta":92,"style":92},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[94,29080,29081],{"__ignoreMap":92},[97,29082,29083,29085,29088,29090,29093,29096,29099,29101],{"class":99,"line":100},[97,29084,26743],{"class":111},[97,29086,29087],{"class":118}," tag",[97,29089,28980],{"class":118},[97,29091,29092],{"class":319}," \u003C",[97,29094,29095],{"class":118},"你的用户",[97,29097,29098],{"class":103},"名",[97,29100,1279],{"class":319},[97,29102,29103],{"class":118},"\u002Fros-jazzy-noble:latest\n",[24,29105,29106,29107,29110],{},"例如，如果你的 Docker Hub 用户名是 ",[94,29108,29109],{},"tungchiahui","，你应该执行：",[87,29112,29114],{"className":24011,"code":29113,"language":24013,"meta":92,"style":92},"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",[94,29115,29116,29127,29131,29142,29146,29157,29161,29172,29176],{"__ignoreMap":92},[97,29117,29118,29120,29122,29124],{"class":99,"line":100},[97,29119,26743],{"class":111},[97,29121,29087],{"class":118},[97,29123,28946],{"class":118},[97,29125,29126],{"class":118}," tungchiahui\u002Fros-noetic-focal:latest\n",[97,29128,29129],{"class":99,"line":195},[97,29130,2591],{"emptyLinePlaceholder":249},[97,29132,29133,29135,29137,29139],{"class":99,"line":241},[97,29134,26743],{"class":111},[97,29136,29087],{"class":118},[97,29138,28963],{"class":118},[97,29140,29141],{"class":118}," tungchiahui\u002Fros-humble-jammy:latest\n",[97,29143,29144],{"class":99,"line":1387},[97,29145,2591],{"emptyLinePlaceholder":249},[97,29147,29148,29150,29152,29154],{"class":99,"line":1393},[97,29149,26743],{"class":111},[97,29151,29087],{"class":118},[97,29153,28980],{"class":118},[97,29155,29156],{"class":118}," tungchiahui\u002Fros-jazzy-noble:latest\n",[97,29158,29159],{"class":99,"line":1407},[97,29160,2591],{"emptyLinePlaceholder":249},[97,29162,29163,29165,29167,29169],{"class":99,"line":1413},[97,29164,26743],{"class":111},[97,29166,29087],{"class":118},[97,29168,28997],{"class":118},[97,29170,29171],{"class":118}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[97,29173,29174],{"class":99,"line":1504},[97,29175,2591],{"emptyLinePlaceholder":249},[97,29177,29178,29180,29182,29184],{"class":99,"line":1510},[97,29179,26743],{"class":111},[97,29181,29087],{"class":118},[97,29183,29014],{"class":118},[97,29185,29186],{"class":118}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[138,29188,29189],{"start":195},[70,29190,29191],{},"推送镜像到 Docker Hub",[24,29193,29194],{},"使用以下命令将镜像推送到 Docker Hub：",[87,29196,29198],{"className":24011,"code":29197,"language":24013,"meta":92,"style":92},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[94,29199,29200],{"__ignoreMap":92},[97,29201,29202,29204,29207,29209,29211,29213,29215],{"class":99,"line":100},[97,29203,26743],{"class":111},[97,29205,29206],{"class":118}," push",[97,29208,29092],{"class":319},[97,29210,29095],{"class":118},[97,29212,29098],{"class":103},[97,29214,1279],{"class":319},[97,29216,29217],{"class":118},"\u002Fros-noetic-jazzy-noble:latest\n",[24,29219,14824],{},[87,29221,29223],{"className":24011,"code":29222,"language":24013,"meta":92,"style":92},"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",[94,29224,29225,29233,29237,29245,29249,29257,29261,29270,29274,29282,29286],{"__ignoreMap":92},[97,29226,29227,29229,29231],{"class":99,"line":100},[97,29228,26743],{"class":111},[97,29230,29206],{"class":118},[97,29232,29126],{"class":118},[97,29234,29235],{"class":99,"line":195},[97,29236,2591],{"emptyLinePlaceholder":249},[97,29238,29239,29241,29243],{"class":99,"line":241},[97,29240,26743],{"class":111},[97,29242,29206],{"class":118},[97,29244,29141],{"class":118},[97,29246,29247],{"class":99,"line":1387},[97,29248,2591],{"emptyLinePlaceholder":249},[97,29250,29251,29253,29255],{"class":99,"line":1393},[97,29252,26743],{"class":111},[97,29254,29206],{"class":118},[97,29256,29156],{"class":118},[97,29258,29259],{"class":99,"line":1407},[97,29260,2591],{"emptyLinePlaceholder":249},[97,29262,29263,29265,29267],{"class":99,"line":1413},[97,29264,26743],{"class":111},[97,29266,29206],{"class":118},[97,29268,29269],{"class":118}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[97,29271,29272],{"class":99,"line":1504},[97,29273,2591],{"emptyLinePlaceholder":249},[97,29275,29276,29278,29280],{"class":99,"line":1510},[97,29277,26743],{"class":111},[97,29279,29206],{"class":118},[97,29281,29186],{"class":118},[97,29283,29284],{"class":99,"line":1522},[97,29285,2591],{"emptyLinePlaceholder":249},[97,29287,29288,29290,29292],{"class":99,"line":1804},[97,29289,26743],{"class":111},[97,29291,29206],{"class":118},[97,29293,29294],{"class":118}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[138,29296,29297],{"start":241},[70,29298,29299],{},"验证推送成功",[24,29301,29302],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[24,29304,29305],{},[469,29306,3975],{},[67,29308,29309,29312],{},[70,29310,29311],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[70,29313,29314],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[24,29316,29317],{},[19,29318],{"alt":92,"src":29319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[24,29321,29322],{},[19,29323],{"alt":92,"src":29324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[160,29326,29328],{"id":29327},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[24,29330,29331,29332,29335,29336,29339],{},"如果您想在 ",[469,29333,29334],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[469,29337,29338],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[24,29341,29342,29343],{},"1. ",[469,29344,29345],{},"启用 Docker 跨平台构建",[24,29347,29348],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[24,29350,29351],{},"第一步：启用 buildx（只需执行一次）",[87,29353,29355],{"className":24011,"code":29354,"language":24013,"meta":92,"style":92},"docker buildx create --name multiarch_builder --use\n",[94,29356,29357],{"__ignoreMap":92},[97,29358,29359,29361,29364,29367,29370,29373],{"class":99,"line":100},[97,29360,26743],{"class":111},[97,29362,29363],{"class":118}," buildx",[97,29365,29366],{"class":118}," create",[97,29368,29369],{"class":370}," --name",[97,29371,29372],{"class":118}," multiarch_builder",[97,29374,29375],{"class":370}," --use\n",[24,29377,29378],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[24,29380,29381],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[87,29383,29385],{"className":24011,"code":29384,"language":24013,"meta":92,"style":92},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[94,29386,29387],{"__ignoreMap":92},[97,29388,29389,29391,29393,29395,29398,29401,29404,29407],{"class":99,"line":100},[97,29390,26743],{"class":111},[97,29392,27420],{"class":118},[97,29394,27423],{"class":370},[97,29396,29397],{"class":370}," --privileged",[97,29399,29400],{"class":118}," multiarch\u002Fqemu-user-static",[97,29402,29403],{"class":370}," --reset",[97,29405,29406],{"class":370}," -p",[97,29408,29409],{"class":118}," yes\n",[24,29411,29412],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[24,29414,29415],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[87,29417,29419],{"className":24011,"code":29418,"language":24013,"meta":92,"style":92},"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",[94,29420,29421,29463,29467,29472,29482,29492,29501,29507,29511,29515,29525,29533,29542,29548,29552,29556,29566,29574,29583,29589,29593,29597,29607,29615,29624,29630,29634,29638,29648,29656,29665,29671,29675,29679,29689,29697,29706,29712,29716,29720,29730,29738,29747,29753,29757,29761,29771,29779,29788,29794,29798,29802,29812,29820,29829,29835,29839,29843,29854,29862,29871,29877],{"__ignoreMap":92},[97,29422,29423,29425,29427,29429,29432,29435,29437,29439,29442,29444,29446,29448,29450,29453,29456,29458,29461],{"class":99,"line":100},[97,29424,26743],{"class":111},[97,29426,29363],{"class":118},[97,29428,28922],{"class":118},[97,29430,29431],{"class":370}," --platform",[97,29433,29434],{"class":118}," linux\u002Famd64,linux\u002Farm64",[97,29436,28925],{"class":370},[97,29438,29092],{"class":319},[97,29440,29441],{"class":118},"你的镜像",[97,29443,29098],{"class":103},[97,29445,1279],{"class":319},[97,29447,1179],{"class":118},[97,29449,104],{"class":319},[97,29451,29452],{"class":118},"标",[97,29454,29455],{"class":103},"签",[97,29457,1279],{"class":319},[97,29459,29460],{"class":370}," --push",[97,29462,28931],{"class":118},[97,29464,29465],{"class":99,"line":195},[97,29466,2591],{"emptyLinePlaceholder":249},[97,29468,29469],{"class":99,"line":241},[97,29470,29471],{"class":191},"# 例子：\n",[97,29473,29474,29476,29478,29480],{"class":99,"line":1387},[97,29475,26743],{"class":111},[97,29477,29363],{"class":118},[97,29479,28922],{"class":118},[97,29481,24868],{"class":370},[97,29483,29484,29487,29490],{"class":99,"line":1393},[97,29485,29486],{"class":103},"--platform ",[97,29488,29489],{"class":118},"linux\u002Famd64,linux\u002Farm64",[97,29491,24868],{"class":370},[97,29493,29494,29496,29499],{"class":99,"line":1407},[97,29495,28925],{"class":370},[97,29497,29498],{"class":118}," tungchiahui\u002Fros:noetic-focal",[97,29500,24868],{"class":370},[97,29502,29503,29505],{"class":99,"line":1413},[97,29504,29460],{"class":370},[97,29506,24868],{"class":370},[97,29508,29509],{"class":99,"line":1504},[97,29510,28931],{"class":118},[97,29512,29513],{"class":99,"line":1510},[97,29514,2591],{"emptyLinePlaceholder":249},[97,29516,29517,29519,29521,29523],{"class":99,"line":1522},[97,29518,26743],{"class":111},[97,29520,29363],{"class":118},[97,29522,28922],{"class":118},[97,29524,24868],{"class":370},[97,29526,29527,29529,29531],{"class":99,"line":1804},[97,29528,29486],{"class":103},[97,29530,29489],{"class":118},[97,29532,24868],{"class":370},[97,29534,29535,29537,29540],{"class":99,"line":1809},[97,29536,28925],{"class":370},[97,29538,29539],{"class":118}," tungchiahui\u002Fros:humble-jammy",[97,29541,24868],{"class":370},[97,29543,29544,29546],{"class":99,"line":1815},[97,29545,29460],{"class":370},[97,29547,24868],{"class":370},[97,29549,29550],{"class":99,"line":1820},[97,29551,28931],{"class":118},[97,29553,29554],{"class":99,"line":1834},[97,29555,2591],{"emptyLinePlaceholder":249},[97,29557,29558,29560,29562,29564],{"class":99,"line":1839},[97,29559,26743],{"class":111},[97,29561,29363],{"class":118},[97,29563,28922],{"class":118},[97,29565,24868],{"class":370},[97,29567,29568,29570,29572],{"class":99,"line":1845},[97,29569,29486],{"class":103},[97,29571,29489],{"class":118},[97,29573,24868],{"class":370},[97,29575,29576,29578,29581],{"class":99,"line":1866},[97,29577,28925],{"class":370},[97,29579,29580],{"class":118}," tungchiahui\u002Fros:jazzy-noble",[97,29582,24868],{"class":370},[97,29584,29585,29587],{"class":99,"line":1871},[97,29586,29460],{"class":370},[97,29588,24868],{"class":370},[97,29590,29591],{"class":99,"line":1885},[97,29592,28931],{"class":118},[97,29594,29595],{"class":99,"line":1890},[97,29596,2591],{"emptyLinePlaceholder":249},[97,29598,29599,29601,29603,29605],{"class":99,"line":1919},[97,29600,26510],{"class":111},[97,29602,29363],{"class":118},[97,29604,28922],{"class":118},[97,29606,24868],{"class":370},[97,29608,29609,29611,29613],{"class":99,"line":1924},[97,29610,29486],{"class":103},[97,29612,29489],{"class":118},[97,29614,24868],{"class":370},[97,29616,29617,29619,29622],{"class":99,"line":1941},[97,29618,28925],{"class":370},[97,29620,29621],{"class":118}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[97,29623,24868],{"class":370},[97,29625,29626,29628],{"class":99,"line":1946},[97,29627,29460],{"class":370},[97,29629,24868],{"class":370},[97,29631,29632],{"class":99,"line":1951},[97,29633,28931],{"class":118},[97,29635,29636],{"class":99,"line":1956},[97,29637,2591],{"emptyLinePlaceholder":249},[97,29639,29640,29642,29644,29646],{"class":99,"line":1970},[97,29641,26743],{"class":111},[97,29643,29363],{"class":118},[97,29645,28922],{"class":118},[97,29647,24868],{"class":370},[97,29649,29650,29652,29654],{"class":99,"line":1975},[97,29651,29486],{"class":103},[97,29653,29489],{"class":118},[97,29655,24868],{"class":370},[97,29657,29658,29660,29663],{"class":99,"line":2768},[97,29659,28925],{"class":370},[97,29661,29662],{"class":118}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[97,29664,24868],{"class":370},[97,29666,29667,29669],{"class":99,"line":2782},[97,29668,29460],{"class":370},[97,29670,24868],{"class":370},[97,29672,29673],{"class":99,"line":2790},[97,29674,28931],{"class":118},[97,29676,29677],{"class":99,"line":2795},[97,29678,2591],{"emptyLinePlaceholder":249},[97,29680,29681,29683,29685,29687],{"class":99,"line":2801},[97,29682,26510],{"class":111},[97,29684,29363],{"class":118},[97,29686,28922],{"class":118},[97,29688,24868],{"class":370},[97,29690,29691,29693,29695],{"class":99,"line":2807},[97,29692,29486],{"class":103},[97,29694,29489],{"class":118},[97,29696,24868],{"class":370},[97,29698,29699,29701,29704],{"class":99,"line":2812},[97,29700,28925],{"class":370},[97,29702,29703],{"class":118}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[97,29705,24868],{"class":370},[97,29707,29708,29710],{"class":99,"line":8139},[97,29709,29460],{"class":370},[97,29711,24868],{"class":370},[97,29713,29714],{"class":99,"line":8163},[97,29715,28931],{"class":118},[97,29717,29718],{"class":99,"line":8168},[97,29719,2591],{"emptyLinePlaceholder":249},[97,29721,29722,29724,29726,29728],{"class":99,"line":8174},[97,29723,26743],{"class":111},[97,29725,29363],{"class":118},[97,29727,28922],{"class":118},[97,29729,24868],{"class":370},[97,29731,29732,29734,29736],{"class":99,"line":8201},[97,29733,29486],{"class":103},[97,29735,29489],{"class":118},[97,29737,24868],{"class":370},[97,29739,29740,29742,29745],{"class":99,"line":8206},[97,29741,28925],{"class":370},[97,29743,29744],{"class":118}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[97,29746,24868],{"class":370},[97,29748,29749,29751],{"class":99,"line":8212},[97,29750,29460],{"class":370},[97,29752,24868],{"class":370},[97,29754,29755],{"class":99,"line":8224},[97,29756,28931],{"class":118},[97,29758,29759],{"class":99,"line":8236},[97,29760,2591],{"emptyLinePlaceholder":249},[97,29762,29763,29765,29767,29769],{"class":99,"line":8248},[97,29764,26743],{"class":111},[97,29766,29363],{"class":118},[97,29768,28922],{"class":118},[97,29770,24868],{"class":370},[97,29772,29773,29775,29777],{"class":99,"line":9907},[97,29774,29486],{"class":103},[97,29776,29489],{"class":118},[97,29778,24868],{"class":370},[97,29780,29781,29783,29786],{"class":99,"line":9932},[97,29782,28925],{"class":370},[97,29784,29785],{"class":118}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[97,29787,24868],{"class":370},[97,29789,29790,29792],{"class":99,"line":9955},[97,29791,29460],{"class":370},[97,29793,24868],{"class":370},[97,29795,29796],{"class":99,"line":9979},[97,29797,28931],{"class":118},[97,29799,29800],{"class":99,"line":9984},[97,29801,2591],{"emptyLinePlaceholder":249},[97,29803,29804,29806,29808,29810],{"class":99,"line":9989},[97,29805,26510],{"class":111},[97,29807,29363],{"class":118},[97,29809,28922],{"class":118},[97,29811,24868],{"class":370},[97,29813,29814,29816,29818],{"class":99,"line":9994},[97,29815,29486],{"class":103},[97,29817,29489],{"class":118},[97,29819,24868],{"class":370},[97,29821,29822,29824,29827],{"class":99,"line":10003},[97,29823,28925],{"class":370},[97,29825,29826],{"class":118}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[97,29828,24868],{"class":370},[97,29830,29831,29833],{"class":99,"line":10008},[97,29832,29460],{"class":370},[97,29834,24868],{"class":370},[97,29836,29837],{"class":99,"line":10014},[97,29838,28931],{"class":118},[97,29840,29841],{"class":99,"line":10035},[97,29842,2591],{"emptyLinePlaceholder":249},[97,29844,29845,29848,29850,29852],{"class":99,"line":10041},[97,29846,29847],{"class":111},"  docker",[97,29849,29363],{"class":118},[97,29851,28922],{"class":118},[97,29853,24868],{"class":370},[97,29855,29856,29858,29860],{"class":99,"line":10055},[97,29857,29486],{"class":103},[97,29859,29489],{"class":118},[97,29861,24868],{"class":370},[97,29863,29864,29866,29869],{"class":99,"line":10061},[97,29865,28925],{"class":370},[97,29867,29868],{"class":118}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[97,29870,24868],{"class":370},[97,29872,29873,29875],{"class":99,"line":10088},[97,29874,29460],{"class":370},[97,29876,24868],{"class":370},[97,29878,29879],{"class":99,"line":10097},[97,29880,28931],{"class":118},[24,29882,29883],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[24,29885,29886],{},[19,29887],{"alt":92,"src":29888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[24,29890,29891],{},[19,29892],{"alt":92,"src":29893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[160,29895,29897],{"id":29896},"_623清除构建缓存","6.2.3.清除构建缓存",[87,29899,29901],{"className":24011,"code":29900,"language":24013,"meta":92,"style":92},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[94,29902,29903,29908],{"__ignoreMap":92},[97,29904,29905],{"class":99,"line":100},[97,29906,29907],{"class":191},"# 清理BuildKit构建缓存\n",[97,29909,29910,29912,29915,29918],{"class":99,"line":195},[97,29911,26743],{"class":111},[97,29913,29914],{"class":118}," builder",[97,29916,29917],{"class":118}," prune",[97,29919,29920],{"class":370}," -f\n",[24,29922,29923],{},[19,29924],{"alt":92,"src":29925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[48,29927,29929],{"id":29928},"_63补充","6.3.补充",[160,29931,29933],{"id":29932},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[24,29935,29936],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[24,29938,29939],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[24,29941,29942],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[87,29944,29946],{"className":24011,"code":29945,"language":24013,"meta":92,"style":92},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[94,29947,29948,29955],{"__ignoreMap":92},[97,29949,29950,29952],{"class":99,"line":100},[97,29951,27560],{"class":111},[97,29953,29954],{"class":118}," nginx\n",[97,29956,29957,29959,29962,29965,29967],{"class":99,"line":195},[97,29958,28745],{"class":111},[97,29960,29961],{"class":118}," echo",[97,29963,29964],{"class":118}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[97,29966,26412],{"class":319},[97,29968,29969],{"class":118}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[24,29971,29972],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[24,29974,29975],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[87,29977,29979],{"className":24011,"code":29978,"language":24013,"meta":92,"style":92},"docker build -t nginx:tuling .\n",[94,29980,29981],{"__ignoreMap":92},[97,29982,29983,29985,29987,29989,29992],{"class":99,"line":100},[97,29984,26743],{"class":111},[97,29986,28922],{"class":118},[97,29988,28925],{"class":370},[97,29990,29991],{"class":118}," nginx:tuling",[97,29993,28931],{"class":118},[24,29995,29996],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[24,29998,29999],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[87,30001,30003],{"className":24011,"code":30002,"language":24013,"meta":92,"style":92},"docker run -d -p 92:80 nginx:tuling\n",[94,30004,30005],{"__ignoreMap":92},[97,30006,30007,30009,30011,30014,30016,30019],{"class":99,"line":100},[97,30008,26743],{"class":111},[97,30010,27420],{"class":118},[97,30012,30013],{"class":370}," -d",[97,30015,29406],{"class":370},[97,30017,30018],{"class":118}," 92:80",[97,30020,30021],{"class":118}," nginx:tuling\n",[24,30023,30024,30025],{},"4、访问 ",[558,30026,30029],{"href":30027,"rel":30028},"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",[24054],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[24,30031,30032],{},[19,30033],{"alt":92,"src":30034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[24,30036,30037],{},[19,30038],{"alt":92,"src":30039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[160,30041,30043],{"id":30042},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[24,30045,30046],{},"只需要知道大体流程即可",[24,30048,30049],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[24,30051,30052],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[24,30054,30055],{},"2、在Dockerfile中添加以下内容",[87,30057,30059],{"className":26281,"code":30058,"language":26283,"meta":92,"style":92},"# 基于哪个镜像\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",[94,30060,30061,30066,30071,30076,30081,30086,30091,30096],{"__ignoreMap":92},[97,30062,30063],{"class":99,"line":100},[97,30064,30065],{},"# 基于哪个镜像\n",[97,30067,30068],{"class":99,"line":195},[97,30069,30070],{},"From java:8\n",[97,30072,30073],{"class":99,"line":241},[97,30074,30075],{},"# 复制文件到容器\n",[97,30077,30078],{"class":99,"line":1387},[97,30079,30080],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[97,30082,30083],{"class":99,"line":1393},[97,30084,30085],{},"# 声明需要暴露的端口\n",[97,30087,30088],{"class":99,"line":1407},[97,30089,30090],{},"EXPOSE 8877\n",[97,30092,30093],{"class":99,"line":1413},[97,30094,30095],{},"# 配置容器启动后执行的命令\n",[97,30097,30098],{"class":99,"line":1504},[97,30099,30100],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[24,30102,30103],{},"3、使用docker build命令构建镜像",[87,30105,30107],{"className":24011,"code":30106,"language":24013,"meta":92,"style":92},"docker build -t tulingmall-member:0.0.5 .\n",[94,30108,30109],{"__ignoreMap":92},[97,30110,30111,30113,30115,30117,30120],{"class":99,"line":100},[97,30112,26743],{"class":111},[97,30114,28922],{"class":118},[97,30116,28925],{"class":370},[97,30118,30119],{"class":118}," tulingmall-member:0.0.5",[97,30121,28931],{"class":118},[24,30123,30124],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[24,30126,30127],{},[19,30128],{"alt":92,"src":30129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[24,30131,30132],{},"4、启动镜像，加-d可在后台启动",[87,30134,30136],{"className":24011,"code":30135,"language":24013,"meta":92,"style":92},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[94,30137,30138],{"__ignoreMap":92},[97,30139,30140,30142,30144,30146,30148,30151],{"class":99,"line":100},[97,30141,26743],{"class":111},[97,30143,27420],{"class":118},[97,30145,30013],{"class":370},[97,30147,29406],{"class":370},[97,30149,30150],{"class":118}," 8877:8877",[97,30152,30153],{"class":118}," tulingmall-member:0.0.5\n",[24,30155,30156],{},"加上JVM参数：",[87,30158,30160],{"className":24011,"code":30159,"language":24013,"meta":92,"style":92},"# --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",[94,30161,30162,30167,30182,30192,30201,30208],{"__ignoreMap":92},[97,30163,30164],{"class":99,"line":100},[97,30165,30166],{"class":191},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[97,30168,30169,30171,30173,30176,30178,30180],{"class":99,"line":195},[97,30170,26743],{"class":111},[97,30172,27420],{"class":118},[97,30174,30175],{"class":370},"  -d",[97,30177,29406],{"class":370},[97,30179,30150],{"class":118},[97,30181,24868],{"class":370},[97,30183,30184,30186,30189],{"class":99,"line":241},[97,30185,28318],{"class":103},[97,30187,30188],{"class":118},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[97,30190,30191],{"class":370},"  \\\n",[97,30193,30194,30196,30199],{"class":99,"line":1387},[97,30195,28318],{"class":103},[97,30197,30198],{"class":118},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[97,30200,30191],{"class":370},[97,30202,30203,30206],{"class":99,"line":1393},[97,30204,30205],{"class":103},"--cap-add=SYS_PTRACE  ",[97,30207,26365],{"class":370},[97,30209,30210],{"class":99,"line":1407},[97,30211,30212],{"class":103},"tulingmall-member:0.0.5\n",[24,30214,30215],{},"5、访问会员服务接口",[24,30217,30218],{},[19,30219],{"alt":92,"src":30220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[160,30222,30224],{"id":30223},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[24,30226,30227],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[24,30229,30230,30231],{},"阿里云docker镜像仓库：",[558,30232,30233],{"href":30233,"rel":30234},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24054],[24,30236,30237],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[24,30239,30240],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[24,30242,30243],{},[19,30244],{"alt":92,"src":30245},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[24,30247,30248],{},"要把镜像推送到镜像仓库",[87,30250,30252],{"className":24011,"code":30251,"language":24013,"meta":92,"style":92},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[94,30253,30254],{"__ignoreMap":92},[97,30255,30256,30258,30260,30262],{"class":99,"line":100},[97,30257,26743],{"class":111},[97,30259,29087],{"class":118},[97,30261,30119],{"class":118},[97,30263,30264],{"class":118}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[24,30266,30267],{},"最后将镜像推送到远程仓库",[87,30269,30271],{"className":24011,"code":30270,"language":24013,"meta":92,"style":92},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[94,30272,30273],{"__ignoreMap":92},[97,30274,30275,30277,30279],{"class":99,"line":100},[97,30276,26743],{"class":111},[97,30278,29206],{"class":118},[97,30280,30264],{"class":118},[231,30282,30283],{},"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":92,"searchDepth":195,"depth":195,"links":30285},[30286,30287,30288],{"id":28673,"depth":241,"text":28674},{"id":28902,"depth":241,"text":28903},{"id":29928,"depth":241,"text":29929},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28665,"description":92},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30295,"title":30296,"body":30297,"description":92,"extension":247,"meta":30440,"navigation":249,"path":30441,"seo":30442,"stem":30443,"__hash__":30444},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30298,"toc":30438},[30299,30302,30307,30312,30315,30320,30325,30328,30333,30338,30341,30346,30349,30352,30355,30358,30361,30364,30384,30406,30409,30412,30432,30435],[10,30300,30296],{"id":30301},"_7vscode远程开发",[138,30303,30304],{},[70,30305,30306],{},"插件1：微软Docker工具",[24,30308,30309],{},[19,30310],{"alt":92,"src":30311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[24,30313,30314],{},"docker扩展插件已经进化为container tools了，请安装container tools",[24,30316,30317],{},[19,30318],{"alt":92,"src":30319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[138,30321,30322],{"start":195},[70,30323,30324],{},"插件2：微软Docker远程开发工具",[24,30326,30327],{},"下面这是远程开发的插件。",[24,30329,30330],{},[19,30331],{"alt":92,"src":30332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[24,30334,30335],{},[19,30336],{"alt":92,"src":30337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[24,30339,30340],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[24,30342,30343],{},[19,30344],{"alt":92,"src":30345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[24,30347,30348],{},"安装完拓展之后，vscode进行链接：",[24,30350,30351],{},"1.按ctrl+shift+p",[24,30353,30354],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[24,30356,30357],{},"3.选择目前运行的容器",[24,30359,30360],{},"4.VS Code 会在新窗口中打开并连接到容器",[24,30362,30363],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[87,30365,30367],{"className":24011,"code":30366,"language":24013,"meta":92,"style":92},"docker run -v 主机目录:容器目录 image-name\n",[94,30368,30369],{"__ignoreMap":92},[97,30370,30371,30373,30375,30378,30381],{"class":99,"line":100},[97,30372,26743],{"class":111},[97,30374,27420],{"class":118},[97,30376,30377],{"class":370}," -v",[97,30379,30380],{"class":118}," 主机目录:容器目录",[97,30382,30383],{"class":118}," image-name\n",[87,30385,30387],{"className":24011,"code":30386,"language":24013,"meta":92,"style":92},"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",[94,30388,30389],{"__ignoreMap":92},[97,30390,30391,30393,30395,30398,30400,30403],{"class":99,"line":100},[97,30392,26743],{"class":111},[97,30394,27420],{"class":118},[97,30396,30397],{"class":370}," -it",[97,30399,30377],{"class":370},[97,30401,30402],{"class":118}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[97,30404,30405],{"class":118}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[24,30407,30408],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[24,30410,30411],{},"查看挂载情况：",[87,30413,30415],{"className":24011,"code":30414,"language":24013,"meta":92,"style":92},"mount | grep -i project\n",[94,30416,30417],{"__ignoreMap":92},[97,30418,30419,30422,30424,30427,30429],{"class":99,"line":100},[97,30420,30421],{"class":111},"mount",[97,30423,25299],{"class":319},[97,30425,30426],{"class":111}," grep",[97,30428,26620],{"class":370},[97,30430,30431],{"class":118}," project\n",[24,30433,30434],{},"也可以通过ls来进行查看",[231,30436,30437],{},"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":92,"searchDepth":195,"depth":195,"links":30439},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30296,"description":92},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30446,"title":30447,"body":30448,"description":246,"extension":247,"meta":30452,"navigation":249,"path":30454,"seo":30455,"stem":30456,"__hash__":30457},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30449,"toc":30450},[],{"title":92,"searchDepth":195,"depth":195,"links":30451},[],{"category":30453},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30447,"description":246},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30459,"title":30460,"body":30461,"description":246,"extension":247,"meta":30465,"navigation":249,"path":30466,"seo":30467,"stem":30468,"__hash__":30469},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30462,"toc":30463},[],{"title":92,"searchDepth":195,"depth":195,"links":30464},[],{"category":30453},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30460,"description":246},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30471,"title":30472,"body":30473,"description":246,"extension":247,"meta":30766,"navigation":249,"path":30767,"seo":30768,"stem":30769,"__hash__":30770},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30474,"toc":30764},[30475,30478,30486,30501,30506,30557,30560,30566,30753,30758,30761],[10,30476,30472],{"id":30477},"_1验证深度学习环境",[24,30479,30480,30481],{},"关于环境的安装，看",[558,30482,30485],{"href":30483,"rel":30484},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24054],"Pytorch-->深度学习",[24,30487,30488,30489,30492,30493,30496,30497,30500],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[94,30490,30491],{},"pytorch-cuda=12.4"," 是一个“ ",[469,30494,30495],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[469,30498,30499],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[24,30502,30503],{},[19,30504],{"alt":92,"src":30505},"\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",[87,30507,30509],{"className":24011,"code":30508,"language":24013,"meta":92,"style":92},"# 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",[94,30510,30511,30516],{"__ignoreMap":92},[97,30512,30513],{"class":99,"line":100},[97,30514,30515],{"class":191},"# CUDA 12.4\n",[97,30517,30518,30521,30523,30526,30529,30532,30535,30538,30540,30543,30546,30549,30552,30554],{"class":99,"line":195},[97,30519,30520],{"class":111},"conda",[97,30522,24023],{"class":118},[97,30524,30525],{"class":118}," pytorch==",[97,30527,30528],{"class":370},"2.5.1",[97,30530,30531],{"class":118}," torchvision==",[97,30533,30534],{"class":370},"0.20.1",[97,30536,30537],{"class":118}," torchaudio==",[97,30539,30528],{"class":370},[97,30541,30542],{"class":118}," pytorch-cuda=",[97,30544,30545],{"class":370},"12.4",[97,30547,30548],{"class":370}," -c",[97,30550,30551],{"class":118}," pytorch",[97,30553,30548],{"class":370},[97,30555,30556],{"class":118}," nvidia\n",[24,30558,30559],{},"）：",[24,30561,30562],{},[558,30563,30564],{"href":30564,"rel":30565},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24054],[87,30567,30571],{"className":30568,"code":30569,"language":30570,"meta":92,"style":92},"language-python shiki shiki-themes github-light github-dark","# 对深度学习环境进行测试\nimport torch\n# 查看cuda是否被激活\nflag=torch.cuda.is_available()\nprint(\"cuda:\", flag)   #返回true的话说明被激活\n# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\nngpu=1\ndevice=torch.device(\"cuda:0\" if(torch.cuda.is_available() and ngpu>0) else \"cpu\")\nprint(device)\nprint(torch.cuda.get_device_name(0))\nprint(torch.rand(3,3).cuda())\n# 查看cuda和cudnn的版本\ncuda_version=torch.version.cuda\nprint(\"cuda version\",cuda_version)\ncudnn_version=torch.backends.cudnn.version()\nprint(\"cudnn version\",cudnn_version)\n","python",[94,30572,30573,30578,30586,30591,30601,30617,30622,30632,30669,30676,30688,30704,30709,30719,30731,30741],{"__ignoreMap":92},[97,30574,30575],{"class":99,"line":100},[97,30576,30577],{"class":191},"# 对深度学习环境进行测试\n",[97,30579,30580,30583],{"class":99,"line":195},[97,30581,30582],{"class":319},"import",[97,30584,30585],{"class":103}," torch\n",[97,30587,30588],{"class":99,"line":241},[97,30589,30590],{"class":191},"# 查看cuda是否被激活\n",[97,30592,30593,30596,30598],{"class":99,"line":1387},[97,30594,30595],{"class":103},"flag",[97,30597,115],{"class":319},[97,30599,30600],{"class":103},"torch.cuda.is_available()\n",[97,30602,30603,30606,30608,30611,30614],{"class":99,"line":1393},[97,30604,30605],{"class":370},"print",[97,30607,323],{"class":103},[97,30609,30610],{"class":118},"\"cuda:\"",[97,30612,30613],{"class":103},", flag)   ",[97,30615,30616],{"class":191},"#返回true的话说明被激活\n",[97,30618,30619],{"class":99,"line":1407},[97,30620,30621],{"class":191},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[97,30623,30624,30627,30629],{"class":99,"line":1413},[97,30625,30626],{"class":103},"ngpu",[97,30628,115],{"class":319},[97,30630,30631],{"class":370},"1\n",[97,30633,30634,30637,30639,30642,30645,30647,30650,30653,30656,30658,30660,30662,30664,30667],{"class":99,"line":1504},[97,30635,30636],{"class":103},"device",[97,30638,115],{"class":319},[97,30640,30641],{"class":103},"torch.device(",[97,30643,30644],{"class":118},"\"cuda:0\"",[97,30646,1896],{"class":319},[97,30648,30649],{"class":103},"(torch.cuda.is_available() ",[97,30651,30652],{"class":319},"and",[97,30654,30655],{"class":103}," ngpu",[97,30657,1279],{"class":319},[97,30659,511],{"class":370},[97,30661,13905],{"class":103},[97,30663,1893],{"class":319},[97,30665,30666],{"class":118}," \"cpu\"",[97,30668,329],{"class":103},[97,30670,30671,30673],{"class":99,"line":1510},[97,30672,30605],{"class":370},[97,30674,30675],{"class":103},"(device)\n",[97,30677,30678,30680,30683,30685],{"class":99,"line":1522},[97,30679,30605],{"class":370},[97,30681,30682],{"class":103},"(torch.cuda.get_device_name(",[97,30684,511],{"class":370},[97,30686,30687],{"class":103},"))\n",[97,30689,30690,30692,30695,30697,30699,30701],{"class":99,"line":1804},[97,30691,30605],{"class":370},[97,30693,30694],{"class":103},"(torch.rand(",[97,30696,392],{"class":370},[97,30698,698],{"class":103},[97,30700,392],{"class":370},[97,30702,30703],{"class":103},").cuda())\n",[97,30705,30706],{"class":99,"line":1809},[97,30707,30708],{"class":191},"# 查看cuda和cudnn的版本\n",[97,30710,30711,30714,30716],{"class":99,"line":1815},[97,30712,30713],{"class":103},"cuda_version",[97,30715,115],{"class":319},[97,30717,30718],{"class":103},"torch.version.cuda\n",[97,30720,30721,30723,30725,30728],{"class":99,"line":1820},[97,30722,30605],{"class":370},[97,30724,323],{"class":103},[97,30726,30727],{"class":118},"\"cuda version\"",[97,30729,30730],{"class":103},",cuda_version)\n",[97,30732,30733,30736,30738],{"class":99,"line":1834},[97,30734,30735],{"class":103},"cudnn_version",[97,30737,115],{"class":319},[97,30739,30740],{"class":103},"torch.backends.cudnn.version()\n",[97,30742,30743,30745,30747,30750],{"class":99,"line":1839},[97,30744,30605],{"class":370},[97,30746,323],{"class":103},[97,30748,30749],{"class":118},"\"cudnn version\"",[97,30751,30752],{"class":103},",cudnn_version)\n",[24,30754,30755],{},[19,30756],{"alt":92,"src":30757},"\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",[24,30759,30760],{},"cuda:0 指的是一块显卡",[231,30762,30763],{},"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":92,"searchDepth":195,"depth":195,"links":30765},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30472,"description":246},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30772,"title":30773,"body":30774,"description":246,"extension":247,"meta":50578,"navigation":249,"path":50579,"seo":50580,"stem":50581,"__hash__":50582},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30775,"toc":50572},[30776,30779,30783,30787,30790,30795,30800,30803,30808,30813,30818,30821,30825,30830,30834,30839,30842,30847,30850,30853,30856,30859,30864,30867,30872,30877,30882,30887,30890,30894,30897,30902,31506,31511,31514,31519,31522,31525,31989,31992,31995,31998,32001,34052,34055,34060,34065,34860,34863,34868,35646,35650,37309,37313,38027,38031,38035,38040,38045,38050,38053,38058,38063,38068,38073,38078,38082,38087,39369,39374,39377,39380,39383,39538,39541,39544,40760,40765,41460,41464,41468,41473,41478,41481,41486,41491,41496,41501,41506,41511,41516,41521,41526,41531,41536,41541,41546,41551,41556,41561,41566,41571,41576,41581,41586,41591,41596,41601,41606,41611,41616,41621,41626,41631,41635,41639,41642,43120,43124,44771,44775,45469,45473,45476,45479,46023,46026,46030,46033,47430,47434,47437,48015,49802,49806,49809,50569],[10,30777,30773],{"id":30778},"_2经典神经网络",[48,30780,30782],{"id":30781},"_21lenet与alexnet","2.1.LeNet与AlexNet",[160,30784,30786],{"id":30785},"_211原理介绍","2.1.1.原理介绍",[24,30788,30789],{},"LeNet-5",[138,30791,30792],{},[70,30793,30794],{},"原理",[24,30796,30797],{},[19,30798],{"alt":92,"src":30799},"\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",[24,30801,30802],{},"B是batch批次；C是channel通道",[138,30804,30805],{"start":195},[70,30806,30807],{},"网络参数详细",[24,30809,30810],{},[19,30811],{"alt":92,"src":30812},"\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",[24,30814,30815],{},[19,30816],{"alt":92,"src":30817},"\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",[24,30819,30820],{},"AlexNet",[138,30822,30823],{},[70,30824,30794],{},[24,30826,30827],{},[19,30828],{"alt":92,"src":30829},"\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",[138,30831,30832],{"start":195},[70,30833,30807],{},[24,30835,30836],{},[19,30837],{"alt":92,"src":30838},"\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",[24,30840,30841],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[24,30843,30844],{},[19,30845],{"alt":92,"src":30846},"\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",[24,30848,30849],{},"数据处理中的图像增强操作:",[24,30851,30852],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[24,30854,30855],{},"①增加数据量，保证训练数据充足；②防止过拟合",[24,30857,30858],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[24,30860,30861],{},[19,30862],{"alt":92,"src":30863},"\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",[24,30865,30866],{},"提升网络精确度的方法：LRN正则化",[24,30868,30869],{},[19,30870],{"alt":92,"src":30871},"\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",[24,30873,30874],{},[19,30875],{"alt":92,"src":30876},"\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",[138,30878,30879],{"start":241},[70,30880,30881],{},"AlexNet的总结",[24,30883,30884],{},[19,30885],{"alt":92,"src":30886},"\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",[24,30888,30889],{},"比LeNet模型要深一丢丢",[160,30891,30893],{"id":30892},"_212代码实现","2.1.2.代码实现",[24,30895,30896],{},"（1）LeNet",[138,30898,30899],{},[70,30900,30901],{},"模型搭建",[87,30903,30905],{"className":30568,"code":30904,"language":30570,"meta":92,"style":92},"# 导入库\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",[94,30906,30907,30912,30918,30923,30936,30941,30953,30957,30977,30982,30987,30998,31003,31022,31026,31031,31080,31092,31097,31126,31161,31188,31193,31205,31210,31230,31249,31268,31272,31277,31287,31304,31315,31330,31341,31352,31367,31382,31393,31400,31404,31418,31423,31446,31451,31456,31461,31465,31470,31475,31485],{"__ignoreMap":92},[97,30908,30909],{"class":99,"line":100},[97,30910,30911],{"class":191},"# 导入库\n",[97,30913,30914,30916],{"class":99,"line":195},[97,30915,30582],{"class":319},[97,30917,30585],{"class":103},[97,30919,30920],{"class":99,"line":241},[97,30921,30922],{"class":191},"# 导入神经网络层\n",[97,30924,30925,30928,30931,30933],{"class":99,"line":1387},[97,30926,30927],{"class":319},"from",[97,30929,30930],{"class":103}," torch ",[97,30932,30582],{"class":319},[97,30934,30935],{"class":103}," nn\n",[97,30937,30938],{"class":99,"line":1393},[97,30939,30940],{"class":191},"# 导入展示神经网络参数的包\n",[97,30942,30943,30945,30948,30950],{"class":99,"line":1407},[97,30944,30927],{"class":319},[97,30946,30947],{"class":103}," torchsummary ",[97,30949,30582],{"class":319},[97,30951,30952],{"class":103}," summary\n",[97,30954,30955],{"class":99,"line":1413},[97,30956,2591],{"emptyLinePlaceholder":249},[97,30958,30959,30961,30964,30966,30969,30971,30974],{"class":99,"line":1504},[97,30960,14885],{"class":319},[97,30962,30963],{"class":111}," LeNet",[97,30965,323],{"class":103},[97,30967,30968],{"class":111},"nn",[97,30970,878],{"class":103},[97,30972,30973],{"class":111},"Module",[97,30975,30976],{"class":103},"):\n",[97,30978,30979],{"class":99,"line":1510},[97,30980,30981],{"class":191},"    # 模型初始化:\n",[97,30983,30984],{"class":99,"line":1522},[97,30985,30986],{"class":191},"    # 定义一些网络层和激活函数\n",[97,30988,30989,30992,30995],{"class":99,"line":1804},[97,30990,30991],{"class":319},"    def",[97,30993,30994],{"class":370}," __init__",[97,30996,30997],{"class":103},"(self):\n",[97,30999,31000],{"class":99,"line":1809},[97,31001,31002],{"class":191},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[97,31004,31005,31008,31011,31014,31017,31020],{"class":99,"line":1815},[97,31006,31007],{"class":370},"        super",[97,31009,31010],{"class":103},"(LeNet,",[97,31012,31013],{"class":370},"self",[97,31015,31016],{"class":103},").",[97,31018,31019],{"class":370},"__init__",[97,31021,2167],{"class":103},[97,31023,31024],{"class":99,"line":1820},[97,31025,2591],{"emptyLinePlaceholder":249},[97,31027,31028],{"class":99,"line":1834},[97,31029,31030],{"class":191},"        # 定义网络层\n",[97,31032,31033,31036,31039,31041,31044,31047,31049,31051,31053,31056,31058,31060,31062,31065,31067,31069,31071,31074,31076,31078],{"class":99,"line":1839},[97,31034,31035],{"class":370},"        self",[97,31037,31038],{"class":103},".c1",[97,31040,115],{"class":319},[97,31042,31043],{"class":103},"nn.Conv2d(",[97,31045,31046],{"class":5407},"in_channels",[97,31048,115],{"class":319},[97,31050,537],{"class":370},[97,31052,698],{"class":103},[97,31054,31055],{"class":5407},"out_channels",[97,31057,115],{"class":319},[97,31059,664],{"class":370},[97,31061,698],{"class":103},[97,31063,31064],{"class":5407},"kernel_size",[97,31066,115],{"class":319},[97,31068,639],{"class":370},[97,31070,698],{"class":103},[97,31072,31073],{"class":5407},"padding",[97,31075,115],{"class":319},[97,31077,398],{"class":370},[97,31079,329],{"class":103},[97,31081,31082,31084,31087,31089],{"class":99,"line":1845},[97,31083,31035],{"class":370},[97,31085,31086],{"class":103},".sig",[97,31088,115],{"class":319},[97,31090,31091],{"class":103},"nn.Sigmoid()\n",[97,31093,31094],{"class":99,"line":1866},[97,31095,31096],{"class":191},"        # 定义池化\n",[97,31098,31099,31101,31104,31106,31109,31111,31113,31115,31117,31120,31122,31124],{"class":99,"line":1871},[97,31100,31035],{"class":370},[97,31102,31103],{"class":103},".s2",[97,31105,115],{"class":319},[97,31107,31108],{"class":103},"nn.AvgPool2d(",[97,31110,31064],{"class":5407},[97,31112,115],{"class":319},[97,31114,398],{"class":370},[97,31116,698],{"class":103},[97,31118,31119],{"class":5407},"stride",[97,31121,115],{"class":319},[97,31123,398],{"class":370},[97,31125,329],{"class":103},[97,31127,31128,31130,31133,31135,31137,31139,31141,31143,31145,31147,31149,31151,31153,31155,31157,31159],{"class":99,"line":1885},[97,31129,31035],{"class":370},[97,31131,31132],{"class":103},".c3",[97,31134,115],{"class":319},[97,31136,31043],{"class":103},[97,31138,31046],{"class":5407},[97,31140,115],{"class":319},[97,31142,664],{"class":370},[97,31144,698],{"class":103},[97,31146,31055],{"class":5407},[97,31148,115],{"class":319},[97,31150,921],{"class":370},[97,31152,698],{"class":103},[97,31154,31064],{"class":5407},[97,31156,115],{"class":319},[97,31158,639],{"class":370},[97,31160,329],{"class":103},[97,31162,31163,31165,31168,31170,31172,31174,31176,31178,31180,31182,31184,31186],{"class":99,"line":1890},[97,31164,31035],{"class":370},[97,31166,31167],{"class":103},".s4",[97,31169,115],{"class":319},[97,31171,31108],{"class":103},[97,31173,31064],{"class":5407},[97,31175,115],{"class":319},[97,31177,398],{"class":370},[97,31179,698],{"class":103},[97,31181,31119],{"class":5407},[97,31183,115],{"class":319},[97,31185,398],{"class":370},[97,31187,329],{"class":103},[97,31189,31190],{"class":99,"line":1919},[97,31191,31192],{"class":191},"        # 定义平展层\n",[97,31194,31195,31197,31200,31202],{"class":99,"line":1924},[97,31196,31035],{"class":370},[97,31198,31199],{"class":103},".flatten",[97,31201,115],{"class":319},[97,31203,31204],{"class":103},"nn.Flatten()\n",[97,31206,31207],{"class":99,"line":1941},[97,31208,31209],{"class":191},"        # 定义全连接层\n",[97,31211,31212,31214,31217,31219,31222,31224,31226,31228],{"class":99,"line":1946},[97,31213,31035],{"class":370},[97,31215,31216],{"class":103},".f5",[97,31218,115],{"class":319},[97,31220,31221],{"class":103},"nn.Linear(",[97,31223,4178],{"class":370},[97,31225,698],{"class":103},[97,31227,1137],{"class":370},[97,31229,329],{"class":103},[97,31231,31232,31234,31237,31239,31241,31243,31245,31247],{"class":99,"line":1951},[97,31233,31035],{"class":370},[97,31235,31236],{"class":103},".f6",[97,31238,115],{"class":319},[97,31240,31221],{"class":103},[97,31242,1137],{"class":370},[97,31244,698],{"class":103},[97,31246,1031],{"class":370},[97,31248,329],{"class":103},[97,31250,31251,31253,31256,31258,31260,31262,31264,31266],{"class":99,"line":1956},[97,31252,31035],{"class":370},[97,31254,31255],{"class":103},".f7",[97,31257,115],{"class":319},[97,31259,31221],{"class":103},[97,31261,1031],{"class":370},[97,31263,698],{"class":103},[97,31265,766],{"class":370},[97,31267,329],{"class":103},[97,31269,31270],{"class":99,"line":1970},[97,31271,2591],{"emptyLinePlaceholder":249},[97,31273,31274],{"class":99,"line":1975},[97,31275,31276],{"class":191},"    # 写工具->写前向传播\n",[97,31278,31279,31281,31284],{"class":99,"line":2768},[97,31280,30991],{"class":319},[97,31282,31283],{"class":111}," forward",[97,31285,31286],{"class":103},"(self,x):\n",[97,31288,31289,31292,31294,31296,31299,31301],{"class":99,"line":2782},[97,31290,31291],{"class":103},"        x",[97,31293,115],{"class":319},[97,31295,31013],{"class":370},[97,31297,31298],{"class":103},".sig(",[97,31300,31013],{"class":370},[97,31302,31303],{"class":103},".c1(x))\n",[97,31305,31306,31308,31310,31312],{"class":99,"line":2790},[97,31307,31291],{"class":103},[97,31309,115],{"class":319},[97,31311,31013],{"class":370},[97,31313,31314],{"class":103},".s2(x)\n",[97,31316,31317,31319,31321,31323,31325,31327],{"class":99,"line":2795},[97,31318,31291],{"class":103},[97,31320,115],{"class":319},[97,31322,31013],{"class":370},[97,31324,31298],{"class":103},[97,31326,31013],{"class":370},[97,31328,31329],{"class":103},".c3(x))\n",[97,31331,31332,31334,31336,31338],{"class":99,"line":2801},[97,31333,31291],{"class":103},[97,31335,115],{"class":319},[97,31337,31013],{"class":370},[97,31339,31340],{"class":103},".s4(x)\n",[97,31342,31343,31345,31347,31349],{"class":99,"line":2807},[97,31344,31291],{"class":103},[97,31346,115],{"class":319},[97,31348,31013],{"class":370},[97,31350,31351],{"class":103},".flatten(x)\n",[97,31353,31354,31356,31358,31360,31362,31364],{"class":99,"line":2812},[97,31355,31291],{"class":103},[97,31357,115],{"class":319},[97,31359,31013],{"class":370},[97,31361,31298],{"class":103},[97,31363,31013],{"class":370},[97,31365,31366],{"class":103},".f5(x))\n",[97,31368,31369,31371,31373,31375,31377,31379],{"class":99,"line":8139},[97,31370,31291],{"class":103},[97,31372,115],{"class":319},[97,31374,31013],{"class":370},[97,31376,31298],{"class":103},[97,31378,31013],{"class":370},[97,31380,31381],{"class":103},".f6(x))\n",[97,31383,31384,31386,31388,31390],{"class":99,"line":8163},[97,31385,31291],{"class":103},[97,31387,115],{"class":319},[97,31389,31013],{"class":370},[97,31391,31392],{"class":103},".f7(x)\n",[97,31394,31395,31397],{"class":99,"line":8168},[97,31396,14943],{"class":319},[97,31398,31399],{"class":103}," x\n",[97,31401,31402],{"class":99,"line":8174},[97,31403,2591],{"emptyLinePlaceholder":249},[97,31405,31406,31408,31411,31413,31416],{"class":99,"line":8201},[97,31407,1723],{"class":319},[97,31409,31410],{"class":370}," __name__",[97,31412,3140],{"class":319},[97,31414,31415],{"class":118},"\"__main__\"",[97,31417,3930],{"class":103},[97,31419,31420],{"class":99,"line":8206},[97,31421,31422],{"class":191},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[97,31424,31425,31428,31430,31432,31435,31437,31440,31442,31444],{"class":99,"line":8212},[97,31426,31427],{"class":103},"    device",[97,31429,115],{"class":319},[97,31431,30641],{"class":103},[97,31433,31434],{"class":118},"\"cuda\"",[97,31436,1896],{"class":319},[97,31438,31439],{"class":103}," torch.cuda.is_available() ",[97,31441,1893],{"class":319},[97,31443,30666],{"class":118},[97,31445,329],{"class":103},[97,31447,31448],{"class":99,"line":8224},[97,31449,31450],{"class":191},"    # 如果就是想指定用cpu用下方代码:\n",[97,31452,31453],{"class":99,"line":8236},[97,31454,31455],{"class":191},"    # device=\"cpu\"\n",[97,31457,31458],{"class":99,"line":8248},[97,31459,31460],{"class":191},"    # print(device)\n",[97,31462,31463],{"class":99,"line":9907},[97,31464,2591],{"emptyLinePlaceholder":249},[97,31466,31467],{"class":99,"line":9932},[97,31468,31469],{"class":191},"    # 实例化模型\n",[97,31471,31472],{"class":99,"line":9955},[97,31473,31474],{"class":191},"    # 将模型放到设备中去运行\n",[97,31476,31477,31480,31482],{"class":99,"line":9979},[97,31478,31479],{"class":103},"    model",[97,31481,115],{"class":319},[97,31483,31484],{"class":103},"LeNet().to(device)\n",[97,31486,31487,31490,31493,31495,31497,31499,31501,31503],{"class":99,"line":9984},[97,31488,31489],{"class":370},"    print",[97,31491,31492],{"class":103},"(summary(model,(",[97,31494,537],{"class":370},[97,31496,698],{"class":103},[97,31498,1221],{"class":370},[97,31500,698],{"class":103},[97,31502,1221],{"class":370},[97,31504,31505],{"class":103},")))\n",[24,31507,31508],{},[19,31509],{"alt":92,"src":31510},"\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",[24,31512,31513],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[138,31515,31516],{"start":195},[70,31517,31518],{},"训练",[24,31520,31521],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[24,31523,31524],{},"在训练之前可以将数据展示看一下",[87,31526,31528],{"className":30568,"code":31527,"language":30570,"meta":92,"style":92},"# 建立画图的函数，用于展示数据\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",[94,31529,31530,31535,31540,31552,31564,31577,31582,31594,31599,31611,31616,31628,31632,31636,31657,31669,31674,31695,31706,31710,31715,31733,31744,31749,31760,31765,31776,31780,31785,31800,31813,31818,31823,31836,31849,31862,31867,31871,31876,31896,31913,31933,31946,31959,31969,31984],{"__ignoreMap":92},[97,31531,31532],{"class":99,"line":100},[97,31533,31534],{"class":191},"# 建立画图的函数，用于展示数据\n",[97,31536,31537],{"class":99,"line":195},[97,31538,31539],{"class":191},"# torchvision中包含很多内置的数据集\n",[97,31541,31542,31544,31547,31549],{"class":99,"line":241},[97,31543,30927],{"class":319},[97,31545,31546],{"class":103}," sklearn.externals.array_api_compat.torch ",[97,31548,30582],{"class":319},[97,31550,31551],{"class":103}," squeeze\n",[97,31553,31554,31556,31559,31561],{"class":99,"line":1387},[97,31555,30927],{"class":319},[97,31557,31558],{"class":103}," torchvision.datasets ",[97,31560,30582],{"class":319},[97,31562,31563],{"class":103}," FashionMNIST\n",[97,31565,31566,31568,31571,31574],{"class":99,"line":1393},[97,31567,30582],{"class":319},[97,31569,31570],{"class":103}," numpy ",[97,31572,31573],{"class":319},"as",[97,31575,31576],{"class":103}," np\n",[97,31578,31579],{"class":99,"line":1407},[97,31580,31581],{"class":191},"# 引入处理数据集的包\n",[97,31583,31584,31586,31589,31591],{"class":99,"line":1413},[97,31585,30927],{"class":319},[97,31587,31588],{"class":103}," torchvision ",[97,31590,30582],{"class":319},[97,31592,31593],{"class":103}," transforms\n",[97,31595,31596],{"class":99,"line":1504},[97,31597,31598],{"class":191},"# 从torch库中引入数据处理的包\n",[97,31600,31601,31603,31606,31608],{"class":99,"line":1510},[97,31602,30582],{"class":319},[97,31604,31605],{"class":103}," torch.utils.data ",[97,31607,31573],{"class":319},[97,31609,31610],{"class":103}," Data\n",[97,31612,31613],{"class":99,"line":1522},[97,31614,31615],{"class":191},"# 导入画图的库\n",[97,31617,31618,31620,31623,31625],{"class":99,"line":1804},[97,31619,30582],{"class":319},[97,31621,31622],{"class":103}," matplotlib.pyplot ",[97,31624,31573],{"class":319},[97,31626,31627],{"class":103}," plt\n",[97,31629,31630],{"class":99,"line":1809},[97,31631,2591],{"emptyLinePlaceholder":249},[97,31633,31634],{"class":99,"line":1815},[97,31635,2591],{"emptyLinePlaceholder":249},[97,31637,31638,31641,31643,31646,31649,31651,31654],{"class":99,"line":1820},[97,31639,31640],{"class":103},"train_data",[97,31642,115],{"class":319},[97,31644,31645],{"class":103},"FashionMNIST(",[97,31647,31648],{"class":5407},"root",[97,31650,115],{"class":319},[97,31652,31653],{"class":118},"'.\u002Fdata'",[97,31655,31656],{"class":103},",\n",[97,31658,31659,31662,31664,31667],{"class":99,"line":1834},[97,31660,31661],{"class":5407},"                        train",[97,31663,115],{"class":319},[97,31665,31666],{"class":370},"True",[97,31668,31656],{"class":103},[97,31670,31671],{"class":99,"line":1839},[97,31672,31673],{"class":191},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[97,31675,31676,31679,31681,31684,31687,31689,31692],{"class":99,"line":1845},[97,31677,31678],{"class":5407},"                        transform",[97,31680,115],{"class":319},[97,31682,31683],{"class":103},"transforms.Compose([transforms.Resize(",[97,31685,31686],{"class":5407},"size",[97,31688,115],{"class":319},[97,31690,31691],{"class":370},"224",[97,31693,31694],{"class":103},"),transforms.ToTensor()]),\n",[97,31696,31697,31700,31702,31704],{"class":99,"line":1866},[97,31698,31699],{"class":5407},"                        download",[97,31701,115],{"class":319},[97,31703,31666],{"class":370},[97,31705,329],{"class":103},[97,31707,31708],{"class":99,"line":1871},[97,31709,2591],{"emptyLinePlaceholder":249},[97,31711,31712],{"class":99,"line":1885},[97,31713,31714],{"class":191},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[97,31716,31717,31720,31722,31725,31728,31730],{"class":99,"line":1890},[97,31718,31719],{"class":103},"train_loader",[97,31721,115],{"class":319},[97,31723,31724],{"class":103},"Data.DataLoader(",[97,31726,31727],{"class":5407},"dataset",[97,31729,115],{"class":319},[97,31731,31732],{"class":103},"train_data,\n",[97,31734,31735,31738,31740,31742],{"class":99,"line":1919},[97,31736,31737],{"class":5407},"                             batch_size",[97,31739,115],{"class":319},[97,31741,523],{"class":370},[97,31743,31656],{"class":103},[97,31745,31746],{"class":99,"line":1924},[97,31747,31748],{"class":191},"                             # 数据是否打乱\n",[97,31750,31751,31754,31756,31758],{"class":99,"line":1941},[97,31752,31753],{"class":5407},"                             shuffle",[97,31755,115],{"class":319},[97,31757,31666],{"class":370},[97,31759,31656],{"class":103},[97,31761,31762],{"class":99,"line":1946},[97,31763,31764],{"class":191},"                             # 规定加载数据的进程\n",[97,31766,31767,31770,31772,31774],{"class":99,"line":1951},[97,31768,31769],{"class":5407},"                             num_workers",[97,31771,115],{"class":319},[97,31773,511],{"class":370},[97,31775,329],{"class":103},[97,31777,31778],{"class":99,"line":1956},[97,31779,2591],{"emptyLinePlaceholder":249},[97,31781,31782],{"class":99,"line":1970},[97,31783,31784],{"class":191},"# 获得一个batch的数据\n",[97,31786,31787,31789,31792,31794,31797],{"class":99,"line":1975},[97,31788,3216],{"class":319},[97,31790,31791],{"class":103}," step,(b_x,b_y) ",[97,31793,26233],{"class":319},[97,31795,31796],{"class":370}," enumerate",[97,31798,31799],{"class":103},"(train_loader):\n",[97,31801,31802,31804,31807,31809,31811],{"class":99,"line":2768},[97,31803,3292],{"class":319},[97,31805,31806],{"class":103}," step ",[97,31808,1279],{"class":319},[97,31810,4284],{"class":370},[97,31812,3930],{"class":103},[97,31814,31815],{"class":99,"line":2782},[97,31816,31817],{"class":319},"        break\n",[97,31819,31820],{"class":99,"line":2790},[97,31821,31822],{"class":191},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[97,31824,31825,31828,31830,31833],{"class":99,"line":2795},[97,31826,31827],{"class":103},"batch_x",[97,31829,115],{"class":319},[97,31831,31832],{"class":103},"b_x.squeeze().numpy()  ",[97,31834,31835],{"class":191},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[97,31837,31838,31841,31843,31846],{"class":99,"line":2801},[97,31839,31840],{"class":103},"batch_y",[97,31842,115],{"class":319},[97,31844,31845],{"class":103},"b_y.numpy()   ",[97,31847,31848],{"class":191},"#将张量转换成功numpy数组\n",[97,31850,31851,31854,31856,31859],{"class":99,"line":2807},[97,31852,31853],{"class":103},"class_label",[97,31855,115],{"class":319},[97,31857,31858],{"class":103},"train_data.classes  ",[97,31860,31861],{"class":191},"#训练集标签\n",[97,31863,31864],{"class":99,"line":2812},[97,31865,31866],{"class":191},"# print(class_label)\n",[97,31868,31869],{"class":99,"line":8139},[97,31870,2591],{"emptyLinePlaceholder":249},[97,31872,31873],{"class":99,"line":8163},[97,31874,31875],{"class":191},"# 可视化一个batch的图像\n",[97,31877,31878,31881,31884,31886,31888,31890,31892,31894],{"class":99,"line":8168},[97,31879,31880],{"class":103},"plt.figure(",[97,31882,31883],{"class":5407},"figsize",[97,31885,115],{"class":319},[97,31887,323],{"class":103},[97,31889,818],{"class":370},[97,31891,698],{"class":103},[97,31893,639],{"class":370},[97,31895,30687],{"class":103},[97,31897,31898,31900,31903,31905,31908,31910],{"class":99,"line":8174},[97,31899,3216],{"class":319},[97,31901,31902],{"class":103}," ii ",[97,31904,26233],{"class":319},[97,31906,31907],{"class":103}," np.arange(",[97,31909,7549],{"class":370},[97,31911,31912],{"class":103},"(batch_y)):\n",[97,31914,31915,31918,31920,31922,31924,31927,31929,31931],{"class":99,"line":8201},[97,31916,31917],{"class":103},"    plt.subplot(",[97,31919,613],{"class":370},[97,31921,698],{"class":103},[97,31923,921],{"class":370},[97,31925,31926],{"class":103},",ii ",[97,31928,801],{"class":319},[97,31930,25308],{"class":370},[97,31932,329],{"class":103},[97,31934,31935,31938,31941,31943],{"class":99,"line":8206},[97,31936,31937],{"class":103},"    plt.imshow(batch_x[ii,:,:],",[97,31939,31940],{"class":5407},"cmap",[97,31942,115],{"class":319},[97,31944,31945],{"class":103},"plt.cm.gray)\n",[97,31947,31948,31951,31953,31955,31957],{"class":99,"line":8212},[97,31949,31950],{"class":103},"    plt.title(class_label[batch_y[ii]],",[97,31952,31686],{"class":5407},[97,31954,115],{"class":319},[97,31956,766],{"class":370},[97,31958,329],{"class":103},[97,31960,31961,31964,31967],{"class":99,"line":8224},[97,31962,31963],{"class":103},"    plt.axis(",[97,31965,31966],{"class":118},"\"off\"",[97,31968,329],{"class":103},[97,31970,31971,31974,31977,31979,31982],{"class":99,"line":8236},[97,31972,31973],{"class":103},"    plt.subplots_adjust(",[97,31975,31976],{"class":5407},"wspace",[97,31978,115],{"class":319},[97,31980,31981],{"class":370},"0.05",[97,31983,329],{"class":103},[97,31985,31986],{"class":99,"line":8248},[97,31987,31988],{"class":103},"plt.show()\n",[24,31990,31991],{},"用matplotlib进行展示的过程可以后续再补",[24,31993,31994],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[24,31996,31997],{},"训练次数就是按照批次过整个训练集数据的次数",[24,31999,32000],{},"模型训练：",[87,32002,32004],{"className":30568,"code":32003,"language":30570,"meta":92,"style":92},"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",[94,32005,32006,32013,32020,32024,32036,32042,32053,32063,32073,32083,32093,32098,32110,32120,32124,32128,32133,32144,32157,32168,32185,32196,32235,32251,32263,32274,32279,32290,32306,32317,32328,32339,32346,32350,32355,32360,32364,32369,32379,32400,32404,32408,32413,32418,32423,32443,32447,32452,32462,32466,32471,32480,32485,32490,32495,32505,32509,32513,32518,32523,32533,32538,32548,32553,32562,32567,32576,32581,32590,32594,32599,32609,32613,32617,32622,32637,32665,32680,32684,32689,32694,32703,32708,32717,32722,32731,32736,32745,32750,32759,32764,32773,32778,32791,32796,32806,32811,32821,32827,32833,32839,32845,32856,32862,32882,32888,32899,32905,32911,32917,32923,32929,32935,32941,32961,32967,32983,32989,33003,33009,33024,33030,33039,33045,33054,33060,33066,33075,33081,33092,33098,33117,33123,33134,33140,33160,33176,33182,33196,33202,33208,33219,33225,33231,33241,33247,33258,33264,33274,33279,33285,33334,33381,33386,33392,33411,33417,33437,33443,33449,33459,33464,33470,33486,33531,33537,33543,33549,33560,33566,33572,33578,33596,33610,33619,33628,33637,33646,33652,33658,33666,33671,33677,33688,33694,33714,33720,33726,33732,33749,33755,33761,33767,33773,33779,33806,33830,33836,33842,33848,33859,33870,33876,33893,33916,33939,33945,33950,33959,33969,33975,33980,33986,33999,34005,34016,34027,34046],{"__ignoreMap":92},[97,32007,32008,32010],{"class":99,"line":100},[97,32009,30582],{"class":319},[97,32011,32012],{"class":103}," copy\n",[97,32014,32015,32017],{"class":99,"line":195},[97,32016,30582],{"class":319},[97,32018,32019],{"class":103}," time\n",[97,32021,32022],{"class":99,"line":241},[97,32023,2591],{"emptyLinePlaceholder":249},[97,32025,32026,32028,32031,32033],{"class":99,"line":1387},[97,32027,30582],{"class":319},[97,32029,32030],{"class":103}," pandas ",[97,32032,31573],{"class":319},[97,32034,32035],{"class":103}," pd\n",[97,32037,32038,32040],{"class":99,"line":1393},[97,32039,30582],{"class":319},[97,32041,30585],{"class":103},[97,32043,32044,32046,32048,32050],{"class":99,"line":1407},[97,32045,30927],{"class":319},[97,32047,31605],{"class":103},[97,32049,30582],{"class":319},[97,32051,32052],{"class":103}," Dataset\n",[97,32054,32055,32057,32059,32061],{"class":99,"line":1413},[97,32056,30927],{"class":319},[97,32058,31558],{"class":103},[97,32060,30582],{"class":319},[97,32062,31563],{"class":103},[97,32064,32065,32067,32069,32071],{"class":99,"line":1504},[97,32066,30927],{"class":319},[97,32068,31588],{"class":103},[97,32070,30582],{"class":319},[97,32072,31593],{"class":103},[97,32074,32075,32077,32079,32081],{"class":99,"line":1510},[97,32076,30582],{"class":319},[97,32078,31605],{"class":103},[97,32080,31573],{"class":319},[97,32082,31610],{"class":103},[97,32084,32085,32087,32089,32091],{"class":99,"line":1522},[97,32086,30582],{"class":319},[97,32088,31622],{"class":103},[97,32090,31573],{"class":319},[97,32092,31627],{"class":103},[97,32094,32095],{"class":99,"line":1804},[97,32096,32097],{"class":191},"# 导入模型\n",[97,32099,32100,32102,32105,32107],{"class":99,"line":1809},[97,32101,30927],{"class":319},[97,32103,32104],{"class":103}," model ",[97,32106,30582],{"class":319},[97,32108,32109],{"class":103}," LeNet\n",[97,32111,32112,32114,32116,32118],{"class":99,"line":1815},[97,32113,30927],{"class":319},[97,32115,30930],{"class":103},[97,32117,30582],{"class":319},[97,32119,30935],{"class":103},[97,32121,32122],{"class":99,"line":1820},[97,32123,2591],{"emptyLinePlaceholder":249},[97,32125,32126],{"class":99,"line":1834},[97,32127,2591],{"emptyLinePlaceholder":249},[97,32129,32130],{"class":99,"line":1839},[97,32131,32132],{"class":191},"# 处理训练集与验证集函数--->划分数据集\n",[97,32134,32135,32138,32141],{"class":99,"line":1845},[97,32136,32137],{"class":319},"def",[97,32139,32140],{"class":111}," train_val_data_process",[97,32142,32143],{"class":103},"():\n",[97,32145,32146,32149,32151,32153,32155],{"class":99,"line":1866},[97,32147,32148],{"class":103},"    train_data",[97,32150,115],{"class":319},[97,32152,31645],{"class":103},[97,32154,31653],{"class":118},[97,32156,31656],{"class":103},[97,32158,32159,32162,32164,32166],{"class":99,"line":1871},[97,32160,32161],{"class":5407},"                            train",[97,32163,115],{"class":319},[97,32165,31666],{"class":370},[97,32167,31656],{"class":103},[97,32169,32170,32173,32175,32177,32179,32181,32183],{"class":99,"line":1885},[97,32171,32172],{"class":5407},"                            transform",[97,32174,115],{"class":319},[97,32176,31683],{"class":103},[97,32178,31686],{"class":5407},[97,32180,115],{"class":319},[97,32182,1221],{"class":370},[97,32184,31694],{"class":103},[97,32186,32187,32190,32192,32194],{"class":99,"line":1890},[97,32188,32189],{"class":5407},"                            download",[97,32191,115],{"class":319},[97,32193,31666],{"class":370},[97,32195,329],{"class":103},[97,32197,32198,32201,32203,32206,32209,32211,32214,32216,32218,32221,32223,32225,32228,32230,32232],{"class":99,"line":1919},[97,32199,32200],{"class":103},"    train_data,val_data",[97,32202,115],{"class":319},[97,32204,32205],{"class":103},"Data.random_split(train_data,[",[97,32207,32208],{"class":370},"round",[97,32210,323],{"class":103},[97,32212,32213],{"class":370},"0.8",[97,32215,775],{"class":319},[97,32217,7549],{"class":370},[97,32219,32220],{"class":103},"(train_data)),",[97,32222,32208],{"class":370},[97,32224,323],{"class":103},[97,32226,32227],{"class":370},"0.2",[97,32229,775],{"class":319},[97,32231,7549],{"class":370},[97,32233,32234],{"class":103},"(train_data))])\n",[97,32236,32237,32240,32242,32245,32247,32249],{"class":99,"line":1924},[97,32238,32239],{"class":103},"    train_dataloader ",[97,32241,115],{"class":319},[97,32243,32244],{"class":103}," Data.DataLoader(",[97,32246,31727],{"class":5407},[97,32248,115],{"class":319},[97,32250,31732],{"class":103},[97,32252,32253,32256,32258,32261],{"class":99,"line":1941},[97,32254,32255],{"class":5407},"                                       batch_size",[97,32257,115],{"class":319},[97,32259,32260],{"class":370},"128",[97,32262,31656],{"class":103},[97,32264,32265,32268,32270,32272],{"class":99,"line":1946},[97,32266,32267],{"class":5407},"                                       shuffle",[97,32269,115],{"class":319},[97,32271,31666],{"class":370},[97,32273,31656],{"class":103},[97,32275,32276],{"class":99,"line":1951},[97,32277,32278],{"class":191},"                                       # 规定8个进程\n",[97,32280,32281,32284,32286,32288],{"class":99,"line":1956},[97,32282,32283],{"class":5407},"                                       num_workers",[97,32285,115],{"class":319},[97,32287,715],{"class":370},[97,32289,329],{"class":103},[97,32291,32292,32295,32297,32299,32301,32303],{"class":99,"line":1970},[97,32293,32294],{"class":103},"    val_dataloader",[97,32296,115],{"class":319},[97,32298,31724],{"class":103},[97,32300,31727],{"class":5407},[97,32302,115],{"class":319},[97,32304,32305],{"class":103},"val_data,\n",[97,32307,32308,32311,32313,32315],{"class":99,"line":1975},[97,32309,32310],{"class":5407},"                                   batch_size",[97,32312,115],{"class":319},[97,32314,32260],{"class":370},[97,32316,31656],{"class":103},[97,32318,32319,32322,32324,32326],{"class":99,"line":2768},[97,32320,32321],{"class":5407},"                                   shuffle",[97,32323,115],{"class":319},[97,32325,31666],{"class":370},[97,32327,31656],{"class":103},[97,32329,32330,32333,32335,32337],{"class":99,"line":2782},[97,32331,32332],{"class":5407},"                                   num_workers",[97,32334,115],{"class":319},[97,32336,715],{"class":370},[97,32338,329],{"class":103},[97,32340,32341,32343],{"class":99,"line":2790},[97,32342,4281],{"class":319},[97,32344,32345],{"class":103}," train_dataloader,val_dataloader\n",[97,32347,32348],{"class":99,"line":2795},[97,32349,2591],{"emptyLinePlaceholder":249},[97,32351,32352],{"class":99,"line":2801},[97,32353,32354],{"class":191},"# 验证是否出错\n",[97,32356,32357],{"class":99,"line":2807},[97,32358,32359],{"class":191},"# train_val_data_process()\n",[97,32361,32362],{"class":99,"line":2812},[97,32363,2591],{"emptyLinePlaceholder":249},[97,32365,32366],{"class":99,"line":8139},[97,32367,32368],{"class":191},"# 定义模型训练函数\n",[97,32370,32371,32373,32376],{"class":99,"line":8163},[97,32372,32137],{"class":319},[97,32374,32375],{"class":111}," train_model_process",[97,32377,32378],{"class":103},"(model,train_dataloader,val_dataloader,num_epochs):\n",[97,32380,32381,32383,32385,32387,32389,32391,32393,32395,32398],{"class":99,"line":8168},[97,32382,31427],{"class":103},[97,32384,115],{"class":319},[97,32386,30641],{"class":103},[97,32388,31434],{"class":118},[97,32390,1896],{"class":319},[97,32392,31439],{"class":103},[97,32394,1893],{"class":319},[97,32396,32397],{"class":118}," 'cpu'",[97,32399,329],{"class":103},[97,32401,32402],{"class":99,"line":8174},[97,32403,2591],{"emptyLinePlaceholder":249},[97,32405,32406],{"class":99,"line":8201},[97,32407,2591],{"emptyLinePlaceholder":249},[97,32409,32410],{"class":99,"line":8206},[97,32411,32412],{"class":191},"    # 定义优化器\n",[97,32414,32415],{"class":99,"line":8212},[97,32416,32417],{"class":191},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[97,32419,32420],{"class":99,"line":8224},[97,32421,32422],{"class":191},"    # lr为学习率\n",[97,32424,32425,32428,32430,32433,32436,32438,32441],{"class":99,"line":8236},[97,32426,32427],{"class":103},"    optimizer",[97,32429,115],{"class":319},[97,32431,32432],{"class":103},"torch.optim.Adam(model.parameters(),",[97,32434,32435],{"class":5407},"lr",[97,32437,115],{"class":319},[97,32439,32440],{"class":370},"0.001",[97,32442,329],{"class":103},[97,32444,32445],{"class":99,"line":8248},[97,32446,2591],{"emptyLinePlaceholder":249},[97,32448,32449],{"class":99,"line":9907},[97,32450,32451],{"class":191},"    # 定义损失函数使用交叉熵损失函数\n",[97,32453,32454,32457,32459],{"class":99,"line":9932},[97,32455,32456],{"class":103},"    criterion",[97,32458,115],{"class":319},[97,32460,32461],{"class":103},"nn.CrossEntropyLoss()\n",[97,32463,32464],{"class":99,"line":9955},[97,32465,2591],{"emptyLinePlaceholder":249},[97,32467,32468],{"class":99,"line":9979},[97,32469,32470],{"class":191},"    # 将模型放到GPU中进行训练\n",[97,32472,32473,32475,32477],{"class":99,"line":9984},[97,32474,31479],{"class":103},[97,32476,115],{"class":319},[97,32478,32479],{"class":103},"model.to(device)\n",[97,32481,32482],{"class":99,"line":9989},[97,32483,32484],{"class":191},"    # 复制当前模型的参数\n",[97,32486,32487],{"class":99,"line":9994},[97,32488,32489],{"class":191},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[97,32491,32492],{"class":99,"line":10003},[97,32493,32494],{"class":191},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[97,32496,32497,32500,32502],{"class":99,"line":10008},[97,32498,32499],{"class":103},"    best_model_wts",[97,32501,115],{"class":319},[97,32503,32504],{"class":103},"copy.deepcopy(model.state_dict())\n",[97,32506,32507],{"class":99,"line":10014},[97,32508,2591],{"emptyLinePlaceholder":249},[97,32510,32511],{"class":99,"line":10035},[97,32512,2591],{"emptyLinePlaceholder":249},[97,32514,32515],{"class":99,"line":10041},[97,32516,32517],{"class":191},"    # 初始化参数\n",[97,32519,32520],{"class":99,"line":10055},[97,32521,32522],{"class":191},"    # 最高准确度\n",[97,32524,32525,32528,32530],{"class":99,"line":10061},[97,32526,32527],{"class":103},"    best_acc",[97,32529,115],{"class":319},[97,32531,32532],{"class":370},"0.0\n",[97,32534,32535],{"class":99,"line":10088},[97,32536,32537],{"class":191},"    # 训练集损失列表\n",[97,32539,32540,32543,32545],{"class":99,"line":10097},[97,32541,32542],{"class":103},"    train_loss_all",[97,32544,115],{"class":319},[97,32546,32547],{"class":103},"[]\n",[97,32549,32550],{"class":99,"line":10103},[97,32551,32552],{"class":191},"    # 验证集函数列表\n",[97,32554,32555,32558,32560],{"class":99,"line":10111},[97,32556,32557],{"class":103},"    val_loss_all",[97,32559,115],{"class":319},[97,32561,32547],{"class":103},[97,32563,32564],{"class":99,"line":10116},[97,32565,32566],{"class":191},"    # 训练集准确度列表\n",[97,32568,32569,32572,32574],{"class":99,"line":16794},[97,32570,32571],{"class":103},"    train_acc_all",[97,32573,115],{"class":319},[97,32575,32547],{"class":103},[97,32577,32578],{"class":99,"line":16800},[97,32579,32580],{"class":191},"    # 验证集准确度列表\n",[97,32582,32583,32586,32588],{"class":99,"line":16823},[97,32584,32585],{"class":103},"    val_acc_all",[97,32587,115],{"class":319},[97,32589,32547],{"class":103},[97,32591,32592],{"class":99,"line":16829},[97,32593,2591],{"emptyLinePlaceholder":249},[97,32595,32596],{"class":99,"line":16852},[97,32597,32598],{"class":191},"    # 保存当前时间--->方便看每轮训练的时间\n",[97,32600,32601,32604,32606],{"class":99,"line":16866},[97,32602,32603],{"class":103},"    since",[97,32605,115],{"class":319},[97,32607,32608],{"class":103},"time.time()\n",[97,32610,32611],{"class":99,"line":16886},[97,32612,2591],{"emptyLinePlaceholder":249},[97,32614,32615],{"class":99,"line":16892},[97,32616,2591],{"emptyLinePlaceholder":249},[97,32618,32619],{"class":99,"line":16903},[97,32620,32621],{"class":191},"    # 准备工作完成--->开始训练模型\n",[97,32623,32624,32626,32629,32631,32634],{"class":99,"line":16926},[97,32625,3392],{"class":319},[97,32627,32628],{"class":103}," epoch ",[97,32630,26233],{"class":319},[97,32632,32633],{"class":370}," range",[97,32635,32636],{"class":103},"(num_epochs):\n",[97,32638,32639,32642,32644,32647,32650,32652,32654,32656,32659,32661,32663],{"class":99,"line":16948},[97,32640,32641],{"class":370},"        print",[97,32643,323],{"class":103},[97,32645,32646],{"class":118},"\"Epoch ",[97,32648,32649],{"class":370},"{}",[97,32651,904],{"class":118},[97,32653,32649],{"class":370},[97,32655,571],{"class":118},[97,32657,32658],{"class":103},".format(epoch,num_epochs",[97,32660,852],{"class":319},[97,32662,537],{"class":370},[97,32664,30687],{"class":103},[97,32666,32667,32669,32671,32674,32676,32678],{"class":99,"line":16953},[97,32668,32641],{"class":370},[97,32670,323],{"class":103},[97,32672,32673],{"class":118},"\"-\"",[97,32675,775],{"class":319},[97,32677,766],{"class":370},[97,32679,329],{"class":103},[97,32681,32682],{"class":99,"line":16959},[97,32683,2591],{"emptyLinePlaceholder":249},[97,32685,32686],{"class":99,"line":16973},[97,32687,32688],{"class":191},"        # 初始化参数\n",[97,32690,32691],{"class":99,"line":16986},[97,32692,32693],{"class":191},"        # 训练集损失函数\n",[97,32695,32696,32699,32701],{"class":99,"line":16991},[97,32697,32698],{"class":103},"        train_loss",[97,32700,115],{"class":319},[97,32702,32532],{"class":370},[97,32704,32705],{"class":99,"line":17005},[97,32706,32707],{"class":191},"        # 训练集准确度\n",[97,32709,32710,32713,32715],{"class":99,"line":17010},[97,32711,32712],{"class":103},"        train_corrects",[97,32714,115],{"class":319},[97,32716,3276],{"class":370},[97,32718,32719],{"class":99,"line":17016},[97,32720,32721],{"class":191},"        # 验证集损失函数\n",[97,32723,32724,32727,32729],{"class":99,"line":17021},[97,32725,32726],{"class":103},"        val_loss",[97,32728,115],{"class":319},[97,32730,32532],{"class":370},[97,32732,32733],{"class":99,"line":17035},[97,32734,32735],{"class":191},"        # 验证集准确度\n",[97,32737,32738,32741,32743],{"class":99,"line":17040},[97,32739,32740],{"class":103},"        val_corrects",[97,32742,115],{"class":319},[97,32744,3276],{"class":370},[97,32746,32747],{"class":99,"line":17045},[97,32748,32749],{"class":191},"        # 训练集样本数量\n",[97,32751,32752,32755,32757],{"class":99,"line":17059},[97,32753,32754],{"class":103},"        train_num",[97,32756,115],{"class":319},[97,32758,3276],{"class":370},[97,32760,32761],{"class":99,"line":17071},[97,32762,32763],{"class":191},"        # 验证集样本数量\n",[97,32765,32766,32769,32771],{"class":99,"line":17076},[97,32767,32768],{"class":103},"        val_num",[97,32770,115],{"class":319},[97,32772,3276],{"class":370},[97,32774,32775],{"class":99,"line":17089},[97,32776,32777],{"class":191},"        # 将数据放到设备,并开始训练\n",[97,32779,32780,32782,32784,32786,32788],{"class":99,"line":17094},[97,32781,3594],{"class":319},[97,32783,31791],{"class":103},[97,32785,26233],{"class":319},[97,32787,31796],{"class":370},[97,32789,32790],{"class":103},"(train_dataloader):\n",[97,32792,32793],{"class":99,"line":17099},[97,32794,32795],{"class":191},"            # 将特征放入到训练设备\n",[97,32797,32798,32801,32803],{"class":99,"line":17104},[97,32799,32800],{"class":103},"            b_x",[97,32802,115],{"class":319},[97,32804,32805],{"class":103},"b_x.to(device)\n",[97,32807,32808],{"class":99,"line":17117},[97,32809,32810],{"class":191},"            # 将标签放入到训练设备当中\n",[97,32812,32813,32816,32818],{"class":99,"line":17122},[97,32814,32815],{"class":103},"            b_y",[97,32817,115],{"class":319},[97,32819,32820],{"class":103},"b_y.to(device)\n",[97,32822,32824],{"class":99,"line":32823},98,[97,32825,32826],{"class":191},"            # 设置模型为训练模式\n",[97,32828,32830],{"class":99,"line":32829},99,[97,32831,32832],{"class":103},"            model.train()\n",[97,32834,32836],{"class":99,"line":32835},100,[97,32837,32838],{"class":191},"            # 将数据放到模型当中,开始前向传播\n",[97,32840,32842],{"class":99,"line":32841},101,[97,32843,32844],{"class":191},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[97,32846,32848,32851,32853],{"class":99,"line":32847},102,[97,32849,32850],{"class":103},"            output",[97,32852,115],{"class":319},[97,32854,32855],{"class":103},"model(b_x)\n",[97,32857,32859],{"class":99,"line":32858},103,[97,32860,32861],{"class":191},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[97,32863,32865,32868,32870,32873,32876,32878,32880],{"class":99,"line":32864},104,[97,32866,32867],{"class":103},"            pre_lab",[97,32869,115],{"class":319},[97,32871,32872],{"class":103},"torch.argmax(output,",[97,32874,32875],{"class":5407},"dim",[97,32877,115],{"class":319},[97,32879,537],{"class":370},[97,32881,329],{"class":103},[97,32883,32885],{"class":99,"line":32884},105,[97,32886,32887],{"class":191},"            # 计算每一个batch的损失函数\n",[97,32889,32891,32894,32896],{"class":99,"line":32890},106,[97,32892,32893],{"class":103},"            loss",[97,32895,115],{"class":319},[97,32897,32898],{"class":103},"criterion(output,b_y)\n",[97,32900,32902],{"class":99,"line":32901},107,[97,32903,32904],{"class":191},"            # 将梯度初始化为0\n",[97,32906,32908],{"class":99,"line":32907},108,[97,32909,32910],{"class":103},"            optimizer.zero_grad()\n",[97,32912,32914],{"class":99,"line":32913},109,[97,32915,32916],{"class":191},"            # 梯度置为0后再进行反向传播\n",[97,32918,32920],{"class":99,"line":32919},110,[97,32921,32922],{"class":103},"            loss.backward()\n",[97,32924,32926],{"class":99,"line":32925},111,[97,32927,32928],{"class":191},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[97,32930,32932],{"class":99,"line":32931},112,[97,32933,32934],{"class":103},"            optimizer.step()\n",[97,32936,32938],{"class":99,"line":32937},113,[97,32939,32940],{"class":191},"            # loss.item()指的是batch的平均损失\n",[97,32942,32944,32947,32949,32952,32954,32957,32959],{"class":99,"line":32943},114,[97,32945,32946],{"class":103},"            train_loss",[97,32948,9668],{"class":319},[97,32950,32951],{"class":103},"loss.item()",[97,32953,775],{"class":319},[97,32955,32956],{"class":103},"b_x.size(",[97,32958,511],{"class":370},[97,32960,329],{"class":103},[97,32962,32964],{"class":99,"line":32963},115,[97,32965,32966],{"class":191},"            # 计算每个批次中正确预测的数量\n",[97,32968,32970,32973,32975,32978,32980],{"class":99,"line":32969},116,[97,32971,32972],{"class":103},"            train_corrects",[97,32974,9668],{"class":319},[97,32976,32977],{"class":103},"torch.sum(pre_lab",[97,32979,3140],{"class":319},[97,32981,32982],{"class":103},"b_y.data)\n",[97,32984,32986],{"class":99,"line":32985},117,[97,32987,32988],{"class":191},"            # 计算目前为止一共处理了多少样本\n",[97,32990,32992,32995,32997,32999,33001],{"class":99,"line":32991},118,[97,32993,32994],{"class":103},"            train_num",[97,32996,9668],{"class":319},[97,32998,32956],{"class":103},[97,33000,511],{"class":370},[97,33002,329],{"class":103},[97,33004,33006],{"class":99,"line":33005},119,[97,33007,33008],{"class":191},"        # 验证数据\n",[97,33010,33012,33014,33017,33019,33021],{"class":99,"line":33011},120,[97,33013,3594],{"class":319},[97,33015,33016],{"class":103}," step ,(b_x,b_y) ",[97,33018,26233],{"class":319},[97,33020,31796],{"class":370},[97,33022,33023],{"class":103},"(val_dataloader):\n",[97,33025,33027],{"class":99,"line":33026},121,[97,33028,33029],{"class":191},"            # 将特征放到验证设备当中\n",[97,33031,33033,33035,33037],{"class":99,"line":33032},122,[97,33034,32800],{"class":103},[97,33036,115],{"class":319},[97,33038,32805],{"class":103},[97,33040,33042],{"class":99,"line":33041},123,[97,33043,33044],{"class":191},"            # 将标签放到放到训练设备当中\n",[97,33046,33048,33050,33052],{"class":99,"line":33047},124,[97,33049,32815],{"class":103},[97,33051,115],{"class":319},[97,33053,32820],{"class":103},[97,33055,33057],{"class":99,"line":33056},125,[97,33058,33059],{"class":191},"            # 开启验证模式，设置模型为评估模式\n",[97,33061,33063],{"class":99,"line":33062},126,[97,33064,33065],{"class":103},"            model.eval()\n",[97,33067,33069,33072],{"class":99,"line":33068},127,[97,33070,33071],{"class":319},"            with",[97,33073,33074],{"class":103}," torch.no_grad():\n",[97,33076,33078],{"class":99,"line":33077},128,[97,33079,33080],{"class":191},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[97,33082,33084,33087,33089],{"class":99,"line":33083},129,[97,33085,33086],{"class":103},"                output ",[97,33088,115],{"class":319},[97,33090,33091],{"class":103}," model(b_x)\n",[97,33093,33095],{"class":99,"line":33094},130,[97,33096,33097],{"class":191},"                # 查找每一行中最大值对应的下标\n",[97,33099,33101,33104,33106,33109,33111,33113,33115],{"class":99,"line":33100},131,[97,33102,33103],{"class":103},"                pre_lab ",[97,33105,115],{"class":319},[97,33107,33108],{"class":103}," torch.argmax(output, ",[97,33110,32875],{"class":5407},[97,33112,115],{"class":319},[97,33114,537],{"class":370},[97,33116,329],{"class":103},[97,33118,33120],{"class":99,"line":33119},132,[97,33121,33122],{"class":191},"                # 计算验证集上的当前 batch 损失\n",[97,33124,33126,33129,33131],{"class":99,"line":33125},133,[97,33127,33128],{"class":103},"                val_batch_loss ",[97,33130,115],{"class":319},[97,33132,33133],{"class":103}," criterion(output, b_y)\n",[97,33135,33137],{"class":99,"line":33136},134,[97,33138,33139],{"class":191},"                # 对损失函数进行累加（按样本数加权）\n",[97,33141,33143,33146,33148,33151,33153,33156,33158],{"class":99,"line":33142},135,[97,33144,33145],{"class":103},"                val_loss ",[97,33147,9668],{"class":319},[97,33149,33150],{"class":103}," val_batch_loss.item() ",[97,33152,775],{"class":319},[97,33154,33155],{"class":103}," b_x.size(",[97,33157,511],{"class":370},[97,33159,329],{"class":103},[97,33161,33163,33166,33168,33171,33173],{"class":99,"line":33162},136,[97,33164,33165],{"class":103},"                val_corrects ",[97,33167,9668],{"class":319},[97,33169,33170],{"class":103}," torch.sum(pre_lab ",[97,33172,3140],{"class":319},[97,33174,33175],{"class":103}," b_y.data)\n",[97,33177,33179],{"class":99,"line":33178},137,[97,33180,33181],{"class":191},"                # 当前用于验证的样本数量\n",[97,33183,33185,33188,33190,33192,33194],{"class":99,"line":33184},138,[97,33186,33187],{"class":103},"            val_num ",[97,33189,9668],{"class":319},[97,33191,33155],{"class":103},[97,33193,511],{"class":370},[97,33195,329],{"class":103},[97,33197,33199],{"class":99,"line":33198},139,[97,33200,33201],{"class":191},"        # 计算并保存每一次迭代的loss值和准确率\n",[97,33203,33205],{"class":99,"line":33204},140,[97,33206,33207],{"class":191},"        # 计算并保存训练集的loss值\n",[97,33209,33211,33214,33216],{"class":99,"line":33210},141,[97,33212,33213],{"class":103},"        train_loss_all.append(train_loss",[97,33215,904],{"class":319},[97,33217,33218],{"class":103},"train_num)\n",[97,33220,33222],{"class":99,"line":33221},142,[97,33223,33224],{"class":191},"        # 取双精度\n",[97,33226,33228],{"class":99,"line":33227},143,[97,33229,33230],{"class":191},"        # 计算并保存训练集的准确率\n",[97,33232,33234,33237,33239],{"class":99,"line":33233},144,[97,33235,33236],{"class":103},"        train_acc_all.append(train_corrects.double().item()",[97,33238,904],{"class":319},[97,33240,33218],{"class":103},[97,33242,33244],{"class":99,"line":33243},145,[97,33245,33246],{"class":191},"        # 计算并保存验证集的loss值\n",[97,33248,33250,33253,33255],{"class":99,"line":33249},146,[97,33251,33252],{"class":103},"        val_loss_all.append(val_loss",[97,33254,904],{"class":319},[97,33256,33257],{"class":103},"val_num)\n",[97,33259,33261],{"class":99,"line":33260},147,[97,33262,33263],{"class":191},"        # 计算并保存验证集的准确率\n",[97,33265,33267,33270,33272],{"class":99,"line":33266},148,[97,33268,33269],{"class":103},"        val_acc_all.append(val_corrects.double().item()",[97,33271,904],{"class":319},[97,33273,33257],{"class":103},[97,33275,33277],{"class":99,"line":33276},149,[97,33278,2591],{"emptyLinePlaceholder":249},[97,33280,33282],{"class":99,"line":33281},150,[97,33283,33284],{"class":191},"        # 打印训练一轮的loss值和准确率\n",[97,33286,33288,33290,33292,33294,33296,33299,33301,33304,33306,33309,33311,33313,33315,33317,33320,33322,33324,33327,33329,33331],{"class":99,"line":33287},151,[97,33289,32641],{"class":370},[97,33291,323],{"class":103},[97,33293,3783],{"class":118},[97,33295,32649],{"class":370},[97,33297,33298],{"class":118},"train loss:",[97,33300,1216],{"class":370},[97,33302,33303],{"class":319},":.4f",[97,33305,1265],{"class":370},[97,33307,33308],{"class":118}," train acc:",[97,33310,1216],{"class":370},[97,33312,33303],{"class":319},[97,33314,1265],{"class":370},[97,33316,3783],{"class":118},[97,33318,33319],{"class":103},".format(epoch,train_loss_all[",[97,33321,852],{"class":319},[97,33323,537],{"class":370},[97,33325,33326],{"class":103},"],train_acc_all[",[97,33328,852],{"class":319},[97,33330,537],{"class":370},[97,33332,33333],{"class":103},"]))\n",[97,33335,33337,33339,33341,33343,33345,33348,33350,33352,33354,33357,33359,33361,33363,33365,33368,33370,33372,33375,33377,33379],{"class":99,"line":33336},152,[97,33338,32641],{"class":370},[97,33340,323],{"class":103},[97,33342,3783],{"class":118},[97,33344,32649],{"class":370},[97,33346,33347],{"class":118},"val loss:",[97,33349,1216],{"class":370},[97,33351,33303],{"class":319},[97,33353,1265],{"class":370},[97,33355,33356],{"class":118}," val acc:",[97,33358,1216],{"class":370},[97,33360,33303],{"class":319},[97,33362,1265],{"class":370},[97,33364,3783],{"class":118},[97,33366,33367],{"class":103},".format(epoch,val_loss_all[",[97,33369,852],{"class":319},[97,33371,537],{"class":370},[97,33373,33374],{"class":103},"],val_acc_all[",[97,33376,852],{"class":319},[97,33378,537],{"class":370},[97,33380,33333],{"class":103},[97,33382,33384],{"class":99,"line":33383},153,[97,33385,2591],{"emptyLinePlaceholder":249},[97,33387,33389],{"class":99,"line":33388},154,[97,33390,33391],{"class":191},"        # 判断准确度--->保存最优模型\n",[97,33393,33395,33397,33400,33402,33404,33406,33408],{"class":99,"line":33394},155,[97,33396,2688],{"class":319},[97,33398,33399],{"class":103}," val_acc_all[",[97,33401,852],{"class":319},[97,33403,537],{"class":370},[97,33405,1259],{"class":103},[97,33407,1279],{"class":319},[97,33409,33410],{"class":103},"best_acc:\n",[97,33412,33414],{"class":99,"line":33413},156,[97,33415,33416],{"class":191},"            # 保存当前模型准确度\n",[97,33418,33420,33423,33425,33427,33430,33432,33434],{"class":99,"line":33419},157,[97,33421,33422],{"class":103},"            best_acc:",[97,33424,362],{"class":370},[97,33426,115],{"class":319},[97,33428,33429],{"class":103},"val_acc_all[",[97,33431,852],{"class":319},[97,33433,537],{"class":370},[97,33435,33436],{"class":103},"]\n",[97,33438,33440],{"class":99,"line":33439},158,[97,33441,33442],{"class":191},"            # 保存当前的准确度\n",[97,33444,33446],{"class":99,"line":33445},159,[97,33447,33448],{"class":191},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[97,33450,33452,33455,33457],{"class":99,"line":33451},160,[97,33453,33454],{"class":103},"            best_model_wts",[97,33456,115],{"class":319},[97,33458,32504],{"class":103},[97,33460,33462],{"class":99,"line":33461},161,[97,33463,2591],{"emptyLinePlaceholder":249},[97,33465,33467],{"class":99,"line":33466},162,[97,33468,33469],{"class":191},"        # 计算耗时\n",[97,33471,33473,33476,33478,33481,33483],{"class":99,"line":33472},163,[97,33474,33475],{"class":103},"        time_use",[97,33477,115],{"class":319},[97,33479,33480],{"class":103},"time.time()",[97,33482,852],{"class":319},[97,33484,33485],{"class":103},"since\n",[97,33487,33489,33491,33493,33496,33498,33501,33503,33505,33507,33509,33511,33514,33517,33520,33522,33525,33527,33529],{"class":99,"line":33488},164,[97,33490,32641],{"class":370},[97,33492,323],{"class":103},[97,33494,33495],{"class":118},"'训练和验证耗费的时间",[97,33497,1216],{"class":370},[97,33499,33500],{"class":319},":.0f",[97,33502,1265],{"class":370},[97,33504,864],{"class":118},[97,33506,1216],{"class":370},[97,33508,33500],{"class":319},[97,33510,1265],{"class":370},[97,33512,33513],{"class":118},"s'",[97,33515,33516],{"class":103},".format(time_use",[97,33518,33519],{"class":319},"\u002F\u002F",[97,33521,1227],{"class":370},[97,33523,33524],{"class":103},",time_use",[97,33526,648],{"class":319},[97,33528,1227],{"class":370},[97,33530,30687],{"class":103},[97,33532,33534],{"class":99,"line":33533},165,[97,33535,33536],{"class":191},"    # 选择最优参数\n",[97,33538,33540],{"class":99,"line":33539},166,[97,33541,33542],{"class":191},"    # 加载最高准确率下的模型参数\n",[97,33544,33546],{"class":99,"line":33545},167,[97,33547,33548],{"class":191},"    # model.load_state_dict(best_model_wts)\n",[97,33550,33552,33555,33558],{"class":99,"line":33551},168,[97,33553,33554],{"class":103},"    torch.save(model.state_dict(best_model_wts), ",[97,33556,33557],{"class":118},"'.\u002Fbest_model.pth'",[97,33559,329],{"class":103},[97,33561,33563],{"class":99,"line":33562},169,[97,33564,33565],{"class":191},"    # 或者写成\n",[97,33567,33569],{"class":99,"line":33568},170,[97,33570,33571],{"class":191},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[97,33573,33575],{"class":99,"line":33574},171,[97,33576,33577],{"class":191},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[97,33579,33581,33584,33586,33589,33592,33594],{"class":99,"line":33580},172,[97,33582,33583],{"class":103},"    train_process",[97,33585,115],{"class":319},[97,33587,33588],{"class":103},"pd.DataFrame(",[97,33590,33591],{"class":5407},"data",[97,33593,115],{"class":319},[97,33595,1738],{"class":103},[97,33597,33599,33602,33604,33607],{"class":99,"line":33598},173,[97,33600,33601],{"class":118},"        \"epoch\"",[97,33603,1179],{"class":103},[97,33605,33606],{"class":370},"range",[97,33608,33609],{"class":103},"(num_epochs),\n",[97,33611,33613,33616],{"class":99,"line":33612},174,[97,33614,33615],{"class":118},"        \"train_loss_all\"",[97,33617,33618],{"class":103},":train_loss_all,\n",[97,33620,33622,33625],{"class":99,"line":33621},175,[97,33623,33624],{"class":118},"        \"val_loss_all\"",[97,33626,33627],{"class":103},":val_loss_all,\n",[97,33629,33631,33634],{"class":99,"line":33630},176,[97,33632,33633],{"class":118},"        \"train_acc_all\"",[97,33635,33636],{"class":103},":train_acc_all,\n",[97,33638,33640,33643],{"class":99,"line":33639},177,[97,33641,33642],{"class":118},"        \"val_acc_all\"",[97,33644,33645],{"class":103},":val_acc_all\n",[97,33647,33649],{"class":99,"line":33648},178,[97,33650,33651],{"class":103},"    })\n",[97,33653,33655],{"class":99,"line":33654},179,[97,33656,33657],{"class":191},"    # 返回训练保存的过程\n",[97,33659,33661,33663],{"class":99,"line":33660},180,[97,33662,4281],{"class":319},[97,33664,33665],{"class":103}," train_process\n",[97,33667,33669],{"class":99,"line":33668},181,[97,33670,2591],{"emptyLinePlaceholder":249},[97,33672,33674],{"class":99,"line":33673},182,[97,33675,33676],{"class":191},"# 将loss值和精度按照图片的形式展示出来\n",[97,33678,33680,33682,33685],{"class":99,"line":33679},183,[97,33681,32137],{"class":319},[97,33683,33684],{"class":111}," matplot_acc_loss",[97,33686,33687],{"class":103},"(train_process):\n",[97,33689,33691],{"class":99,"line":33690},184,[97,33692,33693],{"class":191},"    # 设置图的大小\n",[97,33695,33697,33700,33702,33704,33706,33708,33710,33712],{"class":99,"line":33696},185,[97,33698,33699],{"class":103},"    plt.figure(",[97,33701,31883],{"class":5407},[97,33703,115],{"class":319},[97,33705,323],{"class":103},[97,33707,818],{"class":370},[97,33709,698],{"class":103},[97,33711,613],{"class":370},[97,33713,30687],{"class":103},[97,33715,33717],{"class":99,"line":33716},186,[97,33718,33719],{"class":191},"    # 设置图中有几张图\n",[97,33721,33723],{"class":99,"line":33722},187,[97,33724,33725],{"class":191},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[97,33727,33729],{"class":99,"line":33728},188,[97,33730,33731],{"class":191},"    # ①loss图\n",[97,33733,33735,33737,33739,33741,33743,33745,33747],{"class":99,"line":33734},189,[97,33736,31917],{"class":103},[97,33738,537],{"class":370},[97,33740,698],{"class":103},[97,33742,398],{"class":370},[97,33744,698],{"class":103},[97,33746,537],{"class":370},[97,33748,329],{"class":103},[97,33750,33752],{"class":99,"line":33751},190,[97,33753,33754],{"class":191},"    # 补充:\n",[97,33756,33758],{"class":99,"line":33757},191,[97,33759,33760],{"class":191},"    # plt.subplot(nrows, ncols, index)\n",[97,33762,33764],{"class":99,"line":33763},192,[97,33765,33766],{"class":191},"    # nrows：行数\n",[97,33768,33770],{"class":99,"line":33769},193,[97,33771,33772],{"class":191},"    # ncols：列数\n",[97,33774,33776],{"class":99,"line":33775},194,[97,33777,33778],{"class":191},"    # index：目前选中第几个子图（从1开始）\n",[97,33780,33782,33785,33788,33791,33794,33796,33799,33801,33804],{"class":99,"line":33781},195,[97,33783,33784],{"class":103},"    plt.plot(train_process[",[97,33786,33787],{"class":118},"\"epoch\"",[97,33789,33790],{"class":103},"],train_process.train_loss_all,",[97,33792,33793],{"class":118},"'ro-'",[97,33795,698],{"class":103},[97,33797,33798],{"class":5407},"label",[97,33800,115],{"class":319},[97,33802,33803],{"class":118},"'train loss'",[97,33805,329],{"class":103},[97,33807,33809,33811,33813,33816,33819,33821,33823,33825,33828],{"class":99,"line":33808},196,[97,33810,33784],{"class":103},[97,33812,33787],{"class":118},[97,33814,33815],{"class":103},"],train_process.val_loss_all,",[97,33817,33818],{"class":118},"'bs--'",[97,33820,698],{"class":103},[97,33822,33798],{"class":5407},[97,33824,115],{"class":319},[97,33826,33827],{"class":118},"'val loss'",[97,33829,329],{"class":103},[97,33831,33833],{"class":99,"line":33832},197,[97,33834,33835],{"class":191},"    # 添加一个图例\n",[97,33837,33839],{"class":99,"line":33838},198,[97,33840,33841],{"class":103},"    plt.legend()\n",[97,33843,33845],{"class":99,"line":33844},199,[97,33846,33847],{"class":191},"    # 给轴添加标签\n",[97,33849,33851,33854,33857],{"class":99,"line":33850},200,[97,33852,33853],{"class":103},"    plt.xlabel(",[97,33855,33856],{"class":118},"'epoch'",[97,33858,329],{"class":103},[97,33860,33862,33865,33868],{"class":99,"line":33861},201,[97,33863,33864],{"class":103},"    plt.ylabel(",[97,33866,33867],{"class":118},"'loss'",[97,33869,329],{"class":103},[97,33871,33873],{"class":99,"line":33872},202,[97,33874,33875],{"class":191},"    # ②准确度图\n",[97,33877,33879,33881,33883,33885,33887,33889,33891],{"class":99,"line":33878},203,[97,33880,31917],{"class":103},[97,33882,537],{"class":370},[97,33884,698],{"class":103},[97,33886,398],{"class":370},[97,33888,698],{"class":103},[97,33890,398],{"class":370},[97,33892,329],{"class":103},[97,33894,33896,33898,33900,33903,33905,33907,33909,33911,33914],{"class":99,"line":33895},204,[97,33897,33784],{"class":103},[97,33899,33787],{"class":118},[97,33901,33902],{"class":103},"],train_process.train_acc_all,",[97,33904,33793],{"class":118},[97,33906,698],{"class":103},[97,33908,33798],{"class":5407},[97,33910,115],{"class":319},[97,33912,33913],{"class":118},"'train acc'",[97,33915,329],{"class":103},[97,33917,33919,33921,33923,33926,33928,33930,33932,33934,33937],{"class":99,"line":33918},205,[97,33920,33784],{"class":103},[97,33922,33787],{"class":118},[97,33924,33925],{"class":103},"],train_process.val_acc_all,",[97,33927,33818],{"class":118},[97,33929,698],{"class":103},[97,33931,33798],{"class":5407},[97,33933,115],{"class":319},[97,33935,33936],{"class":118},"'val acc'",[97,33938,329],{"class":103},[97,33940,33942],{"class":99,"line":33941},206,[97,33943,33944],{"class":191},"    # 添加图例\n",[97,33946,33948],{"class":99,"line":33947},207,[97,33949,33841],{"class":103},[97,33951,33953,33955,33957],{"class":99,"line":33952},208,[97,33954,33853],{"class":103},[97,33956,33787],{"class":118},[97,33958,329],{"class":103},[97,33960,33962,33964,33967],{"class":99,"line":33961},209,[97,33963,33864],{"class":103},[97,33965,33966],{"class":118},"\"acc\"",[97,33968,329],{"class":103},[97,33970,33972],{"class":99,"line":33971},210,[97,33973,33974],{"class":103},"    plt.show()\n",[97,33976,33978],{"class":99,"line":33977},211,[97,33979,2591],{"emptyLinePlaceholder":249},[97,33981,33983],{"class":99,"line":33982},212,[97,33984,33985],{"class":191},"# 正式开始训练:\n",[97,33987,33989,33991,33993,33995,33997],{"class":99,"line":33988},213,[97,33990,1723],{"class":319},[97,33992,31410],{"class":370},[97,33994,3140],{"class":319},[97,33996,31415],{"class":118},[97,33998,3930],{"class":103},[97,34000,34002],{"class":99,"line":34001},214,[97,34003,34004],{"class":191},"    # 将模型实例化\n",[97,34006,34008,34011,34013],{"class":99,"line":34007},215,[97,34009,34010],{"class":103},"    LeNet",[97,34012,115],{"class":319},[97,34014,34015],{"class":103},"LeNet()\n",[97,34017,34019,34022,34024],{"class":99,"line":34018},216,[97,34020,34021],{"class":103},"    train_dataloader,val_dataloader",[97,34023,115],{"class":319},[97,34025,34026],{"class":103},"train_val_data_process()\n",[97,34028,34030,34032,34034,34037,34040,34042,34044],{"class":99,"line":34029},217,[97,34031,33583],{"class":103},[97,34033,115],{"class":319},[97,34035,34036],{"class":103},"train_model_process(LeNet,train_dataloader,val_dataloader,",[97,34038,34039],{"class":5407},"num_epochs",[97,34041,115],{"class":319},[97,34043,1020],{"class":370},[97,34045,329],{"class":103},[97,34047,34049],{"class":99,"line":34048},218,[97,34050,34051],{"class":103},"    matplot_acc_loss(train_process)\n",[24,34053,34054],{},"画图的补充点学习：",[24,34056,34057],{},[19,34058],{"alt":92,"src":34059},"\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",[138,34061,34062],{"start":241},[70,34063,34064],{},"测试",[87,34066,34068],{"className":30568,"code":34067,"language":30570,"meta":92,"style":92},"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",[94,34069,34070,34076,34086,34098,34108,34113,34123,34133,34137,34142,34151,34168,34180,34197,34208,34224,34229,34240,34251,34262,34269,34273,34278,34288,34293,34310,34318,34322,34327,34336,34345,34349,34354,34359,34364,34371,34376,34388,34398,34408,34413,34417,34422,34431,34436,34452,34457,34462,34467,34481,34486,34500,34504,34509,34524,34529,34541,34545,34550,34562,34567,34575,34580,34585,34595,34600,34609,34614,34619,34623,34628,34633,34649,34657,34662,34667,34726,34732,34737,34748,34756,34764,34768,34773,34777,34782,34790,34795,34811,34816,34826,34836],{"__ignoreMap":92},[97,34071,34072,34074],{"class":99,"line":100},[97,34073,30582],{"class":319},[97,34075,30585],{"class":103},[97,34077,34078,34080,34082,34084],{"class":99,"line":195},[97,34079,30582],{"class":319},[97,34081,31605],{"class":103},[97,34083,31573],{"class":319},[97,34085,31610],{"class":103},[97,34087,34088,34090,34093,34095],{"class":99,"line":241},[97,34089,30927],{"class":319},[97,34091,34092],{"class":103}," jupyter_client.consoleapp ",[97,34094,30582],{"class":319},[97,34096,34097],{"class":103}," classes\n",[97,34099,34100,34102,34104,34106],{"class":99,"line":1387},[97,34101,30927],{"class":319},[97,34103,31588],{"class":103},[97,34105,30582],{"class":319},[97,34107,31593],{"class":103},[97,34109,34110],{"class":99,"line":1393},[97,34111,34112],{"class":191},"# 导入数据集\n",[97,34114,34115,34117,34119,34121],{"class":99,"line":1407},[97,34116,30927],{"class":319},[97,34118,31558],{"class":103},[97,34120,30582],{"class":319},[97,34122,31563],{"class":103},[97,34124,34125,34127,34129,34131],{"class":99,"line":1413},[97,34126,30927],{"class":319},[97,34128,32104],{"class":103},[97,34130,30582],{"class":319},[97,34132,32109],{"class":103},[97,34134,34135],{"class":99,"line":1504},[97,34136,2591],{"emptyLinePlaceholder":249},[97,34138,34139],{"class":99,"line":1510},[97,34140,34141],{"class":191},"# 测试数据处理\n",[97,34143,34144,34146,34149],{"class":99,"line":1522},[97,34145,32137],{"class":319},[97,34147,34148],{"class":111}," test_data_process",[97,34150,32143],{"class":103},[97,34152,34153,34156,34158,34160,34162,34164,34166],{"class":99,"line":1804},[97,34154,34155],{"class":103},"    test_data",[97,34157,115],{"class":319},[97,34159,31645],{"class":103},[97,34161,31648],{"class":5407},[97,34163,115],{"class":319},[97,34165,31653],{"class":118},[97,34167,31656],{"class":103},[97,34169,34170,34173,34175,34178],{"class":99,"line":1809},[97,34171,34172],{"class":5407},"                           train",[97,34174,115],{"class":319},[97,34176,34177],{"class":370},"False",[97,34179,31656],{"class":103},[97,34181,34182,34185,34187,34189,34191,34193,34195],{"class":99,"line":1815},[97,34183,34184],{"class":5407},"                           transform",[97,34186,115],{"class":319},[97,34188,31683],{"class":103},[97,34190,31686],{"class":5407},[97,34192,115],{"class":319},[97,34194,1221],{"class":370},[97,34196,31694],{"class":103},[97,34198,34199,34202,34204,34206],{"class":99,"line":1820},[97,34200,34201],{"class":5407},"                           download",[97,34203,115],{"class":319},[97,34205,31666],{"class":370},[97,34207,329],{"class":103},[97,34209,34210,34213,34215,34217,34219,34221],{"class":99,"line":1834},[97,34211,34212],{"class":103},"    test_dataloader",[97,34214,115],{"class":319},[97,34216,31724],{"class":103},[97,34218,31727],{"class":5407},[97,34220,115],{"class":319},[97,34222,34223],{"class":103},"test_data,\n",[97,34225,34226],{"class":99,"line":1839},[97,34227,34228],{"class":191},"                                    # 这里是一张一张进行测试\n",[97,34230,34231,34234,34236,34238],{"class":99,"line":1845},[97,34232,34233],{"class":5407},"                                    batch_size",[97,34235,115],{"class":319},[97,34237,537],{"class":370},[97,34239,31656],{"class":103},[97,34241,34242,34245,34247,34249],{"class":99,"line":1866},[97,34243,34244],{"class":5407},"                                    shuffle",[97,34246,115],{"class":319},[97,34248,31666],{"class":370},[97,34250,31656],{"class":103},[97,34252,34253,34256,34258,34260],{"class":99,"line":1871},[97,34254,34255],{"class":5407},"                                    num_workers",[97,34257,115],{"class":319},[97,34259,511],{"class":370},[97,34261,329],{"class":103},[97,34263,34264,34266],{"class":99,"line":1885},[97,34265,4281],{"class":319},[97,34267,34268],{"class":103}," test_dataloader\n",[97,34270,34271],{"class":99,"line":1890},[97,34272,2591],{"emptyLinePlaceholder":249},[97,34274,34275],{"class":99,"line":1919},[97,34276,34277],{"class":191},"# 定义模型测试函数\n",[97,34279,34280,34282,34285],{"class":99,"line":1924},[97,34281,32137],{"class":319},[97,34283,34284],{"class":111}," test_model_process",[97,34286,34287],{"class":103},"(model,test_dataloader):\n",[97,34289,34290],{"class":99,"line":1941},[97,34291,34292],{"class":191},"    # 将模型放到设备当中，先进行判断\n",[97,34294,34295,34297,34299,34301,34303,34305,34307],{"class":99,"line":1946},[97,34296,31427],{"class":103},[97,34298,115],{"class":319},[97,34300,31434],{"class":118},[97,34302,1896],{"class":319},[97,34304,31439],{"class":103},[97,34306,1893],{"class":319},[97,34308,34309],{"class":118}," \"cpu\"\n",[97,34311,34312,34314,34316],{"class":99,"line":1951},[97,34313,31479],{"class":103},[97,34315,115],{"class":319},[97,34317,32479],{"class":103},[97,34319,34320],{"class":99,"line":1956},[97,34321,2591],{"emptyLinePlaceholder":249},[97,34323,34324],{"class":99,"line":1970},[97,34325,34326],{"class":191},"    # 设置初始化参数\n",[97,34328,34329,34332,34334],{"class":99,"line":1975},[97,34330,34331],{"class":103},"    test_corrects",[97,34333,115],{"class":319},[97,34335,32532],{"class":370},[97,34337,34338,34341,34343],{"class":99,"line":2768},[97,34339,34340],{"class":103},"    test_num",[97,34342,115],{"class":319},[97,34344,3276],{"class":370},[97,34346,34347],{"class":99,"line":2782},[97,34348,2591],{"emptyLinePlaceholder":249},[97,34350,34351],{"class":99,"line":2790},[97,34352,34353],{"class":191},"    # 进行模型测试\n",[97,34355,34356],{"class":99,"line":2795},[97,34357,34358],{"class":191},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[97,34360,34361],{"class":99,"line":2801},[97,34362,34363],{"class":191},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[97,34365,34366,34369],{"class":99,"line":2807},[97,34367,34368],{"class":319},"    with",[97,34370,33074],{"class":103},[97,34372,34373],{"class":99,"line":2812},[97,34374,34375],{"class":191},"        # 从数据中进行\n",[97,34377,34378,34380,34383,34385],{"class":99,"line":8139},[97,34379,3594],{"class":319},[97,34381,34382],{"class":103}," test_data_x,test_data_y ",[97,34384,26233],{"class":319},[97,34386,34387],{"class":103}," test_dataloader:\n",[97,34389,34390,34393,34395],{"class":99,"line":8163},[97,34391,34392],{"class":103},"            test_data_x",[97,34394,115],{"class":319},[97,34396,34397],{"class":103},"test_data_x.to(device)\n",[97,34399,34400,34403,34405],{"class":99,"line":8168},[97,34401,34402],{"class":103},"            test_data_y",[97,34404,115],{"class":319},[97,34406,34407],{"class":103},"test_data_y.to(device)\n",[97,34409,34410],{"class":99,"line":8174},[97,34411,34412],{"class":191},"            # 设置为验证模式\n",[97,34414,34415],{"class":99,"line":8201},[97,34416,33065],{"class":103},[97,34418,34419],{"class":99,"line":8206},[97,34420,34421],{"class":191},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[97,34423,34424,34426,34428],{"class":99,"line":8212},[97,34425,32850],{"class":103},[97,34427,115],{"class":319},[97,34429,34430],{"class":103},"model(test_data_x)\n",[97,34432,34433],{"class":99,"line":8224},[97,34434,34435],{"class":191},"            # 查找每一行中最大值对应的下标\n",[97,34437,34438,34440,34442,34444,34446,34448,34450],{"class":99,"line":8236},[97,34439,32867],{"class":103},[97,34441,115],{"class":319},[97,34443,32872],{"class":103},[97,34445,32875],{"class":5407},[97,34447,115],{"class":319},[97,34449,537],{"class":370},[97,34451,329],{"class":103},[97,34453,34454],{"class":99,"line":8248},[97,34455,34456],{"class":191},"            # 计算正确率\n",[97,34458,34459],{"class":99,"line":9907},[97,34460,34461],{"class":191},"            # .data表示是一个不带梯度信息的tensor\n",[97,34463,34464],{"class":99,"line":9932},[97,34465,34466],{"class":191},"            # 如果预测正确，则准确度test_corrects加1\n",[97,34468,34469,34472,34474,34476,34478],{"class":99,"line":9955},[97,34470,34471],{"class":103},"            test_corrects",[97,34473,9668],{"class":319},[97,34475,32977],{"class":103},[97,34477,3140],{"class":319},[97,34479,34480],{"class":103},"test_data_y.data)\n",[97,34482,34483],{"class":99,"line":9979},[97,34484,34485],{"class":191},"            # 将所有的测试样本进行累计\n",[97,34487,34488,34491,34493,34496,34498],{"class":99,"line":9984},[97,34489,34490],{"class":103},"            test_num",[97,34492,9668],{"class":319},[97,34494,34495],{"class":103},"test_data_x.size(",[97,34497,511],{"class":370},[97,34499,329],{"class":103},[97,34501,34502],{"class":99,"line":9989},[97,34503,2591],{"emptyLinePlaceholder":249},[97,34505,34506],{"class":99,"line":9994},[97,34507,34508],{"class":191},"        # 计算准确度\n",[97,34510,34511,34514,34516,34519,34521],{"class":99,"line":10003},[97,34512,34513],{"class":103},"        test_acc",[97,34515,115],{"class":319},[97,34517,34518],{"class":103},"test_corrects.double().item()",[97,34520,904],{"class":319},[97,34522,34523],{"class":103},"test_num\n",[97,34525,34526],{"class":99,"line":10008},[97,34527,34528],{"class":191},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[97,34530,34531,34533,34535,34538],{"class":99,"line":10014},[97,34532,32641],{"class":370},[97,34534,323],{"class":103},[97,34536,34537],{"class":118},"\"测试的准确率：\"",[97,34539,34540],{"class":103},",test_acc)\n",[97,34542,34543],{"class":99,"line":10035},[97,34544,2591],{"emptyLinePlaceholder":249},[97,34546,34547],{"class":99,"line":10041},[97,34548,34549],{"class":191},"# 实现模型的测试功能\n",[97,34551,34552,34554,34556,34558,34560],{"class":99,"line":10055},[97,34553,1723],{"class":319},[97,34555,31410],{"class":370},[97,34557,3140],{"class":319},[97,34559,31415],{"class":118},[97,34561,3930],{"class":103},[97,34563,34564],{"class":99,"line":10061},[97,34565,34566],{"class":191},"    # 加载模型\n",[97,34568,34569,34571,34573],{"class":99,"line":10088},[97,34570,31479],{"class":103},[97,34572,115],{"class":319},[97,34574,34015],{"class":103},[97,34576,34577],{"class":99,"line":10097},[97,34578,34579],{"class":191},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[97,34581,34582],{"class":99,"line":10103},[97,34583,34584],{"class":191},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[97,34586,34587,34590,34593],{"class":99,"line":10111},[97,34588,34589],{"class":103},"    model.load_state_dict(torch.load(",[97,34591,34592],{"class":118},"'best_model.pth'",[97,34594,30687],{"class":103},[97,34596,34597],{"class":99,"line":10116},[97,34598,34599],{"class":191},"    # 数据加载\n",[97,34601,34602,34604,34606],{"class":99,"line":16794},[97,34603,34212],{"class":103},[97,34605,115],{"class":319},[97,34607,34608],{"class":103},"test_data_process()\n",[97,34610,34611],{"class":99,"line":16800},[97,34612,34613],{"class":191},"    # 加载模型测试的函数\n",[97,34615,34616],{"class":99,"line":16823},[97,34617,34618],{"class":103},"    test_model_process(model,test_dataloader)\n",[97,34620,34621],{"class":99,"line":16829},[97,34622,2591],{"emptyLinePlaceholder":249},[97,34624,34625],{"class":99,"line":16852},[97,34626,34627],{"class":191},"    # 验证集推理实现：\n",[97,34629,34630],{"class":99,"line":16866},[97,34631,34632],{"class":191},"    # 加载数据加载的更详细一些\n",[97,34634,34635,34637,34639,34641,34643,34645,34647],{"class":99,"line":16886},[97,34636,31427],{"class":103},[97,34638,115],{"class":319},[97,34640,31434],{"class":118},[97,34642,1896],{"class":319},[97,34644,31439],{"class":103},[97,34646,1893],{"class":319},[97,34648,34309],{"class":118},[97,34650,34651,34653,34655],{"class":99,"line":16892},[97,34652,31479],{"class":103},[97,34654,115],{"class":319},[97,34656,32479],{"class":103},[97,34658,34659],{"class":99,"line":16903},[97,34660,34661],{"class":191},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[97,34663,34664],{"class":99,"line":16926},[97,34665,34666],{"class":191},"    # 顺序不可改变\n",[97,34668,34669,34672,34674,34676,34679,34681,34684,34686,34689,34691,34694,34696,34699,34701,34704,34706,34709,34711,34714,34716,34719,34721,34724],{"class":99,"line":16948},[97,34670,34671],{"class":103},"    classes",[97,34673,115],{"class":319},[97,34675,1210],{"class":103},[97,34677,34678],{"class":118},"'T-shirt\u002Ftop'",[97,34680,698],{"class":103},[97,34682,34683],{"class":118},"'Trouser'",[97,34685,698],{"class":103},[97,34687,34688],{"class":118},"'Pullover'",[97,34690,698],{"class":103},[97,34692,34693],{"class":118},"'Dress'",[97,34695,698],{"class":103},[97,34697,34698],{"class":118},"'Coat'",[97,34700,698],{"class":103},[97,34702,34703],{"class":118},"'Sandal'",[97,34705,698],{"class":103},[97,34707,34708],{"class":118},"'Shirt'",[97,34710,698],{"class":103},[97,34712,34713],{"class":118},"'Sneaker'",[97,34715,698],{"class":103},[97,34717,34718],{"class":118},"'Bag'",[97,34720,698],{"class":103},[97,34722,34723],{"class":118},"'Ankle boot'",[97,34725,33436],{"class":103},[97,34727,34728,34730],{"class":99,"line":16953},[97,34729,34368],{"class":319},[97,34731,33074],{"class":103},[97,34733,34734],{"class":99,"line":16959},[97,34735,34736],{"class":191},"        # 将数据和标签都放到设备当中\n",[97,34738,34739,34741,34744,34746],{"class":99,"line":16973},[97,34740,3594],{"class":319},[97,34742,34743],{"class":103}," b_x,b_y ",[97,34745,26233],{"class":319},[97,34747,34387],{"class":103},[97,34749,34750,34752,34754],{"class":99,"line":16986},[97,34751,32800],{"class":103},[97,34753,115],{"class":319},[97,34755,32805],{"class":103},[97,34757,34758,34760,34762],{"class":99,"line":16991},[97,34759,32815],{"class":103},[97,34761,115],{"class":319},[97,34763,32820],{"class":103},[97,34765,34766],{"class":99,"line":17005},[97,34767,2591],{"emptyLinePlaceholder":249},[97,34769,34770],{"class":99,"line":17010},[97,34771,34772],{"class":191},"            # 设置模型为验证模式\n",[97,34774,34775],{"class":99,"line":17016},[97,34776,33065],{"class":103},[97,34778,34779],{"class":99,"line":17021},[97,34780,34781],{"class":191},"            # 模型推理结果\n",[97,34783,34784,34786,34788],{"class":99,"line":17035},[97,34785,32850],{"class":103},[97,34787,115],{"class":319},[97,34789,32855],{"class":103},[97,34791,34792],{"class":99,"line":17040},[97,34793,34794],{"class":191},"            # 获取最大下标，最大下标就是类别号\n",[97,34796,34797,34799,34801,34803,34805,34807,34809],{"class":99,"line":17045},[97,34798,32867],{"class":103},[97,34800,115],{"class":319},[97,34802,32872],{"class":103},[97,34804,32875],{"class":5407},[97,34806,115],{"class":319},[97,34808,537],{"class":370},[97,34810,329],{"class":103},[97,34812,34813],{"class":99,"line":17059},[97,34814,34815],{"class":191},"            # 取出张量中的数值\n",[97,34817,34818,34821,34823],{"class":99,"line":17071},[97,34819,34820],{"class":103},"            result",[97,34822,115],{"class":319},[97,34824,34825],{"class":103},"pre_lab.item()\n",[97,34827,34828,34831,34833],{"class":99,"line":17076},[97,34829,34830],{"class":103},"            label",[97,34832,115],{"class":319},[97,34834,34835],{"class":103},"b_y.item()\n",[97,34837,34838,34841,34843,34846,34849,34852,34854,34857],{"class":99,"line":17089},[97,34839,34840],{"class":370},"            print",[97,34842,323],{"class":103},[97,34844,34845],{"class":118},"\"预测值：\"",[97,34847,34848],{"class":103},",classes[result],",[97,34850,34851],{"class":118},"\"------\"",[97,34853,698],{"class":103},[97,34855,34856],{"class":118},"\"真实值：\"",[97,34858,34859],{"class":103},",classes[label])\n",[24,34861,34862],{},"（2）AlexNet",[138,34864,34865],{},[70,34866,34867],{},"神经网络构建",[87,34869,34871],{"className":30568,"code":34870,"language":30570,"meta":92,"style":92},"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",[94,34872,34873,34879,34889,34899,34911,34915,34932,34940,34955,34967,35009,35036,35079,35105,35149,35192,35235,35262,35266,35276,35281,35309,35328,35347,35351,35356,35364,35379,35389,35403,35413,35428,35443,35458,35469,35473,35478,35488,35503,35508,35522,35537,35549,35554,35565,35570,35576,35581,35593,35613,35618,35627],{"__ignoreMap":92},[97,34874,34875,34877],{"class":99,"line":100},[97,34876,30582],{"class":319},[97,34878,30585],{"class":103},[97,34880,34881,34883,34885,34887],{"class":99,"line":195},[97,34882,30927],{"class":319},[97,34884,30930],{"class":103},[97,34886,30582],{"class":319},[97,34888,30935],{"class":103},[97,34890,34891,34893,34895,34897],{"class":99,"line":241},[97,34892,30927],{"class":319},[97,34894,30947],{"class":103},[97,34896,30582],{"class":319},[97,34898,30952],{"class":103},[97,34900,34901,34903,34906,34908],{"class":99,"line":1387},[97,34902,30582],{"class":319},[97,34904,34905],{"class":103}," torch.nn.functional ",[97,34907,31573],{"class":319},[97,34909,34910],{"class":103}," F\n",[97,34912,34913],{"class":99,"line":1393},[97,34914,2591],{"emptyLinePlaceholder":249},[97,34916,34917,34919,34922,34924,34926,34928,34930],{"class":99,"line":1407},[97,34918,14885],{"class":319},[97,34920,34921],{"class":111}," AlexNet",[97,34923,323],{"class":103},[97,34925,30968],{"class":111},[97,34927,878],{"class":103},[97,34929,30973],{"class":111},[97,34931,30976],{"class":103},[97,34933,34934,34936,34938],{"class":99,"line":1413},[97,34935,30991],{"class":319},[97,34937,30994],{"class":370},[97,34939,30997],{"class":103},[97,34941,34942,34944,34947,34949,34951,34953],{"class":99,"line":1504},[97,34943,31007],{"class":370},[97,34945,34946],{"class":103},"(AlexNet,",[97,34948,31013],{"class":370},[97,34950,31016],{"class":103},[97,34952,31019],{"class":370},[97,34954,2167],{"class":103},[97,34956,34957,34959,34962,34964],{"class":99,"line":1510},[97,34958,31035],{"class":370},[97,34960,34961],{"class":103},".ReLu",[97,34963,115],{"class":319},[97,34965,34966],{"class":103},"nn.ReLU()\n",[97,34968,34969,34971,34973,34975,34977,34979,34981,34983,34985,34987,34989,34991,34993,34995,34997,34999,35001,35003,35005,35007],{"class":99,"line":1522},[97,34970,31035],{"class":370},[97,34972,31038],{"class":103},[97,34974,115],{"class":319},[97,34976,31043],{"class":103},[97,34978,31046],{"class":5407},[97,34980,115],{"class":319},[97,34982,537],{"class":370},[97,34984,698],{"class":103},[97,34986,31055],{"class":5407},[97,34988,115],{"class":319},[97,34990,529],{"class":370},[97,34992,698],{"class":103},[97,34994,31064],{"class":5407},[97,34996,115],{"class":319},[97,34998,792],{"class":370},[97,35000,698],{"class":103},[97,35002,31119],{"class":5407},[97,35004,115],{"class":319},[97,35006,613],{"class":370},[97,35008,329],{"class":103},[97,35010,35011,35013,35015,35017,35020,35022,35024,35026,35028,35030,35032,35034],{"class":99,"line":1804},[97,35012,31035],{"class":370},[97,35014,31103],{"class":103},[97,35016,115],{"class":319},[97,35018,35019],{"class":103},"nn.MaxPool2d(",[97,35021,31064],{"class":5407},[97,35023,115],{"class":319},[97,35025,392],{"class":370},[97,35027,698],{"class":103},[97,35029,31119],{"class":5407},[97,35031,115],{"class":319},[97,35033,398],{"class":370},[97,35035,329],{"class":103},[97,35037,35038,35040,35042,35044,35046,35048,35050,35052,35054,35056,35058,35061,35063,35065,35067,35069,35071,35073,35075,35077],{"class":99,"line":1809},[97,35039,31035],{"class":370},[97,35041,31132],{"class":103},[97,35043,115],{"class":319},[97,35045,31043],{"class":103},[97,35047,31046],{"class":5407},[97,35049,115],{"class":319},[97,35051,529],{"class":370},[97,35053,698],{"class":103},[97,35055,31055],{"class":5407},[97,35057,115],{"class":319},[97,35059,35060],{"class":370},"256",[97,35062,698],{"class":103},[97,35064,31064],{"class":5407},[97,35066,115],{"class":319},[97,35068,639],{"class":370},[97,35070,698],{"class":103},[97,35072,31073],{"class":5407},[97,35074,115],{"class":319},[97,35076,398],{"class":370},[97,35078,329],{"class":103},[97,35080,35081,35083,35085,35087,35089,35091,35093,35095,35097,35099,35101,35103],{"class":99,"line":1815},[97,35082,31035],{"class":370},[97,35084,31167],{"class":103},[97,35086,115],{"class":319},[97,35088,35019],{"class":103},[97,35090,31064],{"class":5407},[97,35092,115],{"class":319},[97,35094,392],{"class":370},[97,35096,698],{"class":103},[97,35098,31119],{"class":5407},[97,35100,115],{"class":319},[97,35102,398],{"class":370},[97,35104,329],{"class":103},[97,35106,35107,35109,35112,35114,35116,35118,35120,35122,35124,35126,35128,35131,35133,35135,35137,35139,35141,35143,35145,35147],{"class":99,"line":1820},[97,35108,31035],{"class":370},[97,35110,35111],{"class":103},".c5",[97,35113,115],{"class":319},[97,35115,31043],{"class":103},[97,35117,31046],{"class":5407},[97,35119,115],{"class":319},[97,35121,35060],{"class":370},[97,35123,698],{"class":103},[97,35125,31055],{"class":5407},[97,35127,115],{"class":319},[97,35129,35130],{"class":370},"384",[97,35132,698],{"class":103},[97,35134,31064],{"class":5407},[97,35136,115],{"class":319},[97,35138,392],{"class":370},[97,35140,698],{"class":103},[97,35142,31073],{"class":5407},[97,35144,115],{"class":319},[97,35146,537],{"class":370},[97,35148,329],{"class":103},[97,35150,35151,35153,35156,35158,35160,35162,35164,35166,35168,35170,35172,35174,35176,35178,35180,35182,35184,35186,35188,35190],{"class":99,"line":1834},[97,35152,31035],{"class":370},[97,35154,35155],{"class":103},".c6",[97,35157,115],{"class":319},[97,35159,31043],{"class":103},[97,35161,31046],{"class":5407},[97,35163,115],{"class":319},[97,35165,35130],{"class":370},[97,35167,698],{"class":103},[97,35169,31055],{"class":5407},[97,35171,115],{"class":319},[97,35173,35130],{"class":370},[97,35175,698],{"class":103},[97,35177,31064],{"class":5407},[97,35179,115],{"class":319},[97,35181,392],{"class":370},[97,35183,698],{"class":103},[97,35185,31073],{"class":5407},[97,35187,115],{"class":319},[97,35189,537],{"class":370},[97,35191,329],{"class":103},[97,35193,35194,35196,35199,35201,35203,35205,35207,35209,35211,35213,35215,35217,35219,35221,35223,35225,35227,35229,35231,35233],{"class":99,"line":1839},[97,35195,31035],{"class":370},[97,35197,35198],{"class":103},".c7",[97,35200,115],{"class":319},[97,35202,31043],{"class":103},[97,35204,31046],{"class":5407},[97,35206,115],{"class":319},[97,35208,35130],{"class":370},[97,35210,698],{"class":103},[97,35212,31055],{"class":5407},[97,35214,115],{"class":319},[97,35216,35060],{"class":370},[97,35218,698],{"class":103},[97,35220,31064],{"class":5407},[97,35222,115],{"class":319},[97,35224,392],{"class":370},[97,35226,698],{"class":103},[97,35228,31073],{"class":5407},[97,35230,115],{"class":319},[97,35232,537],{"class":370},[97,35234,329],{"class":103},[97,35236,35237,35239,35242,35244,35246,35248,35250,35252,35254,35256,35258,35260],{"class":99,"line":1845},[97,35238,31035],{"class":370},[97,35240,35241],{"class":103},".s8",[97,35243,115],{"class":319},[97,35245,35019],{"class":103},[97,35247,31064],{"class":5407},[97,35249,115],{"class":319},[97,35251,392],{"class":370},[97,35253,698],{"class":103},[97,35255,31119],{"class":5407},[97,35257,115],{"class":319},[97,35259,398],{"class":370},[97,35261,329],{"class":103},[97,35263,35264],{"class":99,"line":1866},[97,35265,31192],{"class":191},[97,35267,35268,35270,35272,35274],{"class":99,"line":1871},[97,35269,31035],{"class":370},[97,35271,31199],{"class":103},[97,35273,115],{"class":319},[97,35275,31204],{"class":103},[97,35277,35278],{"class":99,"line":1885},[97,35279,35280],{"class":191},"       # 定义全连接层\n",[97,35282,35283,35285,35288,35290,35292,35294,35296,35298,35300,35302,35304,35307],{"class":99,"line":1890},[97,35284,31035],{"class":370},[97,35286,35287],{"class":103},".f1",[97,35289,115],{"class":319},[97,35291,31221],{"class":103},[97,35293,664],{"class":370},[97,35295,775],{"class":319},[97,35297,664],{"class":370},[97,35299,775],{"class":319},[97,35301,35060],{"class":370},[97,35303,698],{"class":103},[97,35305,35306],{"class":370},"4096",[97,35308,329],{"class":103},[97,35310,35311,35313,35316,35318,35320,35322,35324,35326],{"class":99,"line":1919},[97,35312,31035],{"class":370},[97,35314,35315],{"class":103},".f2",[97,35317,115],{"class":319},[97,35319,31221],{"class":103},[97,35321,35306],{"class":370},[97,35323,698],{"class":103},[97,35325,35306],{"class":370},[97,35327,329],{"class":103},[97,35329,35330,35332,35335,35337,35339,35341,35343,35345],{"class":99,"line":1924},[97,35331,31035],{"class":370},[97,35333,35334],{"class":103},".f3",[97,35336,115],{"class":319},[97,35338,31221],{"class":103},[97,35340,35306],{"class":370},[97,35342,698],{"class":103},[97,35344,766],{"class":370},[97,35346,329],{"class":103},[97,35348,35349],{"class":99,"line":1941},[97,35350,2591],{"emptyLinePlaceholder":249},[97,35352,35353],{"class":99,"line":1946},[97,35354,35355],{"class":191},"    # 定义前向传播\n",[97,35357,35358,35360,35362],{"class":99,"line":1951},[97,35359,30991],{"class":319},[97,35361,31283],{"class":111},[97,35363,31286],{"class":103},[97,35365,35366,35368,35370,35372,35375,35377],{"class":99,"line":1956},[97,35367,31291],{"class":103},[97,35369,115],{"class":319},[97,35371,31013],{"class":370},[97,35373,35374],{"class":103},".ReLu(",[97,35376,31013],{"class":370},[97,35378,31303],{"class":103},[97,35380,35381,35383,35385,35387],{"class":99,"line":1970},[97,35382,31291],{"class":103},[97,35384,115],{"class":319},[97,35386,31013],{"class":370},[97,35388,31314],{"class":103},[97,35390,35391,35393,35395,35397,35399,35401],{"class":99,"line":1975},[97,35392,31291],{"class":103},[97,35394,115],{"class":319},[97,35396,31013],{"class":370},[97,35398,35374],{"class":103},[97,35400,31013],{"class":370},[97,35402,31329],{"class":103},[97,35404,35405,35407,35409,35411],{"class":99,"line":2768},[97,35406,31291],{"class":103},[97,35408,115],{"class":319},[97,35410,31013],{"class":370},[97,35412,31340],{"class":103},[97,35414,35415,35417,35419,35421,35423,35425],{"class":99,"line":2782},[97,35416,31291],{"class":103},[97,35418,115],{"class":319},[97,35420,31013],{"class":370},[97,35422,35374],{"class":103},[97,35424,31013],{"class":370},[97,35426,35427],{"class":103},".c5(x))\n",[97,35429,35430,35432,35434,35436,35438,35440],{"class":99,"line":2790},[97,35431,31291],{"class":103},[97,35433,115],{"class":319},[97,35435,31013],{"class":370},[97,35437,35374],{"class":103},[97,35439,31013],{"class":370},[97,35441,35442],{"class":103},".c6(x))\n",[97,35444,35445,35447,35449,35451,35453,35455],{"class":99,"line":2795},[97,35446,31291],{"class":103},[97,35448,115],{"class":319},[97,35450,31013],{"class":370},[97,35452,35374],{"class":103},[97,35454,31013],{"class":370},[97,35456,35457],{"class":103},".c7(x))\n",[97,35459,35460,35462,35464,35466],{"class":99,"line":2801},[97,35461,31291],{"class":103},[97,35463,115],{"class":319},[97,35465,31013],{"class":370},[97,35467,35468],{"class":103},".s8(x)\n",[97,35470,35471],{"class":99,"line":2807},[97,35472,2591],{"emptyLinePlaceholder":249},[97,35474,35475],{"class":99,"line":2812},[97,35476,35477],{"class":191},"        # 展平加线性全连接层\n",[97,35479,35480,35482,35484,35486],{"class":99,"line":8139},[97,35481,31291],{"class":103},[97,35483,115],{"class":319},[97,35485,31013],{"class":370},[97,35487,31351],{"class":103},[97,35489,35490,35492,35494,35496,35498,35500],{"class":99,"line":8163},[97,35491,31291],{"class":103},[97,35493,115],{"class":319},[97,35495,31013],{"class":370},[97,35497,35374],{"class":103},[97,35499,31013],{"class":370},[97,35501,35502],{"class":103},".f1(x))\n",[97,35504,35505],{"class":99,"line":8168},[97,35506,35507],{"class":191},"        # 还需要dropout对神经元随机进行失活\n",[97,35509,35510,35512,35514,35517,35520],{"class":99,"line":8174},[97,35511,31291],{"class":103},[97,35513,115],{"class":319},[97,35515,35516],{"class":103},"F.dropout(x,",[97,35518,35519],{"class":370},"0.5",[97,35521,329],{"class":103},[97,35523,35524,35526,35528,35530,35532,35534],{"class":99,"line":8201},[97,35525,31291],{"class":103},[97,35527,115],{"class":319},[97,35529,31013],{"class":370},[97,35531,35374],{"class":103},[97,35533,31013],{"class":370},[97,35535,35536],{"class":103},".f2(x))\n",[97,35538,35539,35541,35543,35545,35547],{"class":99,"line":8206},[97,35540,31291],{"class":103},[97,35542,115],{"class":319},[97,35544,35516],{"class":103},[97,35546,35519],{"class":370},[97,35548,329],{"class":103},[97,35550,35551],{"class":99,"line":8212},[97,35552,35553],{"class":191},"        # 直接输出\n",[97,35555,35556,35558,35560,35562],{"class":99,"line":8224},[97,35557,31291],{"class":103},[97,35559,115],{"class":319},[97,35561,31013],{"class":370},[97,35563,35564],{"class":103},".f3(x)\n",[97,35566,35567],{"class":99,"line":8236},[97,35568,35569],{"class":191},"        # 前向传播输出\n",[97,35571,35572,35574],{"class":99,"line":8248},[97,35573,14943],{"class":319},[97,35575,31399],{"class":103},[97,35577,35578],{"class":99,"line":9907},[97,35579,35580],{"class":191},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[97,35582,35583,35585,35587,35589,35591],{"class":99,"line":9932},[97,35584,1723],{"class":319},[97,35586,31410],{"class":370},[97,35588,3140],{"class":319},[97,35590,31415],{"class":118},[97,35592,3930],{"class":103},[97,35594,35595,35597,35599,35601,35603,35605,35607,35609,35611],{"class":99,"line":9955},[97,35596,31427],{"class":103},[97,35598,115],{"class":319},[97,35600,30641],{"class":103},[97,35602,31434],{"class":118},[97,35604,1896],{"class":319},[97,35606,31439],{"class":103},[97,35608,1893],{"class":319},[97,35610,30666],{"class":118},[97,35612,329],{"class":103},[97,35614,35615],{"class":99,"line":9979},[97,35616,35617],{"class":191},"    # 模型实例化，然后将实例化的模型放到设备中\n",[97,35619,35620,35622,35624],{"class":99,"line":9984},[97,35621,31479],{"class":103},[97,35623,115],{"class":319},[97,35625,35626],{"class":103},"AlexNet().to(device)\n",[97,35628,35629,35631,35633,35635,35637,35640,35642,35644],{"class":99,"line":9989},[97,35630,31489],{"class":370},[97,35632,31492],{"class":103},[97,35634,537],{"class":370},[97,35636,698],{"class":103},[97,35638,35639],{"class":370},"227",[97,35641,698],{"class":103},[97,35643,35639],{"class":370},[97,35645,31505],{"class":103},[138,35647,35648],{"start":195},[70,35649,31518],{},[87,35651,35653],{"className":30568,"code":35652,"language":30570,"meta":92,"style":92},"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",[94,35654,35655,35661,35667,35677,35683,35693,35703,35713,35723,35733,35737,35748,35758,35762,35766,35770,35778,35790,35800,35816,35826,35858,35872,35882,35892,35896,35906,35920,35930,35940,35950,35956,35960,35964,35968,35972,35976,35984,36004,36008,36012,36016,36020,36024,36040,36044,36048,36056,36060,36064,36072,36076,36080,36084,36092,36096,36100,36104,36108,36116,36120,36128,36132,36140,36144,36152,36156,36164,36168,36172,36180,36184,36188,36192,36204,36228,36242,36246,36250,36254,36262,36266,36274,36278,36286,36290,36298,36302,36310,36314,36322,36326,36338,36342,36350,36354,36362,36366,36370,36374,36378,36386,36390,36406,36410,36418,36422,36426,36430,36434,36438,36442,36446,36462,36466,36478,36482,36494,36498,36510,36514,36522,36526,36534,36538,36542,36547,36553,36557,36566,36570,36587,36591,36600,36604,36622,36635,36640,36653,36657,36661,36669,36673,36677,36685,36689,36697,36701,36709,36713,36717,36759,36801,36805,36809,36825,36829,36845,36849,36853,36861,36865,36869,36881,36919,36924,36929,36938,36942,36956,36966,36972,36978,36984,36990,36994,36998,37004,37008,37012,37020,37024,37042,37046,37050,37054,37070,37074,37078,37082,37086,37090,37110,37130,37134,37138,37142,37150,37158,37162,37178,37198,37218,37222,37226,37234,37242,37246,37250,37254,37266,37270,37280,37288,37305],{"__ignoreMap":92},[97,35656,35657,35659],{"class":99,"line":100},[97,35658,30582],{"class":319},[97,35660,32012],{"class":103},[97,35662,35663,35665],{"class":99,"line":195},[97,35664,30582],{"class":319},[97,35666,32019],{"class":103},[97,35668,35669,35671,35673,35675],{"class":99,"line":241},[97,35670,30582],{"class":319},[97,35672,32030],{"class":103},[97,35674,31573],{"class":319},[97,35676,32035],{"class":103},[97,35678,35679,35681],{"class":99,"line":1387},[97,35680,30582],{"class":319},[97,35682,30585],{"class":103},[97,35684,35685,35687,35689,35691],{"class":99,"line":1393},[97,35686,30927],{"class":319},[97,35688,31605],{"class":103},[97,35690,30582],{"class":319},[97,35692,32052],{"class":103},[97,35694,35695,35697,35699,35701],{"class":99,"line":1407},[97,35696,30927],{"class":319},[97,35698,31558],{"class":103},[97,35700,30582],{"class":319},[97,35702,31563],{"class":103},[97,35704,35705,35707,35709,35711],{"class":99,"line":1413},[97,35706,30927],{"class":319},[97,35708,31588],{"class":103},[97,35710,30582],{"class":319},[97,35712,31593],{"class":103},[97,35714,35715,35717,35719,35721],{"class":99,"line":1504},[97,35716,30582],{"class":319},[97,35718,31605],{"class":103},[97,35720,31573],{"class":319},[97,35722,31610],{"class":103},[97,35724,35725,35727,35729,35731],{"class":99,"line":1510},[97,35726,30582],{"class":319},[97,35728,31622],{"class":103},[97,35730,31573],{"class":319},[97,35732,31627],{"class":103},[97,35734,35735],{"class":99,"line":1522},[97,35736,32097],{"class":191},[97,35738,35739,35741,35743,35745],{"class":99,"line":1804},[97,35740,30927],{"class":319},[97,35742,32104],{"class":103},[97,35744,30582],{"class":319},[97,35746,35747],{"class":103}," AlexNet\n",[97,35749,35750,35752,35754,35756],{"class":99,"line":1809},[97,35751,30927],{"class":319},[97,35753,30930],{"class":103},[97,35755,30582],{"class":319},[97,35757,30935],{"class":103},[97,35759,35760],{"class":99,"line":1815},[97,35761,2591],{"emptyLinePlaceholder":249},[97,35763,35764],{"class":99,"line":1820},[97,35765,2591],{"emptyLinePlaceholder":249},[97,35767,35768],{"class":99,"line":1834},[97,35769,32132],{"class":191},[97,35771,35772,35774,35776],{"class":99,"line":1839},[97,35773,32137],{"class":319},[97,35775,32140],{"class":111},[97,35777,32143],{"class":103},[97,35779,35780,35782,35784,35786,35788],{"class":99,"line":1845},[97,35781,32148],{"class":103},[97,35783,115],{"class":319},[97,35785,31645],{"class":103},[97,35787,31653],{"class":118},[97,35789,31656],{"class":103},[97,35791,35792,35794,35796,35798],{"class":99,"line":1866},[97,35793,32161],{"class":5407},[97,35795,115],{"class":319},[97,35797,31666],{"class":370},[97,35799,31656],{"class":103},[97,35801,35802,35804,35806,35808,35810,35812,35814],{"class":99,"line":1871},[97,35803,32172],{"class":5407},[97,35805,115],{"class":319},[97,35807,31683],{"class":103},[97,35809,31686],{"class":5407},[97,35811,115],{"class":319},[97,35813,35639],{"class":370},[97,35815,31694],{"class":103},[97,35817,35818,35820,35822,35824],{"class":99,"line":1885},[97,35819,32189],{"class":5407},[97,35821,115],{"class":319},[97,35823,31666],{"class":370},[97,35825,329],{"class":103},[97,35827,35828,35830,35832,35834,35836,35838,35840,35842,35844,35846,35848,35850,35852,35854,35856],{"class":99,"line":1890},[97,35829,32200],{"class":103},[97,35831,115],{"class":319},[97,35833,32205],{"class":103},[97,35835,32208],{"class":370},[97,35837,323],{"class":103},[97,35839,32213],{"class":370},[97,35841,775],{"class":319},[97,35843,7549],{"class":370},[97,35845,32220],{"class":103},[97,35847,32208],{"class":370},[97,35849,323],{"class":103},[97,35851,32227],{"class":370},[97,35853,775],{"class":319},[97,35855,7549],{"class":370},[97,35857,32234],{"class":103},[97,35859,35860,35862,35864,35866,35868,35870],{"class":99,"line":1919},[97,35861,32239],{"class":103},[97,35863,115],{"class":319},[97,35865,32244],{"class":103},[97,35867,31727],{"class":5407},[97,35869,115],{"class":319},[97,35871,31732],{"class":103},[97,35873,35874,35876,35878,35880],{"class":99,"line":1924},[97,35875,32255],{"class":5407},[97,35877,115],{"class":319},[97,35879,32260],{"class":370},[97,35881,31656],{"class":103},[97,35883,35884,35886,35888,35890],{"class":99,"line":1941},[97,35885,32267],{"class":5407},[97,35887,115],{"class":319},[97,35889,31666],{"class":370},[97,35891,31656],{"class":103},[97,35893,35894],{"class":99,"line":1946},[97,35895,32278],{"class":191},[97,35897,35898,35900,35902,35904],{"class":99,"line":1951},[97,35899,32283],{"class":5407},[97,35901,115],{"class":319},[97,35903,715],{"class":370},[97,35905,329],{"class":103},[97,35907,35908,35910,35912,35914,35916,35918],{"class":99,"line":1956},[97,35909,32294],{"class":103},[97,35911,115],{"class":319},[97,35913,31724],{"class":103},[97,35915,31727],{"class":5407},[97,35917,115],{"class":319},[97,35919,32305],{"class":103},[97,35921,35922,35924,35926,35928],{"class":99,"line":1970},[97,35923,32310],{"class":5407},[97,35925,115],{"class":319},[97,35927,32260],{"class":370},[97,35929,31656],{"class":103},[97,35931,35932,35934,35936,35938],{"class":99,"line":1975},[97,35933,32321],{"class":5407},[97,35935,115],{"class":319},[97,35937,31666],{"class":370},[97,35939,31656],{"class":103},[97,35941,35942,35944,35946,35948],{"class":99,"line":2768},[97,35943,32332],{"class":5407},[97,35945,115],{"class":319},[97,35947,715],{"class":370},[97,35949,329],{"class":103},[97,35951,35952,35954],{"class":99,"line":2782},[97,35953,4281],{"class":319},[97,35955,32345],{"class":103},[97,35957,35958],{"class":99,"line":2790},[97,35959,2591],{"emptyLinePlaceholder":249},[97,35961,35962],{"class":99,"line":2795},[97,35963,32354],{"class":191},[97,35965,35966],{"class":99,"line":2801},[97,35967,32359],{"class":191},[97,35969,35970],{"class":99,"line":2807},[97,35971,2591],{"emptyLinePlaceholder":249},[97,35973,35974],{"class":99,"line":2812},[97,35975,32368],{"class":191},[97,35977,35978,35980,35982],{"class":99,"line":8139},[97,35979,32137],{"class":319},[97,35981,32375],{"class":111},[97,35983,32378],{"class":103},[97,35985,35986,35988,35990,35992,35994,35996,35998,36000,36002],{"class":99,"line":8163},[97,35987,31427],{"class":103},[97,35989,115],{"class":319},[97,35991,30641],{"class":103},[97,35993,31434],{"class":118},[97,35995,1896],{"class":319},[97,35997,31439],{"class":103},[97,35999,1893],{"class":319},[97,36001,32397],{"class":118},[97,36003,329],{"class":103},[97,36005,36006],{"class":99,"line":8168},[97,36007,2591],{"emptyLinePlaceholder":249},[97,36009,36010],{"class":99,"line":8174},[97,36011,2591],{"emptyLinePlaceholder":249},[97,36013,36014],{"class":99,"line":8201},[97,36015,32412],{"class":191},[97,36017,36018],{"class":99,"line":8206},[97,36019,32417],{"class":191},[97,36021,36022],{"class":99,"line":8212},[97,36023,32422],{"class":191},[97,36025,36026,36028,36030,36032,36034,36036,36038],{"class":99,"line":8224},[97,36027,32427],{"class":103},[97,36029,115],{"class":319},[97,36031,32432],{"class":103},[97,36033,32435],{"class":5407},[97,36035,115],{"class":319},[97,36037,32440],{"class":370},[97,36039,329],{"class":103},[97,36041,36042],{"class":99,"line":8236},[97,36043,2591],{"emptyLinePlaceholder":249},[97,36045,36046],{"class":99,"line":8248},[97,36047,32451],{"class":191},[97,36049,36050,36052,36054],{"class":99,"line":9907},[97,36051,32456],{"class":103},[97,36053,115],{"class":319},[97,36055,32461],{"class":103},[97,36057,36058],{"class":99,"line":9932},[97,36059,2591],{"emptyLinePlaceholder":249},[97,36061,36062],{"class":99,"line":9955},[97,36063,32470],{"class":191},[97,36065,36066,36068,36070],{"class":99,"line":9979},[97,36067,31479],{"class":103},[97,36069,115],{"class":319},[97,36071,32479],{"class":103},[97,36073,36074],{"class":99,"line":9984},[97,36075,32484],{"class":191},[97,36077,36078],{"class":99,"line":9989},[97,36079,32489],{"class":191},[97,36081,36082],{"class":99,"line":9994},[97,36083,32494],{"class":191},[97,36085,36086,36088,36090],{"class":99,"line":10003},[97,36087,32499],{"class":103},[97,36089,115],{"class":319},[97,36091,32504],{"class":103},[97,36093,36094],{"class":99,"line":10008},[97,36095,2591],{"emptyLinePlaceholder":249},[97,36097,36098],{"class":99,"line":10014},[97,36099,2591],{"emptyLinePlaceholder":249},[97,36101,36102],{"class":99,"line":10035},[97,36103,32517],{"class":191},[97,36105,36106],{"class":99,"line":10041},[97,36107,32522],{"class":191},[97,36109,36110,36112,36114],{"class":99,"line":10055},[97,36111,32527],{"class":103},[97,36113,115],{"class":319},[97,36115,32532],{"class":370},[97,36117,36118],{"class":99,"line":10061},[97,36119,32537],{"class":191},[97,36121,36122,36124,36126],{"class":99,"line":10088},[97,36123,32542],{"class":103},[97,36125,115],{"class":319},[97,36127,32547],{"class":103},[97,36129,36130],{"class":99,"line":10097},[97,36131,32552],{"class":191},[97,36133,36134,36136,36138],{"class":99,"line":10103},[97,36135,32557],{"class":103},[97,36137,115],{"class":319},[97,36139,32547],{"class":103},[97,36141,36142],{"class":99,"line":10111},[97,36143,32566],{"class":191},[97,36145,36146,36148,36150],{"class":99,"line":10116},[97,36147,32571],{"class":103},[97,36149,115],{"class":319},[97,36151,32547],{"class":103},[97,36153,36154],{"class":99,"line":16794},[97,36155,32580],{"class":191},[97,36157,36158,36160,36162],{"class":99,"line":16800},[97,36159,32585],{"class":103},[97,36161,115],{"class":319},[97,36163,32547],{"class":103},[97,36165,36166],{"class":99,"line":16823},[97,36167,2591],{"emptyLinePlaceholder":249},[97,36169,36170],{"class":99,"line":16829},[97,36171,32598],{"class":191},[97,36173,36174,36176,36178],{"class":99,"line":16852},[97,36175,32603],{"class":103},[97,36177,115],{"class":319},[97,36179,32608],{"class":103},[97,36181,36182],{"class":99,"line":16866},[97,36183,2591],{"emptyLinePlaceholder":249},[97,36185,36186],{"class":99,"line":16886},[97,36187,2591],{"emptyLinePlaceholder":249},[97,36189,36190],{"class":99,"line":16892},[97,36191,32621],{"class":191},[97,36193,36194,36196,36198,36200,36202],{"class":99,"line":16903},[97,36195,3392],{"class":319},[97,36197,32628],{"class":103},[97,36199,26233],{"class":319},[97,36201,32633],{"class":370},[97,36203,32636],{"class":103},[97,36205,36206,36208,36210,36212,36214,36216,36218,36220,36222,36224,36226],{"class":99,"line":16926},[97,36207,32641],{"class":370},[97,36209,323],{"class":103},[97,36211,32646],{"class":118},[97,36213,32649],{"class":370},[97,36215,904],{"class":118},[97,36217,32649],{"class":370},[97,36219,571],{"class":118},[97,36221,32658],{"class":103},[97,36223,852],{"class":319},[97,36225,537],{"class":370},[97,36227,30687],{"class":103},[97,36229,36230,36232,36234,36236,36238,36240],{"class":99,"line":16948},[97,36231,32641],{"class":370},[97,36233,323],{"class":103},[97,36235,32673],{"class":118},[97,36237,775],{"class":319},[97,36239,766],{"class":370},[97,36241,329],{"class":103},[97,36243,36244],{"class":99,"line":16953},[97,36245,2591],{"emptyLinePlaceholder":249},[97,36247,36248],{"class":99,"line":16959},[97,36249,32688],{"class":191},[97,36251,36252],{"class":99,"line":16973},[97,36253,32693],{"class":191},[97,36255,36256,36258,36260],{"class":99,"line":16986},[97,36257,32698],{"class":103},[97,36259,115],{"class":319},[97,36261,32532],{"class":370},[97,36263,36264],{"class":99,"line":16991},[97,36265,32707],{"class":191},[97,36267,36268,36270,36272],{"class":99,"line":17005},[97,36269,32712],{"class":103},[97,36271,115],{"class":319},[97,36273,3276],{"class":370},[97,36275,36276],{"class":99,"line":17010},[97,36277,32721],{"class":191},[97,36279,36280,36282,36284],{"class":99,"line":17016},[97,36281,32726],{"class":103},[97,36283,115],{"class":319},[97,36285,32532],{"class":370},[97,36287,36288],{"class":99,"line":17021},[97,36289,32735],{"class":191},[97,36291,36292,36294,36296],{"class":99,"line":17035},[97,36293,32740],{"class":103},[97,36295,115],{"class":319},[97,36297,3276],{"class":370},[97,36299,36300],{"class":99,"line":17040},[97,36301,32749],{"class":191},[97,36303,36304,36306,36308],{"class":99,"line":17045},[97,36305,32754],{"class":103},[97,36307,115],{"class":319},[97,36309,3276],{"class":370},[97,36311,36312],{"class":99,"line":17059},[97,36313,32763],{"class":191},[97,36315,36316,36318,36320],{"class":99,"line":17071},[97,36317,32768],{"class":103},[97,36319,115],{"class":319},[97,36321,3276],{"class":370},[97,36323,36324],{"class":99,"line":17076},[97,36325,32777],{"class":191},[97,36327,36328,36330,36332,36334,36336],{"class":99,"line":17089},[97,36329,3594],{"class":319},[97,36331,31791],{"class":103},[97,36333,26233],{"class":319},[97,36335,31796],{"class":370},[97,36337,32790],{"class":103},[97,36339,36340],{"class":99,"line":17094},[97,36341,32795],{"class":191},[97,36343,36344,36346,36348],{"class":99,"line":17099},[97,36345,32800],{"class":103},[97,36347,115],{"class":319},[97,36349,32805],{"class":103},[97,36351,36352],{"class":99,"line":17104},[97,36353,32810],{"class":191},[97,36355,36356,36358,36360],{"class":99,"line":17117},[97,36357,32815],{"class":103},[97,36359,115],{"class":319},[97,36361,32820],{"class":103},[97,36363,36364],{"class":99,"line":17122},[97,36365,32826],{"class":191},[97,36367,36368],{"class":99,"line":32823},[97,36369,32832],{"class":103},[97,36371,36372],{"class":99,"line":32829},[97,36373,32838],{"class":191},[97,36375,36376],{"class":99,"line":32835},[97,36377,32844],{"class":191},[97,36379,36380,36382,36384],{"class":99,"line":32841},[97,36381,32850],{"class":103},[97,36383,115],{"class":319},[97,36385,32855],{"class":103},[97,36387,36388],{"class":99,"line":32847},[97,36389,32861],{"class":191},[97,36391,36392,36394,36396,36398,36400,36402,36404],{"class":99,"line":32858},[97,36393,32867],{"class":103},[97,36395,115],{"class":319},[97,36397,32872],{"class":103},[97,36399,32875],{"class":5407},[97,36401,115],{"class":319},[97,36403,537],{"class":370},[97,36405,329],{"class":103},[97,36407,36408],{"class":99,"line":32864},[97,36409,32887],{"class":191},[97,36411,36412,36414,36416],{"class":99,"line":32884},[97,36413,32893],{"class":103},[97,36415,115],{"class":319},[97,36417,32898],{"class":103},[97,36419,36420],{"class":99,"line":32890},[97,36421,32904],{"class":191},[97,36423,36424],{"class":99,"line":32901},[97,36425,32910],{"class":103},[97,36427,36428],{"class":99,"line":32907},[97,36429,32916],{"class":191},[97,36431,36432],{"class":99,"line":32913},[97,36433,32922],{"class":103},[97,36435,36436],{"class":99,"line":32919},[97,36437,32928],{"class":191},[97,36439,36440],{"class":99,"line":32925},[97,36441,32934],{"class":103},[97,36443,36444],{"class":99,"line":32931},[97,36445,32940],{"class":191},[97,36447,36448,36450,36452,36454,36456,36458,36460],{"class":99,"line":32937},[97,36449,32946],{"class":103},[97,36451,9668],{"class":319},[97,36453,32951],{"class":103},[97,36455,775],{"class":319},[97,36457,32956],{"class":103},[97,36459,511],{"class":370},[97,36461,329],{"class":103},[97,36463,36464],{"class":99,"line":32943},[97,36465,32966],{"class":191},[97,36467,36468,36470,36472,36474,36476],{"class":99,"line":32963},[97,36469,32972],{"class":103},[97,36471,9668],{"class":319},[97,36473,32977],{"class":103},[97,36475,3140],{"class":319},[97,36477,32982],{"class":103},[97,36479,36480],{"class":99,"line":32969},[97,36481,32988],{"class":191},[97,36483,36484,36486,36488,36490,36492],{"class":99,"line":32985},[97,36485,32994],{"class":103},[97,36487,9668],{"class":319},[97,36489,32956],{"class":103},[97,36491,511],{"class":370},[97,36493,329],{"class":103},[97,36495,36496],{"class":99,"line":32991},[97,36497,33008],{"class":191},[97,36499,36500,36502,36504,36506,36508],{"class":99,"line":33005},[97,36501,3594],{"class":319},[97,36503,33016],{"class":103},[97,36505,26233],{"class":319},[97,36507,31796],{"class":370},[97,36509,33023],{"class":103},[97,36511,36512],{"class":99,"line":33011},[97,36513,33029],{"class":191},[97,36515,36516,36518,36520],{"class":99,"line":33026},[97,36517,32800],{"class":103},[97,36519,115],{"class":319},[97,36521,32805],{"class":103},[97,36523,36524],{"class":99,"line":33032},[97,36525,33044],{"class":191},[97,36527,36528,36530,36532],{"class":99,"line":33041},[97,36529,32815],{"class":103},[97,36531,115],{"class":319},[97,36533,32820],{"class":103},[97,36535,36536],{"class":99,"line":33047},[97,36537,33059],{"class":191},[97,36539,36540],{"class":99,"line":33056},[97,36541,33065],{"class":103},[97,36543,36544],{"class":99,"line":33062},[97,36545,36546],{"class":191},"            # 验证时不计算梯度以节省内存\u002F计算\n",[97,36548,36549,36551],{"class":99,"line":33068},[97,36550,33071],{"class":319},[97,36552,33074],{"class":103},[97,36554,36555],{"class":99,"line":33077},[97,36556,33080],{"class":191},[97,36558,36559,36562,36564],{"class":99,"line":33083},[97,36560,36561],{"class":103},"                output",[97,36563,115],{"class":319},[97,36565,32855],{"class":103},[97,36567,36568],{"class":99,"line":33094},[97,36569,33097],{"class":191},[97,36571,36572,36575,36577,36579,36581,36583,36585],{"class":99,"line":33100},[97,36573,36574],{"class":103},"                pre_lab",[97,36576,115],{"class":319},[97,36578,32872],{"class":103},[97,36580,32875],{"class":5407},[97,36582,115],{"class":319},[97,36584,537],{"class":370},[97,36586,329],{"class":103},[97,36588,36589],{"class":99,"line":33119},[97,36590,33122],{"class":191},[97,36592,36593,36596,36598],{"class":99,"line":33125},[97,36594,36595],{"class":103},"                val_batch_loss",[97,36597,115],{"class":319},[97,36599,32898],{"class":103},[97,36601,36602],{"class":99,"line":33136},[97,36603,33139],{"class":191},[97,36605,36606,36609,36611,36614,36616,36618,36620],{"class":99,"line":33142},[97,36607,36608],{"class":103},"                val_loss",[97,36610,9668],{"class":319},[97,36612,36613],{"class":103},"val_batch_loss.item()",[97,36615,775],{"class":319},[97,36617,32956],{"class":103},[97,36619,511],{"class":370},[97,36621,329],{"class":103},[97,36623,36624,36627,36629,36631,36633],{"class":99,"line":33162},[97,36625,36626],{"class":103},"                val_corrects",[97,36628,9668],{"class":319},[97,36630,32977],{"class":103},[97,36632,3140],{"class":319},[97,36634,32982],{"class":103},[97,36636,36637],{"class":99,"line":33178},[97,36638,36639],{"class":191},"            # 当前用于验证的样本数量\n",[97,36641,36642,36645,36647,36649,36651],{"class":99,"line":33184},[97,36643,36644],{"class":103},"            val_num",[97,36646,9668],{"class":319},[97,36648,32956],{"class":103},[97,36650,511],{"class":370},[97,36652,329],{"class":103},[97,36654,36655],{"class":99,"line":33198},[97,36656,33201],{"class":191},[97,36658,36659],{"class":99,"line":33204},[97,36660,33207],{"class":191},[97,36662,36663,36665,36667],{"class":99,"line":33210},[97,36664,33213],{"class":103},[97,36666,904],{"class":319},[97,36668,33218],{"class":103},[97,36670,36671],{"class":99,"line":33221},[97,36672,33224],{"class":191},[97,36674,36675],{"class":99,"line":33227},[97,36676,33230],{"class":191},[97,36678,36679,36681,36683],{"class":99,"line":33233},[97,36680,33236],{"class":103},[97,36682,904],{"class":319},[97,36684,33218],{"class":103},[97,36686,36687],{"class":99,"line":33243},[97,36688,33246],{"class":191},[97,36690,36691,36693,36695],{"class":99,"line":33249},[97,36692,33252],{"class":103},[97,36694,904],{"class":319},[97,36696,33257],{"class":103},[97,36698,36699],{"class":99,"line":33260},[97,36700,33263],{"class":191},[97,36702,36703,36705,36707],{"class":99,"line":33266},[97,36704,33269],{"class":103},[97,36706,904],{"class":319},[97,36708,33257],{"class":103},[97,36710,36711],{"class":99,"line":33276},[97,36712,2591],{"emptyLinePlaceholder":249},[97,36714,36715],{"class":99,"line":33281},[97,36716,33284],{"class":191},[97,36718,36719,36721,36723,36725,36727,36729,36731,36733,36735,36737,36739,36741,36743,36745,36747,36749,36751,36753,36755,36757],{"class":99,"line":33287},[97,36720,32641],{"class":370},[97,36722,323],{"class":103},[97,36724,3783],{"class":118},[97,36726,32649],{"class":370},[97,36728,33298],{"class":118},[97,36730,1216],{"class":370},[97,36732,33303],{"class":319},[97,36734,1265],{"class":370},[97,36736,33308],{"class":118},[97,36738,1216],{"class":370},[97,36740,33303],{"class":319},[97,36742,1265],{"class":370},[97,36744,3783],{"class":118},[97,36746,33319],{"class":103},[97,36748,852],{"class":319},[97,36750,537],{"class":370},[97,36752,33326],{"class":103},[97,36754,852],{"class":319},[97,36756,537],{"class":370},[97,36758,33333],{"class":103},[97,36760,36761,36763,36765,36767,36769,36771,36773,36775,36777,36779,36781,36783,36785,36787,36789,36791,36793,36795,36797,36799],{"class":99,"line":33336},[97,36762,32641],{"class":370},[97,36764,323],{"class":103},[97,36766,3783],{"class":118},[97,36768,32649],{"class":370},[97,36770,33347],{"class":118},[97,36772,1216],{"class":370},[97,36774,33303],{"class":319},[97,36776,1265],{"class":370},[97,36778,33356],{"class":118},[97,36780,1216],{"class":370},[97,36782,33303],{"class":319},[97,36784,1265],{"class":370},[97,36786,3783],{"class":118},[97,36788,33367],{"class":103},[97,36790,852],{"class":319},[97,36792,537],{"class":370},[97,36794,33374],{"class":103},[97,36796,852],{"class":319},[97,36798,537],{"class":370},[97,36800,33333],{"class":103},[97,36802,36803],{"class":99,"line":33383},[97,36804,2591],{"emptyLinePlaceholder":249},[97,36806,36807],{"class":99,"line":33388},[97,36808,33391],{"class":191},[97,36810,36811,36813,36815,36817,36819,36821,36823],{"class":99,"line":33394},[97,36812,2688],{"class":319},[97,36814,33399],{"class":103},[97,36816,852],{"class":319},[97,36818,537],{"class":370},[97,36820,1259],{"class":103},[97,36822,1279],{"class":319},[97,36824,33410],{"class":103},[97,36826,36827],{"class":99,"line":33413},[97,36828,33416],{"class":191},[97,36830,36831,36833,36835,36837,36839,36841,36843],{"class":99,"line":33419},[97,36832,33422],{"class":103},[97,36834,362],{"class":370},[97,36836,115],{"class":319},[97,36838,33429],{"class":103},[97,36840,852],{"class":319},[97,36842,537],{"class":370},[97,36844,33436],{"class":103},[97,36846,36847],{"class":99,"line":33439},[97,36848,33442],{"class":191},[97,36850,36851],{"class":99,"line":33445},[97,36852,33448],{"class":191},[97,36854,36855,36857,36859],{"class":99,"line":33451},[97,36856,33454],{"class":103},[97,36858,115],{"class":319},[97,36860,32504],{"class":103},[97,36862,36863],{"class":99,"line":33461},[97,36864,2591],{"emptyLinePlaceholder":249},[97,36866,36867],{"class":99,"line":33466},[97,36868,33469],{"class":191},[97,36870,36871,36873,36875,36877,36879],{"class":99,"line":33472},[97,36872,33475],{"class":103},[97,36874,115],{"class":319},[97,36876,33480],{"class":103},[97,36878,852],{"class":319},[97,36880,33485],{"class":103},[97,36882,36883,36885,36887,36889,36891,36893,36895,36897,36899,36901,36903,36905,36907,36909,36911,36913,36915,36917],{"class":99,"line":33488},[97,36884,32641],{"class":370},[97,36886,323],{"class":103},[97,36888,33495],{"class":118},[97,36890,1216],{"class":370},[97,36892,33500],{"class":319},[97,36894,1265],{"class":370},[97,36896,864],{"class":118},[97,36898,1216],{"class":370},[97,36900,33500],{"class":319},[97,36902,1265],{"class":370},[97,36904,33513],{"class":118},[97,36906,33516],{"class":103},[97,36908,33519],{"class":319},[97,36910,1227],{"class":370},[97,36912,33524],{"class":103},[97,36914,648],{"class":319},[97,36916,1227],{"class":370},[97,36918,30687],{"class":103},[97,36920,36921],{"class":99,"line":33533},[97,36922,36923],{"class":191},"    # 选择最优参数并保存\n",[97,36925,36926],{"class":99,"line":33539},[97,36927,36928],{"class":191},"    # 保存最佳模型权重字典\n",[97,36930,36931,36934,36936],{"class":99,"line":33545},[97,36932,36933],{"class":103},"    torch.save(best_model_wts,",[97,36935,33557],{"class":118},[97,36937,329],{"class":103},[97,36939,36940],{"class":99,"line":33551},[97,36941,33577],{"class":191},[97,36943,36944,36946,36948,36950,36952,36954],{"class":99,"line":33562},[97,36945,33583],{"class":103},[97,36947,115],{"class":319},[97,36949,33588],{"class":103},[97,36951,33591],{"class":5407},[97,36953,115],{"class":319},[97,36955,1738],{"class":103},[97,36957,36958,36960,36962,36964],{"class":99,"line":33568},[97,36959,33601],{"class":118},[97,36961,1179],{"class":103},[97,36963,33606],{"class":370},[97,36965,33609],{"class":103},[97,36967,36968,36970],{"class":99,"line":33574},[97,36969,33615],{"class":118},[97,36971,33618],{"class":103},[97,36973,36974,36976],{"class":99,"line":33580},[97,36975,33624],{"class":118},[97,36977,33627],{"class":103},[97,36979,36980,36982],{"class":99,"line":33598},[97,36981,33633],{"class":118},[97,36983,33636],{"class":103},[97,36985,36986,36988],{"class":99,"line":33612},[97,36987,33642],{"class":118},[97,36989,33645],{"class":103},[97,36991,36992],{"class":99,"line":33621},[97,36993,33651],{"class":103},[97,36995,36996],{"class":99,"line":33630},[97,36997,33657],{"class":191},[97,36999,37000,37002],{"class":99,"line":33639},[97,37001,4281],{"class":319},[97,37003,33665],{"class":103},[97,37005,37006],{"class":99,"line":33648},[97,37007,2591],{"emptyLinePlaceholder":249},[97,37009,37010],{"class":99,"line":33654},[97,37011,33676],{"class":191},[97,37013,37014,37016,37018],{"class":99,"line":33660},[97,37015,32137],{"class":319},[97,37017,33684],{"class":111},[97,37019,33687],{"class":103},[97,37021,37022],{"class":99,"line":33668},[97,37023,33693],{"class":191},[97,37025,37026,37028,37030,37032,37034,37036,37038,37040],{"class":99,"line":33673},[97,37027,33699],{"class":103},[97,37029,31883],{"class":5407},[97,37031,115],{"class":319},[97,37033,323],{"class":103},[97,37035,818],{"class":370},[97,37037,698],{"class":103},[97,37039,613],{"class":370},[97,37041,30687],{"class":103},[97,37043,37044],{"class":99,"line":33679},[97,37045,33719],{"class":191},[97,37047,37048],{"class":99,"line":33690},[97,37049,33725],{"class":191},[97,37051,37052],{"class":99,"line":33696},[97,37053,33731],{"class":191},[97,37055,37056,37058,37060,37062,37064,37066,37068],{"class":99,"line":33716},[97,37057,31917],{"class":103},[97,37059,537],{"class":370},[97,37061,698],{"class":103},[97,37063,398],{"class":370},[97,37065,698],{"class":103},[97,37067,537],{"class":370},[97,37069,329],{"class":103},[97,37071,37072],{"class":99,"line":33722},[97,37073,33754],{"class":191},[97,37075,37076],{"class":99,"line":33728},[97,37077,33760],{"class":191},[97,37079,37080],{"class":99,"line":33734},[97,37081,33766],{"class":191},[97,37083,37084],{"class":99,"line":33751},[97,37085,33772],{"class":191},[97,37087,37088],{"class":99,"line":33757},[97,37089,33778],{"class":191},[97,37091,37092,37094,37096,37098,37100,37102,37104,37106,37108],{"class":99,"line":33763},[97,37093,33784],{"class":103},[97,37095,33787],{"class":118},[97,37097,33790],{"class":103},[97,37099,33793],{"class":118},[97,37101,698],{"class":103},[97,37103,33798],{"class":5407},[97,37105,115],{"class":319},[97,37107,33803],{"class":118},[97,37109,329],{"class":103},[97,37111,37112,37114,37116,37118,37120,37122,37124,37126,37128],{"class":99,"line":33769},[97,37113,33784],{"class":103},[97,37115,33787],{"class":118},[97,37117,33815],{"class":103},[97,37119,33818],{"class":118},[97,37121,698],{"class":103},[97,37123,33798],{"class":5407},[97,37125,115],{"class":319},[97,37127,33827],{"class":118},[97,37129,329],{"class":103},[97,37131,37132],{"class":99,"line":33775},[97,37133,33835],{"class":191},[97,37135,37136],{"class":99,"line":33781},[97,37137,33841],{"class":103},[97,37139,37140],{"class":99,"line":33808},[97,37141,33847],{"class":191},[97,37143,37144,37146,37148],{"class":99,"line":33832},[97,37145,33853],{"class":103},[97,37147,33856],{"class":118},[97,37149,329],{"class":103},[97,37151,37152,37154,37156],{"class":99,"line":33838},[97,37153,33864],{"class":103},[97,37155,33867],{"class":118},[97,37157,329],{"class":103},[97,37159,37160],{"class":99,"line":33844},[97,37161,33875],{"class":191},[97,37163,37164,37166,37168,37170,37172,37174,37176],{"class":99,"line":33850},[97,37165,31917],{"class":103},[97,37167,537],{"class":370},[97,37169,698],{"class":103},[97,37171,398],{"class":370},[97,37173,698],{"class":103},[97,37175,398],{"class":370},[97,37177,329],{"class":103},[97,37179,37180,37182,37184,37186,37188,37190,37192,37194,37196],{"class":99,"line":33861},[97,37181,33784],{"class":103},[97,37183,33787],{"class":118},[97,37185,33902],{"class":103},[97,37187,33793],{"class":118},[97,37189,698],{"class":103},[97,37191,33798],{"class":5407},[97,37193,115],{"class":319},[97,37195,33913],{"class":118},[97,37197,329],{"class":103},[97,37199,37200,37202,37204,37206,37208,37210,37212,37214,37216],{"class":99,"line":33872},[97,37201,33784],{"class":103},[97,37203,33787],{"class":118},[97,37205,33925],{"class":103},[97,37207,33818],{"class":118},[97,37209,698],{"class":103},[97,37211,33798],{"class":5407},[97,37213,115],{"class":319},[97,37215,33936],{"class":118},[97,37217,329],{"class":103},[97,37219,37220],{"class":99,"line":33878},[97,37221,33944],{"class":191},[97,37223,37224],{"class":99,"line":33895},[97,37225,33841],{"class":103},[97,37227,37228,37230,37232],{"class":99,"line":33918},[97,37229,33853],{"class":103},[97,37231,33787],{"class":118},[97,37233,329],{"class":103},[97,37235,37236,37238,37240],{"class":99,"line":33941},[97,37237,33864],{"class":103},[97,37239,33966],{"class":118},[97,37241,329],{"class":103},[97,37243,37244],{"class":99,"line":33947},[97,37245,33974],{"class":103},[97,37247,37248],{"class":99,"line":33952},[97,37249,2591],{"emptyLinePlaceholder":249},[97,37251,37252],{"class":99,"line":33961},[97,37253,33985],{"class":191},[97,37255,37256,37258,37260,37262,37264],{"class":99,"line":33971},[97,37257,1723],{"class":319},[97,37259,31410],{"class":370},[97,37261,3140],{"class":319},[97,37263,31415],{"class":118},[97,37265,3930],{"class":103},[97,37267,37268],{"class":99,"line":33977},[97,37269,34004],{"class":191},[97,37271,37272,37275,37277],{"class":99,"line":33982},[97,37273,37274],{"class":103},"    AlexNet",[97,37276,115],{"class":319},[97,37278,37279],{"class":103},"AlexNet()\n",[97,37281,37282,37284,37286],{"class":99,"line":33988},[97,37283,34021],{"class":103},[97,37285,115],{"class":319},[97,37287,34026],{"class":103},[97,37289,37290,37292,37294,37297,37299,37301,37303],{"class":99,"line":34001},[97,37291,33583],{"class":103},[97,37293,115],{"class":319},[97,37295,37296],{"class":103},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[97,37298,34039],{"class":5407},[97,37300,115],{"class":319},[97,37302,1020],{"class":370},[97,37304,329],{"class":103},[97,37306,37307],{"class":99,"line":34007},[97,37308,34051],{"class":103},[138,37310,37311],{"start":241},[70,37312,34064],{},[87,37314,37316],{"className":30568,"code":37315,"language":30570,"meta":92,"style":92},"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",[94,37317,37318,37324,37334,37344,37354,37358,37368,37378,37389,37393,37397,37401,37409,37425,37435,37451,37461,37475,37479,37489,37499,37509,37515,37519,37523,37531,37535,37551,37559,37563,37567,37575,37583,37587,37591,37595,37599,37605,37609,37619,37627,37635,37639,37643,37647,37655,37659,37675,37679,37683,37687,37699,37703,37715,37719,37723,37735,37739,37749,37753,37757,37769,37773,37781,37785,37789,37797,37801,37809,37813,37817,37821,37825,37829,37845,37853,37857,37861,37909,37915,37919,37929,37937,37945,37949,37953,37957,37961,37969,37973,37989,37993,38001,38009],{"__ignoreMap":92},[97,37319,37320,37322],{"class":99,"line":100},[97,37321,30582],{"class":319},[97,37323,30585],{"class":103},[97,37325,37326,37328,37330,37332],{"class":99,"line":195},[97,37327,30582],{"class":319},[97,37329,31605],{"class":103},[97,37331,31573],{"class":319},[97,37333,31610],{"class":103},[97,37335,37336,37338,37340,37342],{"class":99,"line":241},[97,37337,30927],{"class":319},[97,37339,34092],{"class":103},[97,37341,30582],{"class":319},[97,37343,34097],{"class":103},[97,37345,37346,37348,37350,37352],{"class":99,"line":1387},[97,37347,30927],{"class":319},[97,37349,31588],{"class":103},[97,37351,30582],{"class":319},[97,37353,31593],{"class":103},[97,37355,37356],{"class":99,"line":1393},[97,37357,34112],{"class":191},[97,37359,37360,37362,37364,37366],{"class":99,"line":1407},[97,37361,30927],{"class":319},[97,37363,31558],{"class":103},[97,37365,30582],{"class":319},[97,37367,31563],{"class":103},[97,37369,37370,37372,37374,37376],{"class":99,"line":1413},[97,37371,30927],{"class":319},[97,37373,32104],{"class":103},[97,37375,30582],{"class":319},[97,37377,35747],{"class":103},[97,37379,37380,37382,37385,37387],{"class":99,"line":1504},[97,37381,30927],{"class":319},[97,37383,37384],{"class":103}," 练习.AlexNet.model ",[97,37386,30582],{"class":319},[97,37388,35747],{"class":103},[97,37390,37391],{"class":99,"line":1510},[97,37392,2591],{"emptyLinePlaceholder":249},[97,37394,37395],{"class":99,"line":1522},[97,37396,2591],{"emptyLinePlaceholder":249},[97,37398,37399],{"class":99,"line":1804},[97,37400,34141],{"class":191},[97,37402,37403,37405,37407],{"class":99,"line":1809},[97,37404,32137],{"class":319},[97,37406,34148],{"class":111},[97,37408,32143],{"class":103},[97,37410,37411,37413,37415,37417,37419,37421,37423],{"class":99,"line":1815},[97,37412,34155],{"class":103},[97,37414,115],{"class":319},[97,37416,31645],{"class":103},[97,37418,31648],{"class":5407},[97,37420,115],{"class":319},[97,37422,31653],{"class":118},[97,37424,31656],{"class":103},[97,37426,37427,37429,37431,37433],{"class":99,"line":1820},[97,37428,34172],{"class":5407},[97,37430,115],{"class":319},[97,37432,34177],{"class":370},[97,37434,31656],{"class":103},[97,37436,37437,37439,37441,37443,37445,37447,37449],{"class":99,"line":1834},[97,37438,34184],{"class":5407},[97,37440,115],{"class":319},[97,37442,31683],{"class":103},[97,37444,31686],{"class":5407},[97,37446,115],{"class":319},[97,37448,35639],{"class":370},[97,37450,31694],{"class":103},[97,37452,37453,37455,37457,37459],{"class":99,"line":1839},[97,37454,34201],{"class":5407},[97,37456,115],{"class":319},[97,37458,31666],{"class":370},[97,37460,329],{"class":103},[97,37462,37463,37465,37467,37469,37471,37473],{"class":99,"line":1845},[97,37464,34212],{"class":103},[97,37466,115],{"class":319},[97,37468,31724],{"class":103},[97,37470,31727],{"class":5407},[97,37472,115],{"class":319},[97,37474,34223],{"class":103},[97,37476,37477],{"class":99,"line":1866},[97,37478,34228],{"class":191},[97,37480,37481,37483,37485,37487],{"class":99,"line":1871},[97,37482,34233],{"class":5407},[97,37484,115],{"class":319},[97,37486,537],{"class":370},[97,37488,31656],{"class":103},[97,37490,37491,37493,37495,37497],{"class":99,"line":1885},[97,37492,34244],{"class":5407},[97,37494,115],{"class":319},[97,37496,31666],{"class":370},[97,37498,31656],{"class":103},[97,37500,37501,37503,37505,37507],{"class":99,"line":1890},[97,37502,34255],{"class":5407},[97,37504,115],{"class":319},[97,37506,511],{"class":370},[97,37508,329],{"class":103},[97,37510,37511,37513],{"class":99,"line":1919},[97,37512,4281],{"class":319},[97,37514,34268],{"class":103},[97,37516,37517],{"class":99,"line":1924},[97,37518,2591],{"emptyLinePlaceholder":249},[97,37520,37521],{"class":99,"line":1941},[97,37522,34277],{"class":191},[97,37524,37525,37527,37529],{"class":99,"line":1946},[97,37526,32137],{"class":319},[97,37528,34284],{"class":111},[97,37530,34287],{"class":103},[97,37532,37533],{"class":99,"line":1951},[97,37534,34292],{"class":191},[97,37536,37537,37539,37541,37543,37545,37547,37549],{"class":99,"line":1956},[97,37538,31427],{"class":103},[97,37540,115],{"class":319},[97,37542,31434],{"class":118},[97,37544,1896],{"class":319},[97,37546,31439],{"class":103},[97,37548,1893],{"class":319},[97,37550,34309],{"class":118},[97,37552,37553,37555,37557],{"class":99,"line":1970},[97,37554,31479],{"class":103},[97,37556,115],{"class":319},[97,37558,32479],{"class":103},[97,37560,37561],{"class":99,"line":1975},[97,37562,2591],{"emptyLinePlaceholder":249},[97,37564,37565],{"class":99,"line":2768},[97,37566,34326],{"class":191},[97,37568,37569,37571,37573],{"class":99,"line":2782},[97,37570,34331],{"class":103},[97,37572,115],{"class":319},[97,37574,32532],{"class":370},[97,37576,37577,37579,37581],{"class":99,"line":2790},[97,37578,34340],{"class":103},[97,37580,115],{"class":319},[97,37582,3276],{"class":370},[97,37584,37585],{"class":99,"line":2795},[97,37586,2591],{"emptyLinePlaceholder":249},[97,37588,37589],{"class":99,"line":2801},[97,37590,34353],{"class":191},[97,37592,37593],{"class":99,"line":2807},[97,37594,34358],{"class":191},[97,37596,37597],{"class":99,"line":2812},[97,37598,34363],{"class":191},[97,37600,37601,37603],{"class":99,"line":8139},[97,37602,34368],{"class":319},[97,37604,33074],{"class":103},[97,37606,37607],{"class":99,"line":8163},[97,37608,34375],{"class":191},[97,37610,37611,37613,37615,37617],{"class":99,"line":8168},[97,37612,3594],{"class":319},[97,37614,34382],{"class":103},[97,37616,26233],{"class":319},[97,37618,34387],{"class":103},[97,37620,37621,37623,37625],{"class":99,"line":8174},[97,37622,34392],{"class":103},[97,37624,115],{"class":319},[97,37626,34397],{"class":103},[97,37628,37629,37631,37633],{"class":99,"line":8201},[97,37630,34402],{"class":103},[97,37632,115],{"class":319},[97,37634,34407],{"class":103},[97,37636,37637],{"class":99,"line":8206},[97,37638,34412],{"class":191},[97,37640,37641],{"class":99,"line":8212},[97,37642,33065],{"class":103},[97,37644,37645],{"class":99,"line":8224},[97,37646,34421],{"class":191},[97,37648,37649,37651,37653],{"class":99,"line":8236},[97,37650,32850],{"class":103},[97,37652,115],{"class":319},[97,37654,34430],{"class":103},[97,37656,37657],{"class":99,"line":8248},[97,37658,34435],{"class":191},[97,37660,37661,37663,37665,37667,37669,37671,37673],{"class":99,"line":9907},[97,37662,32867],{"class":103},[97,37664,115],{"class":319},[97,37666,32872],{"class":103},[97,37668,32875],{"class":5407},[97,37670,115],{"class":319},[97,37672,537],{"class":370},[97,37674,329],{"class":103},[97,37676,37677],{"class":99,"line":9932},[97,37678,34456],{"class":191},[97,37680,37681],{"class":99,"line":9955},[97,37682,34461],{"class":191},[97,37684,37685],{"class":99,"line":9979},[97,37686,34466],{"class":191},[97,37688,37689,37691,37693,37695,37697],{"class":99,"line":9984},[97,37690,34471],{"class":103},[97,37692,9668],{"class":319},[97,37694,32977],{"class":103},[97,37696,3140],{"class":319},[97,37698,34480],{"class":103},[97,37700,37701],{"class":99,"line":9989},[97,37702,34485],{"class":191},[97,37704,37705,37707,37709,37711,37713],{"class":99,"line":9994},[97,37706,34490],{"class":103},[97,37708,9668],{"class":319},[97,37710,34495],{"class":103},[97,37712,511],{"class":370},[97,37714,329],{"class":103},[97,37716,37717],{"class":99,"line":10003},[97,37718,2591],{"emptyLinePlaceholder":249},[97,37720,37721],{"class":99,"line":10008},[97,37722,34508],{"class":191},[97,37724,37725,37727,37729,37731,37733],{"class":99,"line":10014},[97,37726,34513],{"class":103},[97,37728,115],{"class":319},[97,37730,34518],{"class":103},[97,37732,904],{"class":319},[97,37734,34523],{"class":103},[97,37736,37737],{"class":99,"line":10035},[97,37738,34528],{"class":191},[97,37740,37741,37743,37745,37747],{"class":99,"line":10041},[97,37742,32641],{"class":370},[97,37744,323],{"class":103},[97,37746,34537],{"class":118},[97,37748,34540],{"class":103},[97,37750,37751],{"class":99,"line":10055},[97,37752,2591],{"emptyLinePlaceholder":249},[97,37754,37755],{"class":99,"line":10061},[97,37756,34549],{"class":191},[97,37758,37759,37761,37763,37765,37767],{"class":99,"line":10088},[97,37760,1723],{"class":319},[97,37762,31410],{"class":370},[97,37764,3140],{"class":319},[97,37766,31415],{"class":118},[97,37768,3930],{"class":103},[97,37770,37771],{"class":99,"line":10097},[97,37772,34566],{"class":191},[97,37774,37775,37777,37779],{"class":99,"line":10103},[97,37776,31479],{"class":103},[97,37778,115],{"class":319},[97,37780,37279],{"class":103},[97,37782,37783],{"class":99,"line":10111},[97,37784,34579],{"class":191},[97,37786,37787],{"class":99,"line":10116},[97,37788,34584],{"class":191},[97,37790,37791,37793,37795],{"class":99,"line":16794},[97,37792,34589],{"class":103},[97,37794,34592],{"class":118},[97,37796,30687],{"class":103},[97,37798,37799],{"class":99,"line":16800},[97,37800,34599],{"class":191},[97,37802,37803,37805,37807],{"class":99,"line":16823},[97,37804,34212],{"class":103},[97,37806,115],{"class":319},[97,37808,34608],{"class":103},[97,37810,37811],{"class":99,"line":16829},[97,37812,34613],{"class":191},[97,37814,37815],{"class":99,"line":16852},[97,37816,34618],{"class":103},[97,37818,37819],{"class":99,"line":16866},[97,37820,2591],{"emptyLinePlaceholder":249},[97,37822,37823],{"class":99,"line":16886},[97,37824,34627],{"class":191},[97,37826,37827],{"class":99,"line":16892},[97,37828,34632],{"class":191},[97,37830,37831,37833,37835,37837,37839,37841,37843],{"class":99,"line":16903},[97,37832,31427],{"class":103},[97,37834,115],{"class":319},[97,37836,31434],{"class":118},[97,37838,1896],{"class":319},[97,37840,31439],{"class":103},[97,37842,1893],{"class":319},[97,37844,34309],{"class":118},[97,37846,37847,37849,37851],{"class":99,"line":16926},[97,37848,31479],{"class":103},[97,37850,115],{"class":319},[97,37852,32479],{"class":103},[97,37854,37855],{"class":99,"line":16948},[97,37856,34661],{"class":191},[97,37858,37859],{"class":99,"line":16953},[97,37860,34666],{"class":191},[97,37862,37863,37865,37867,37869,37871,37873,37875,37877,37879,37881,37883,37885,37887,37889,37891,37893,37895,37897,37899,37901,37903,37905,37907],{"class":99,"line":16959},[97,37864,34671],{"class":103},[97,37866,115],{"class":319},[97,37868,1210],{"class":103},[97,37870,34678],{"class":118},[97,37872,698],{"class":103},[97,37874,34683],{"class":118},[97,37876,698],{"class":103},[97,37878,34688],{"class":118},[97,37880,698],{"class":103},[97,37882,34693],{"class":118},[97,37884,698],{"class":103},[97,37886,34698],{"class":118},[97,37888,698],{"class":103},[97,37890,34703],{"class":118},[97,37892,698],{"class":103},[97,37894,34708],{"class":118},[97,37896,698],{"class":103},[97,37898,34713],{"class":118},[97,37900,698],{"class":103},[97,37902,34718],{"class":118},[97,37904,698],{"class":103},[97,37906,34723],{"class":118},[97,37908,33436],{"class":103},[97,37910,37911,37913],{"class":99,"line":16973},[97,37912,34368],{"class":319},[97,37914,33074],{"class":103},[97,37916,37917],{"class":99,"line":16986},[97,37918,34736],{"class":191},[97,37920,37921,37923,37925,37927],{"class":99,"line":16991},[97,37922,3594],{"class":319},[97,37924,34743],{"class":103},[97,37926,26233],{"class":319},[97,37928,34387],{"class":103},[97,37930,37931,37933,37935],{"class":99,"line":17005},[97,37932,32800],{"class":103},[97,37934,115],{"class":319},[97,37936,32805],{"class":103},[97,37938,37939,37941,37943],{"class":99,"line":17010},[97,37940,32815],{"class":103},[97,37942,115],{"class":319},[97,37944,32820],{"class":103},[97,37946,37947],{"class":99,"line":17016},[97,37948,2591],{"emptyLinePlaceholder":249},[97,37950,37951],{"class":99,"line":17021},[97,37952,34772],{"class":191},[97,37954,37955],{"class":99,"line":17035},[97,37956,33065],{"class":103},[97,37958,37959],{"class":99,"line":17040},[97,37960,34781],{"class":191},[97,37962,37963,37965,37967],{"class":99,"line":17045},[97,37964,32850],{"class":103},[97,37966,115],{"class":319},[97,37968,32855],{"class":103},[97,37970,37971],{"class":99,"line":17059},[97,37972,34794],{"class":191},[97,37974,37975,37977,37979,37981,37983,37985,37987],{"class":99,"line":17071},[97,37976,32867],{"class":103},[97,37978,115],{"class":319},[97,37980,32872],{"class":103},[97,37982,32875],{"class":5407},[97,37984,115],{"class":319},[97,37986,537],{"class":370},[97,37988,329],{"class":103},[97,37990,37991],{"class":99,"line":17076},[97,37992,34815],{"class":191},[97,37994,37995,37997,37999],{"class":99,"line":17089},[97,37996,34820],{"class":103},[97,37998,115],{"class":319},[97,38000,34825],{"class":103},[97,38002,38003,38005,38007],{"class":99,"line":17094},[97,38004,34830],{"class":103},[97,38006,115],{"class":319},[97,38008,34835],{"class":103},[97,38010,38011,38013,38015,38017,38019,38021,38023,38025],{"class":99,"line":17099},[97,38012,34840],{"class":370},[97,38014,323],{"class":103},[97,38016,34845],{"class":118},[97,38018,34848],{"class":103},[97,38020,34851],{"class":118},[97,38022,698],{"class":103},[97,38024,34856],{"class":118},[97,38026,34859],{"class":103},[48,38028,38030],{"id":38029},"_22vgg","2.2.VGG",[160,38032,38034],{"id":38033},"_221原理","2.2.1.原理",[24,38036,38037],{},[19,38038],{"alt":92,"src":38039},"\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",[24,38041,38042],{},[19,38043],{"alt":92,"src":38044},"\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",[24,38046,38047],{},[19,38048],{"alt":92,"src":38049},"\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",[24,38051,38052],{},"参数详细描述：",[24,38054,38055],{},[19,38056],{"alt":92,"src":38057},"\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",[24,38059,38060],{},[19,38061],{"alt":92,"src":38062},"\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",[24,38064,38065],{},[19,38066],{"alt":92,"src":38067},"\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",[24,38069,38070],{},[19,38071],{"alt":92,"src":38072},"\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",[24,38074,38075],{},[19,38076],{"alt":92,"src":38077},"\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",[160,38079,38081],{"id":38080},"_222代码实现","2.2.2.代码实现",[138,38083,38084],{},[70,38085,38086],{},"网络搭建",[87,38088,38090],{"className":30568,"code":38089,"language":30570,"meta":92,"style":92},"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",[94,38091,38092,38098,38110,38120,38130,38134,38151,38159,38178,38183,38188,38200,38238,38243,38279,38283,38312,38317,38322,38333,38369,38373,38409,38413,38441,38445,38450,38461,38497,38501,38537,38541,38577,38581,38609,38613,38618,38629,38666,38670,38706,38710,38746,38750,38778,38782,38787,38798,38834,38838,38874,38878,38914,38918,38946,38950,38955,38966,38971,38976,38981,39002,39006,39018,39022,39034,39038,39042,39047,39052,39067,39072,39082,39087,39102,39107,39126,39131,39140,39145,39155,39160,39165,39179,39184,39198,39206,39210,39214,39222,39233,39244,39255,39266,39277,39288,39294,39298,39303,39316,39336,39342,39351],{"__ignoreMap":92},[97,38093,38094,38096],{"class":99,"line":100},[97,38095,30582],{"class":319},[97,38097,30585],{"class":103},[97,38099,38100,38102,38105,38107],{"class":99,"line":195},[97,38101,30927],{"class":319},[97,38103,38104],{"class":103}," sympy.core.sympify ",[97,38106,30582],{"class":319},[97,38108,38109],{"class":103}," kernS\n",[97,38111,38112,38114,38116,38118],{"class":99,"line":241},[97,38113,30927],{"class":319},[97,38115,30930],{"class":103},[97,38117,30582],{"class":319},[97,38119,30935],{"class":103},[97,38121,38122,38124,38126,38128],{"class":99,"line":1387},[97,38123,30927],{"class":319},[97,38125,30947],{"class":103},[97,38127,30582],{"class":319},[97,38129,30952],{"class":103},[97,38131,38132],{"class":99,"line":1393},[97,38133,2591],{"emptyLinePlaceholder":249},[97,38135,38136,38138,38141,38143,38145,38147,38149],{"class":99,"line":1407},[97,38137,14885],{"class":319},[97,38139,38140],{"class":111}," VGG16",[97,38142,323],{"class":103},[97,38144,30968],{"class":111},[97,38146,878],{"class":103},[97,38148,30973],{"class":111},[97,38150,30976],{"class":103},[97,38152,38153,38155,38157],{"class":99,"line":1413},[97,38154,30991],{"class":319},[97,38156,30994],{"class":370},[97,38158,30997],{"class":103},[97,38160,38161,38163,38165,38168,38170,38172,38174,38176],{"class":99,"line":1504},[97,38162,31007],{"class":370},[97,38164,323],{"class":103},[97,38166,38167],{"class":370},"VGG16",[97,38169,12626],{"class":103},[97,38171,31013],{"class":370},[97,38173,31016],{"class":103},[97,38175,31019],{"class":370},[97,38177,2167],{"class":103},[97,38179,38180],{"class":99,"line":1510},[97,38181,38182],{"class":191},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[97,38184,38185],{"class":99,"line":1522},[97,38186,38187],{"class":191},"        # 这里用的是灰度图\n",[97,38189,38190,38192,38195,38197],{"class":99,"line":1804},[97,38191,31035],{"class":370},[97,38193,38194],{"class":103},".block1",[97,38196,115],{"class":319},[97,38198,38199],{"class":103},"nn.Sequential(\n",[97,38201,38202,38205,38207,38209,38211,38213,38215,38217,38219,38221,38223,38225,38227,38229,38231,38233,38235],{"class":99,"line":1809},[97,38203,38204],{"class":103},"            nn.Conv2d(",[97,38206,31046],{"class":5407},[97,38208,115],{"class":319},[97,38210,537],{"class":370},[97,38212,698],{"class":103},[97,38214,31055],{"class":5407},[97,38216,115],{"class":319},[97,38218,523],{"class":370},[97,38220,698],{"class":103},[97,38222,31064],{"class":5407},[97,38224,115],{"class":319},[97,38226,392],{"class":370},[97,38228,698],{"class":103},[97,38230,31073],{"class":5407},[97,38232,115],{"class":319},[97,38234,537],{"class":370},[97,38236,38237],{"class":103},"),\n",[97,38239,38240],{"class":99,"line":1815},[97,38241,38242],{"class":103},"            nn.ReLU(),\n",[97,38244,38245,38247,38249,38251,38253,38255,38257,38259,38261,38263,38265,38267,38269,38271,38273,38275,38277],{"class":99,"line":1820},[97,38246,38204],{"class":103},[97,38248,31046],{"class":5407},[97,38250,115],{"class":319},[97,38252,523],{"class":370},[97,38254,698],{"class":103},[97,38256,31055],{"class":5407},[97,38258,115],{"class":319},[97,38260,523],{"class":370},[97,38262,698],{"class":103},[97,38264,31064],{"class":5407},[97,38266,115],{"class":319},[97,38268,392],{"class":370},[97,38270,698],{"class":103},[97,38272,31073],{"class":5407},[97,38274,115],{"class":319},[97,38276,537],{"class":370},[97,38278,38237],{"class":103},[97,38280,38281],{"class":99,"line":1834},[97,38282,38242],{"class":103},[97,38284,38285,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310],{"class":99,"line":1839},[97,38286,38287],{"class":103},"            nn.MaxPool2d(",[97,38289,31064],{"class":5407},[97,38291,115],{"class":319},[97,38293,398],{"class":370},[97,38295,698],{"class":103},[97,38297,31119],{"class":5407},[97,38299,115],{"class":319},[97,38301,398],{"class":370},[97,38303,698],{"class":103},[97,38305,31073],{"class":5407},[97,38307,115],{"class":319},[97,38309,511],{"class":370},[97,38311,329],{"class":103},[97,38313,38314],{"class":99,"line":1845},[97,38315,38316],{"class":103},"        )\n",[97,38318,38319],{"class":99,"line":1866},[97,38320,38321],{"class":191},"        # 第二层\n",[97,38323,38324,38326,38329,38331],{"class":99,"line":1871},[97,38325,31035],{"class":370},[97,38327,38328],{"class":103},".block2",[97,38330,115],{"class":319},[97,38332,38199],{"class":103},[97,38334,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367],{"class":99,"line":1885},[97,38336,38204],{"class":103},[97,38338,31046],{"class":5407},[97,38340,115],{"class":319},[97,38342,523],{"class":370},[97,38344,698],{"class":103},[97,38346,31055],{"class":5407},[97,38348,115],{"class":319},[97,38350,32260],{"class":370},[97,38352,698],{"class":103},[97,38354,31064],{"class":5407},[97,38356,115],{"class":319},[97,38358,392],{"class":370},[97,38360,698],{"class":103},[97,38362,31073],{"class":5407},[97,38364,115],{"class":319},[97,38366,537],{"class":370},[97,38368,38237],{"class":103},[97,38370,38371],{"class":99,"line":1890},[97,38372,38242],{"class":103},[97,38374,38375,38377,38379,38381,38383,38385,38387,38389,38391,38393,38395,38397,38399,38401,38403,38405,38407],{"class":99,"line":1919},[97,38376,38204],{"class":103},[97,38378,31046],{"class":5407},[97,38380,115],{"class":319},[97,38382,32260],{"class":370},[97,38384,698],{"class":103},[97,38386,31055],{"class":5407},[97,38388,115],{"class":319},[97,38390,32260],{"class":370},[97,38392,698],{"class":103},[97,38394,31064],{"class":5407},[97,38396,115],{"class":319},[97,38398,392],{"class":370},[97,38400,698],{"class":103},[97,38402,31073],{"class":5407},[97,38404,115],{"class":319},[97,38406,537],{"class":370},[97,38408,38237],{"class":103},[97,38410,38411],{"class":99,"line":1924},[97,38412,38242],{"class":103},[97,38414,38415,38417,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439],{"class":99,"line":1941},[97,38416,38287],{"class":103},[97,38418,31064],{"class":5407},[97,38420,115],{"class":319},[97,38422,398],{"class":370},[97,38424,698],{"class":103},[97,38426,31119],{"class":5407},[97,38428,115],{"class":319},[97,38430,398],{"class":370},[97,38432,698],{"class":103},[97,38434,31073],{"class":5407},[97,38436,115],{"class":319},[97,38438,511],{"class":370},[97,38440,329],{"class":103},[97,38442,38443],{"class":99,"line":1946},[97,38444,38316],{"class":103},[97,38446,38447],{"class":99,"line":1951},[97,38448,38449],{"class":191},"        # 第三层\n",[97,38451,38452,38454,38457,38459],{"class":99,"line":1956},[97,38453,31035],{"class":370},[97,38455,38456],{"class":103},".block3",[97,38458,115],{"class":319},[97,38460,38199],{"class":103},[97,38462,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495],{"class":99,"line":1970},[97,38464,38204],{"class":103},[97,38466,31046],{"class":5407},[97,38468,115],{"class":319},[97,38470,32260],{"class":370},[97,38472,698],{"class":103},[97,38474,31055],{"class":5407},[97,38476,115],{"class":319},[97,38478,35060],{"class":370},[97,38480,698],{"class":103},[97,38482,31064],{"class":5407},[97,38484,115],{"class":319},[97,38486,392],{"class":370},[97,38488,698],{"class":103},[97,38490,31073],{"class":5407},[97,38492,115],{"class":319},[97,38494,537],{"class":370},[97,38496,38237],{"class":103},[97,38498,38499],{"class":99,"line":1975},[97,38500,38242],{"class":103},[97,38502,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535],{"class":99,"line":2768},[97,38504,38204],{"class":103},[97,38506,31046],{"class":5407},[97,38508,115],{"class":319},[97,38510,35060],{"class":370},[97,38512,698],{"class":103},[97,38514,31055],{"class":5407},[97,38516,115],{"class":319},[97,38518,35060],{"class":370},[97,38520,698],{"class":103},[97,38522,31064],{"class":5407},[97,38524,115],{"class":319},[97,38526,392],{"class":370},[97,38528,698],{"class":103},[97,38530,31073],{"class":5407},[97,38532,115],{"class":319},[97,38534,537],{"class":370},[97,38536,38237],{"class":103},[97,38538,38539],{"class":99,"line":2782},[97,38540,38242],{"class":103},[97,38542,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575],{"class":99,"line":2790},[97,38544,38204],{"class":103},[97,38546,31046],{"class":5407},[97,38548,115],{"class":319},[97,38550,35060],{"class":370},[97,38552,698],{"class":103},[97,38554,31055],{"class":5407},[97,38556,115],{"class":319},[97,38558,35060],{"class":370},[97,38560,698],{"class":103},[97,38562,31064],{"class":5407},[97,38564,115],{"class":319},[97,38566,392],{"class":370},[97,38568,698],{"class":103},[97,38570,31073],{"class":5407},[97,38572,115],{"class":319},[97,38574,537],{"class":370},[97,38576,38237],{"class":103},[97,38578,38579],{"class":99,"line":2795},[97,38580,38242],{"class":103},[97,38582,38583,38585,38587,38589,38591,38593,38595,38597,38599,38601,38603,38605,38607],{"class":99,"line":2801},[97,38584,38287],{"class":103},[97,38586,31064],{"class":5407},[97,38588,115],{"class":319},[97,38590,398],{"class":370},[97,38592,698],{"class":103},[97,38594,31119],{"class":5407},[97,38596,115],{"class":319},[97,38598,398],{"class":370},[97,38600,698],{"class":103},[97,38602,31073],{"class":5407},[97,38604,115],{"class":319},[97,38606,511],{"class":370},[97,38608,329],{"class":103},[97,38610,38611],{"class":99,"line":2807},[97,38612,38316],{"class":103},[97,38614,38615],{"class":99,"line":2812},[97,38616,38617],{"class":191},"        # 第四层\n",[97,38619,38620,38622,38625,38627],{"class":99,"line":8139},[97,38621,31035],{"class":370},[97,38623,38624],{"class":103},".block4",[97,38626,115],{"class":319},[97,38628,38199],{"class":103},[97,38630,38631,38633,38635,38637,38639,38641,38643,38645,38648,38650,38652,38654,38656,38658,38660,38662,38664],{"class":99,"line":8163},[97,38632,38204],{"class":103},[97,38634,31046],{"class":5407},[97,38636,115],{"class":319},[97,38638,35060],{"class":370},[97,38640,698],{"class":103},[97,38642,31055],{"class":5407},[97,38644,115],{"class":319},[97,38646,38647],{"class":370},"512",[97,38649,698],{"class":103},[97,38651,31064],{"class":5407},[97,38653,115],{"class":319},[97,38655,392],{"class":370},[97,38657,698],{"class":103},[97,38659,31073],{"class":5407},[97,38661,115],{"class":319},[97,38663,537],{"class":370},[97,38665,38237],{"class":103},[97,38667,38668],{"class":99,"line":8168},[97,38669,38242],{"class":103},[97,38671,38672,38674,38676,38678,38680,38682,38684,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704],{"class":99,"line":8174},[97,38673,38204],{"class":103},[97,38675,31046],{"class":5407},[97,38677,115],{"class":319},[97,38679,38647],{"class":370},[97,38681,698],{"class":103},[97,38683,31055],{"class":5407},[97,38685,115],{"class":319},[97,38687,38647],{"class":370},[97,38689,698],{"class":103},[97,38691,31064],{"class":5407},[97,38693,115],{"class":319},[97,38695,392],{"class":370},[97,38697,698],{"class":103},[97,38699,31073],{"class":5407},[97,38701,115],{"class":319},[97,38703,537],{"class":370},[97,38705,38237],{"class":103},[97,38707,38708],{"class":99,"line":8201},[97,38709,38242],{"class":103},[97,38711,38712,38714,38716,38718,38720,38722,38724,38726,38728,38730,38732,38734,38736,38738,38740,38742,38744],{"class":99,"line":8206},[97,38713,38204],{"class":103},[97,38715,31046],{"class":5407},[97,38717,115],{"class":319},[97,38719,38647],{"class":370},[97,38721,698],{"class":103},[97,38723,31055],{"class":5407},[97,38725,115],{"class":319},[97,38727,38647],{"class":370},[97,38729,698],{"class":103},[97,38731,31064],{"class":5407},[97,38733,115],{"class":319},[97,38735,392],{"class":370},[97,38737,698],{"class":103},[97,38739,31073],{"class":5407},[97,38741,115],{"class":319},[97,38743,537],{"class":370},[97,38745,38237],{"class":103},[97,38747,38748],{"class":99,"line":8212},[97,38749,38242],{"class":103},[97,38751,38752,38754,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776],{"class":99,"line":8224},[97,38753,38287],{"class":103},[97,38755,31064],{"class":5407},[97,38757,115],{"class":319},[97,38759,398],{"class":370},[97,38761,698],{"class":103},[97,38763,31119],{"class":5407},[97,38765,115],{"class":319},[97,38767,398],{"class":370},[97,38769,698],{"class":103},[97,38771,31073],{"class":5407},[97,38773,115],{"class":319},[97,38775,511],{"class":370},[97,38777,329],{"class":103},[97,38779,38780],{"class":99,"line":8236},[97,38781,38316],{"class":103},[97,38783,38784],{"class":99,"line":8248},[97,38785,38786],{"class":191},"        # 第五层\n",[97,38788,38789,38791,38794,38796],{"class":99,"line":9907},[97,38790,31035],{"class":370},[97,38792,38793],{"class":103},".block5",[97,38795,115],{"class":319},[97,38797,38199],{"class":103},[97,38799,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828,38830,38832],{"class":99,"line":9932},[97,38801,38204],{"class":103},[97,38803,31046],{"class":5407},[97,38805,115],{"class":319},[97,38807,38647],{"class":370},[97,38809,698],{"class":103},[97,38811,31055],{"class":5407},[97,38813,115],{"class":319},[97,38815,38647],{"class":370},[97,38817,698],{"class":103},[97,38819,31064],{"class":5407},[97,38821,115],{"class":319},[97,38823,392],{"class":370},[97,38825,698],{"class":103},[97,38827,31073],{"class":5407},[97,38829,115],{"class":319},[97,38831,537],{"class":370},[97,38833,38237],{"class":103},[97,38835,38836],{"class":99,"line":9955},[97,38837,38242],{"class":103},[97,38839,38840,38842,38844,38846,38848,38850,38852,38854,38856,38858,38860,38862,38864,38866,38868,38870,38872],{"class":99,"line":9979},[97,38841,38204],{"class":103},[97,38843,31046],{"class":5407},[97,38845,115],{"class":319},[97,38847,38647],{"class":370},[97,38849,698],{"class":103},[97,38851,31055],{"class":5407},[97,38853,115],{"class":319},[97,38855,38647],{"class":370},[97,38857,698],{"class":103},[97,38859,31064],{"class":5407},[97,38861,115],{"class":319},[97,38863,392],{"class":370},[97,38865,698],{"class":103},[97,38867,31073],{"class":5407},[97,38869,115],{"class":319},[97,38871,537],{"class":370},[97,38873,38237],{"class":103},[97,38875,38876],{"class":99,"line":9984},[97,38877,38242],{"class":103},[97,38879,38880,38882,38884,38886,38888,38890,38892,38894,38896,38898,38900,38902,38904,38906,38908,38910,38912],{"class":99,"line":9989},[97,38881,38204],{"class":103},[97,38883,31046],{"class":5407},[97,38885,115],{"class":319},[97,38887,38647],{"class":370},[97,38889,698],{"class":103},[97,38891,31055],{"class":5407},[97,38893,115],{"class":319},[97,38895,38647],{"class":370},[97,38897,698],{"class":103},[97,38899,31064],{"class":5407},[97,38901,115],{"class":319},[97,38903,392],{"class":370},[97,38905,698],{"class":103},[97,38907,31073],{"class":5407},[97,38909,115],{"class":319},[97,38911,537],{"class":370},[97,38913,38237],{"class":103},[97,38915,38916],{"class":99,"line":9994},[97,38917,38242],{"class":103},[97,38919,38920,38922,38924,38926,38928,38930,38932,38934,38936,38938,38940,38942,38944],{"class":99,"line":10003},[97,38921,38287],{"class":103},[97,38923,31064],{"class":5407},[97,38925,115],{"class":319},[97,38927,398],{"class":370},[97,38929,698],{"class":103},[97,38931,31119],{"class":5407},[97,38933,115],{"class":319},[97,38935,398],{"class":370},[97,38937,698],{"class":103},[97,38939,31073],{"class":5407},[97,38941,115],{"class":319},[97,38943,511],{"class":370},[97,38945,329],{"class":103},[97,38947,38948],{"class":99,"line":10008},[97,38949,38316],{"class":103},[97,38951,38952],{"class":99,"line":10014},[97,38953,38954],{"class":191},"        # 全连接层\n",[97,38956,38957,38959,38962,38964],{"class":99,"line":10035},[97,38958,31035],{"class":370},[97,38960,38961],{"class":103},".block6",[97,38963,115],{"class":319},[97,38965,38199],{"class":103},[97,38967,38968],{"class":99,"line":10041},[97,38969,38970],{"class":191},"            # 平展操作\n",[97,38972,38973],{"class":99,"line":10055},[97,38974,38975],{"class":191},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[97,38977,38978],{"class":99,"line":10061},[97,38979,38980],{"class":103},"            nn.Flatten(),\n",[97,38982,38983,38986,38988,38990,38992,38994,38996,38998,39000],{"class":99,"line":10088},[97,38984,38985],{"class":103},"            nn.Linear(",[97,38987,689],{"class":370},[97,38989,775],{"class":319},[97,38991,689],{"class":370},[97,38993,775],{"class":319},[97,38995,38647],{"class":370},[97,38997,698],{"class":103},[97,38999,35060],{"class":370},[97,39001,38237],{"class":103},[97,39003,39004],{"class":99,"line":10097},[97,39005,38242],{"class":103},[97,39007,39008,39010,39012,39014,39016],{"class":99,"line":10103},[97,39009,38985],{"class":103},[97,39011,35060],{"class":370},[97,39013,698],{"class":103},[97,39015,32260],{"class":370},[97,39017,38237],{"class":103},[97,39019,39020],{"class":99,"line":10111},[97,39021,38242],{"class":103},[97,39023,39024,39026,39028,39030,39032],{"class":99,"line":10116},[97,39025,38985],{"class":103},[97,39027,32260],{"class":370},[97,39029,698],{"class":103},[97,39031,766],{"class":370},[97,39033,329],{"class":103},[97,39035,39036],{"class":99,"line":16794},[97,39037,38316],{"class":103},[97,39039,39040],{"class":99,"line":16800},[97,39041,2591],{"emptyLinePlaceholder":249},[97,39043,39044],{"class":99,"line":16823},[97,39045,39046],{"class":191},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[97,39048,39049],{"class":99,"line":16829},[97,39050,39051],{"class":191},"        # 循环遍历模型\n",[97,39053,39054,39056,39059,39061,39064],{"class":99,"line":16852},[97,39055,3594],{"class":319},[97,39057,39058],{"class":103}," m ",[97,39060,26233],{"class":319},[97,39062,39063],{"class":370}," self",[97,39065,39066],{"class":103},".modules():\n",[97,39068,39069],{"class":99,"line":16866},[97,39070,39071],{"class":191},"            # print(m)\n",[97,39073,39074,39076,39079],{"class":99,"line":16886},[97,39075,4833],{"class":319},[97,39077,39078],{"class":370}," isinstance",[97,39080,39081],{"class":103},"(m,nn.Conv2d):\n",[97,39083,39084],{"class":99,"line":16892},[97,39085,39086],{"class":191},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[97,39088,39089,39092,39095,39097,39100],{"class":99,"line":16903},[97,39090,39091],{"class":103},"                nn.init.kaiming_normal_(m.weight,",[97,39093,39094],{"class":5407},"nonlinearity",[97,39096,115],{"class":319},[97,39098,39099],{"class":118},"'relu'",[97,39101,329],{"class":103},[97,39103,39104],{"class":99,"line":16926},[97,39105,39106],{"class":191},"                # 判断b参数是否存在\n",[97,39108,39109,39112,39115,39118,39121,39124],{"class":99,"line":16948},[97,39110,39111],{"class":319},"                if",[97,39113,39114],{"class":103}," m.bias ",[97,39116,39117],{"class":319},"is",[97,39119,39120],{"class":319}," not",[97,39122,39123],{"class":370}," None",[97,39125,3930],{"class":103},[97,39127,39128],{"class":99,"line":16953},[97,39129,39130],{"class":191},"                    # 如果参数不存在的化初始化b=0\n",[97,39132,39133,39136,39138],{"class":99,"line":16959},[97,39134,39135],{"class":103},"                    nn.init.constant_(m.bias,",[97,39137,511],{"class":370},[97,39139,329],{"class":103},[97,39141,39142],{"class":99,"line":16973},[97,39143,39144],{"class":191},"            # 全连接层初始化\n",[97,39146,39147,39150,39152],{"class":99,"line":16986},[97,39148,39149],{"class":319},"            elif",[97,39151,39078],{"class":370},[97,39153,39154],{"class":103},"(m,nn.Linear):\n",[97,39156,39157],{"class":99,"line":16991},[97,39158,39159],{"class":191},"                # 这个初始化方法是利用的是正太分布的方式\n",[97,39161,39162],{"class":99,"line":17005},[97,39163,39164],{"class":191},"                # 均值为0，方差为0.01\n",[97,39166,39167,39170,39172,39174,39177],{"class":99,"line":17010},[97,39168,39169],{"class":103},"                nn.init.normal_(m.weight,",[97,39171,511],{"class":370},[97,39173,698],{"class":103},[97,39175,39176],{"class":370},"0.01",[97,39178,329],{"class":103},[97,39180,39181],{"class":99,"line":17016},[97,39182,39183],{"class":191},"                # 初始化b参数\n",[97,39185,39186,39188,39190,39192,39194,39196],{"class":99,"line":17021},[97,39187,39111],{"class":319},[97,39189,39114],{"class":103},[97,39191,39117],{"class":319},[97,39193,39120],{"class":319},[97,39195,39123],{"class":370},[97,39197,3930],{"class":103},[97,39199,39200,39202,39204],{"class":99,"line":17035},[97,39201,39135],{"class":103},[97,39203,511],{"class":370},[97,39205,329],{"class":103},[97,39207,39208],{"class":99,"line":17040},[97,39209,2591],{"emptyLinePlaceholder":249},[97,39211,39212],{"class":99,"line":17045},[97,39213,35355],{"class":191},[97,39215,39216,39218,39220],{"class":99,"line":17059},[97,39217,30991],{"class":319},[97,39219,31283],{"class":111},[97,39221,31286],{"class":103},[97,39223,39224,39226,39228,39230],{"class":99,"line":17071},[97,39225,31291],{"class":103},[97,39227,115],{"class":319},[97,39229,31013],{"class":370},[97,39231,39232],{"class":103},".block1(x)\n",[97,39234,39235,39237,39239,39241],{"class":99,"line":17076},[97,39236,31291],{"class":103},[97,39238,115],{"class":319},[97,39240,31013],{"class":370},[97,39242,39243],{"class":103},".block2(x)\n",[97,39245,39246,39248,39250,39252],{"class":99,"line":17089},[97,39247,31291],{"class":103},[97,39249,115],{"class":319},[97,39251,31013],{"class":370},[97,39253,39254],{"class":103},".block3(x)\n",[97,39256,39257,39259,39261,39263],{"class":99,"line":17094},[97,39258,31291],{"class":103},[97,39260,115],{"class":319},[97,39262,31013],{"class":370},[97,39264,39265],{"class":103},".block4(x)\n",[97,39267,39268,39270,39272,39274],{"class":99,"line":17099},[97,39269,31291],{"class":103},[97,39271,115],{"class":319},[97,39273,31013],{"class":370},[97,39275,39276],{"class":103},".block5(x)\n",[97,39278,39279,39281,39283,39285],{"class":99,"line":17104},[97,39280,31291],{"class":103},[97,39282,115],{"class":319},[97,39284,31013],{"class":370},[97,39286,39287],{"class":103},".block6(x)\n",[97,39289,39290,39292],{"class":99,"line":17117},[97,39291,14943],{"class":319},[97,39293,31399],{"class":103},[97,39295,39296],{"class":99,"line":17122},[97,39297,2591],{"emptyLinePlaceholder":249},[97,39299,39300],{"class":99,"line":32823},[97,39301,39302],{"class":191},"# 验证模型\n",[97,39304,39305,39307,39309,39311,39314],{"class":99,"line":32829},[97,39306,1723],{"class":319},[97,39308,31410],{"class":370},[97,39310,3140],{"class":319},[97,39312,39313],{"class":118},"'__main__'",[97,39315,3930],{"class":103},[97,39317,39318,39320,39322,39324,39326,39328,39330,39332,39334],{"class":99,"line":32835},[97,39319,31427],{"class":103},[97,39321,115],{"class":319},[97,39323,30641],{"class":103},[97,39325,31434],{"class":118},[97,39327,1896],{"class":319},[97,39329,31439],{"class":103},[97,39331,1893],{"class":319},[97,39333,30666],{"class":118},[97,39335,329],{"class":103},[97,39337,39338,39340],{"class":99,"line":32841},[97,39339,31489],{"class":370},[97,39341,30675],{"class":103},[97,39343,39344,39346,39348],{"class":99,"line":32847},[97,39345,31479],{"class":103},[97,39347,115],{"class":319},[97,39349,39350],{"class":103},"VGG16().to(device)\n",[97,39352,39353,39355,39357,39359,39361,39363,39365,39367],{"class":99,"line":32858},[97,39354,31489],{"class":370},[97,39356,31492],{"class":103},[97,39358,537],{"class":370},[97,39360,698],{"class":103},[97,39362,31691],{"class":370},[97,39364,698],{"class":103},[97,39366,31691],{"class":370},[97,39368,31505],{"class":103},[138,39370,39371],{"start":195},[70,39372,39373],{},"训练代码",[24,39375,39376],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[24,39378,39379],{},"解决方式:",[24,39381,39382],{},"①权重初始化",[87,39384,39386],{"className":30568,"code":39385,"language":30570,"meta":92,"style":92},"# 权重初始化,保证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",[94,39387,39388,39393,39398,39410,39415,39423,39428,39441,39446,39460,39465,39474,39479,39488,39493,39498,39511,39516,39530],{"__ignoreMap":92},[97,39389,39390],{"class":99,"line":100},[97,39391,39392],{"class":191},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[97,39394,39395],{"class":99,"line":195},[97,39396,39397],{"class":191},"# 循环遍历模型\n",[97,39399,39400,39402,39404,39406,39408],{"class":99,"line":241},[97,39401,3216],{"class":319},[97,39403,39058],{"class":103},[97,39405,26233],{"class":319},[97,39407,39063],{"class":370},[97,39409,39066],{"class":103},[97,39411,39412],{"class":99,"line":1387},[97,39413,39414],{"class":191},"    # print(m)\n",[97,39416,39417,39419,39421],{"class":99,"line":1393},[97,39418,3292],{"class":319},[97,39420,39078],{"class":370},[97,39422,39081],{"class":103},[97,39424,39425],{"class":99,"line":1407},[97,39426,39427],{"class":191},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[97,39429,39430,39433,39435,39437,39439],{"class":99,"line":1413},[97,39431,39432],{"class":103},"        nn.init.kaiming_normal_(m.weight,",[97,39434,39094],{"class":5407},[97,39436,115],{"class":319},[97,39438,39099],{"class":118},[97,39440,329],{"class":103},[97,39442,39443],{"class":99,"line":1504},[97,39444,39445],{"class":191},"        # 判断b参数是否存在\n",[97,39447,39448,39450,39452,39454,39456,39458],{"class":99,"line":1510},[97,39449,2688],{"class":319},[97,39451,39114],{"class":103},[97,39453,39117],{"class":319},[97,39455,39120],{"class":319},[97,39457,39123],{"class":370},[97,39459,3930],{"class":103},[97,39461,39462],{"class":99,"line":1522},[97,39463,39464],{"class":191},"            # 如果参数不存在的化初始化b=0\n",[97,39466,39467,39470,39472],{"class":99,"line":1804},[97,39468,39469],{"class":103},"            nn.init.constant_(m.bias,",[97,39471,511],{"class":370},[97,39473,329],{"class":103},[97,39475,39476],{"class":99,"line":1809},[97,39477,39478],{"class":191},"    # 全连接层初始化\n",[97,39480,39481,39484,39486],{"class":99,"line":1815},[97,39482,39483],{"class":319},"    elif",[97,39485,39078],{"class":370},[97,39487,39154],{"class":103},[97,39489,39490],{"class":99,"line":1820},[97,39491,39492],{"class":191},"        # 这个初始化方法是利用的是正太分布的方式\n",[97,39494,39495],{"class":99,"line":1834},[97,39496,39497],{"class":191},"        # 均值为0，方差为0.01\n",[97,39499,39500,39503,39505,39507,39509],{"class":99,"line":1839},[97,39501,39502],{"class":103},"        nn.init.normal_(m.weight,",[97,39504,511],{"class":370},[97,39506,698],{"class":103},[97,39508,39176],{"class":370},[97,39510,329],{"class":103},[97,39512,39513],{"class":99,"line":1845},[97,39514,39515],{"class":191},"        # 初始化b参数\n",[97,39517,39518,39520,39522,39524,39526,39528],{"class":99,"line":1866},[97,39519,2688],{"class":319},[97,39521,39114],{"class":103},[97,39523,39117],{"class":319},[97,39525,39120],{"class":319},[97,39527,39123],{"class":370},[97,39529,3930],{"class":103},[97,39531,39532,39534,39536],{"class":99,"line":1871},[97,39533,39469],{"class":103},[97,39535,511],{"class":370},[97,39537,329],{"class":103},[24,39539,39540],{},"②尽可能地增加批次",[24,39542,39543],{},"训练完整代码：",[87,39545,39546],{"className":30568,"code":38089,"language":30570,"meta":92,"style":92},[94,39547,39548,39554,39564,39574,39584,39588,39604,39612,39630,39634,39638,39648,39684,39688,39724,39728,39756,39760,39764,39774,39810,39814,39850,39854,39882,39886,39890,39900,39936,39940,39976,39980,40016,40020,40048,40052,40056,40066,40102,40106,40142,40146,40182,40186,40214,40218,40222,40232,40268,40272,40308,40312,40348,40352,40380,40384,40388,40398,40402,40406,40410,40430,40434,40446,40450,40462,40466,40470,40474,40478,40490,40494,40502,40506,40518,40522,40536,40540,40548,40552,40560,40564,40568,40580,40584,40598,40606,40610,40614,40622,40632,40642,40652,40662,40672,40682,40688,40692,40696,40708,40728,40734,40742],{"__ignoreMap":92},[97,39549,39550,39552],{"class":99,"line":100},[97,39551,30582],{"class":319},[97,39553,30585],{"class":103},[97,39555,39556,39558,39560,39562],{"class":99,"line":195},[97,39557,30927],{"class":319},[97,39559,38104],{"class":103},[97,39561,30582],{"class":319},[97,39563,38109],{"class":103},[97,39565,39566,39568,39570,39572],{"class":99,"line":241},[97,39567,30927],{"class":319},[97,39569,30930],{"class":103},[97,39571,30582],{"class":319},[97,39573,30935],{"class":103},[97,39575,39576,39578,39580,39582],{"class":99,"line":1387},[97,39577,30927],{"class":319},[97,39579,30947],{"class":103},[97,39581,30582],{"class":319},[97,39583,30952],{"class":103},[97,39585,39586],{"class":99,"line":1393},[97,39587,2591],{"emptyLinePlaceholder":249},[97,39589,39590,39592,39594,39596,39598,39600,39602],{"class":99,"line":1407},[97,39591,14885],{"class":319},[97,39593,38140],{"class":111},[97,39595,323],{"class":103},[97,39597,30968],{"class":111},[97,39599,878],{"class":103},[97,39601,30973],{"class":111},[97,39603,30976],{"class":103},[97,39605,39606,39608,39610],{"class":99,"line":1413},[97,39607,30991],{"class":319},[97,39609,30994],{"class":370},[97,39611,30997],{"class":103},[97,39613,39614,39616,39618,39620,39622,39624,39626,39628],{"class":99,"line":1504},[97,39615,31007],{"class":370},[97,39617,323],{"class":103},[97,39619,38167],{"class":370},[97,39621,12626],{"class":103},[97,39623,31013],{"class":370},[97,39625,31016],{"class":103},[97,39627,31019],{"class":370},[97,39629,2167],{"class":103},[97,39631,39632],{"class":99,"line":1510},[97,39633,38182],{"class":191},[97,39635,39636],{"class":99,"line":1522},[97,39637,38187],{"class":191},[97,39639,39640,39642,39644,39646],{"class":99,"line":1804},[97,39641,31035],{"class":370},[97,39643,38194],{"class":103},[97,39645,115],{"class":319},[97,39647,38199],{"class":103},[97,39649,39650,39652,39654,39656,39658,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682],{"class":99,"line":1809},[97,39651,38204],{"class":103},[97,39653,31046],{"class":5407},[97,39655,115],{"class":319},[97,39657,537],{"class":370},[97,39659,698],{"class":103},[97,39661,31055],{"class":5407},[97,39663,115],{"class":319},[97,39665,523],{"class":370},[97,39667,698],{"class":103},[97,39669,31064],{"class":5407},[97,39671,115],{"class":319},[97,39673,392],{"class":370},[97,39675,698],{"class":103},[97,39677,31073],{"class":5407},[97,39679,115],{"class":319},[97,39681,537],{"class":370},[97,39683,38237],{"class":103},[97,39685,39686],{"class":99,"line":1815},[97,39687,38242],{"class":103},[97,39689,39690,39692,39694,39696,39698,39700,39702,39704,39706,39708,39710,39712,39714,39716,39718,39720,39722],{"class":99,"line":1820},[97,39691,38204],{"class":103},[97,39693,31046],{"class":5407},[97,39695,115],{"class":319},[97,39697,523],{"class":370},[97,39699,698],{"class":103},[97,39701,31055],{"class":5407},[97,39703,115],{"class":319},[97,39705,523],{"class":370},[97,39707,698],{"class":103},[97,39709,31064],{"class":5407},[97,39711,115],{"class":319},[97,39713,392],{"class":370},[97,39715,698],{"class":103},[97,39717,31073],{"class":5407},[97,39719,115],{"class":319},[97,39721,537],{"class":370},[97,39723,38237],{"class":103},[97,39725,39726],{"class":99,"line":1834},[97,39727,38242],{"class":103},[97,39729,39730,39732,39734,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754],{"class":99,"line":1839},[97,39731,38287],{"class":103},[97,39733,31064],{"class":5407},[97,39735,115],{"class":319},[97,39737,398],{"class":370},[97,39739,698],{"class":103},[97,39741,31119],{"class":5407},[97,39743,115],{"class":319},[97,39745,398],{"class":370},[97,39747,698],{"class":103},[97,39749,31073],{"class":5407},[97,39751,115],{"class":319},[97,39753,511],{"class":370},[97,39755,329],{"class":103},[97,39757,39758],{"class":99,"line":1845},[97,39759,38316],{"class":103},[97,39761,39762],{"class":99,"line":1866},[97,39763,38321],{"class":191},[97,39765,39766,39768,39770,39772],{"class":99,"line":1871},[97,39767,31035],{"class":370},[97,39769,38328],{"class":103},[97,39771,115],{"class":319},[97,39773,38199],{"class":103},[97,39775,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806,39808],{"class":99,"line":1885},[97,39777,38204],{"class":103},[97,39779,31046],{"class":5407},[97,39781,115],{"class":319},[97,39783,523],{"class":370},[97,39785,698],{"class":103},[97,39787,31055],{"class":5407},[97,39789,115],{"class":319},[97,39791,32260],{"class":370},[97,39793,698],{"class":103},[97,39795,31064],{"class":5407},[97,39797,115],{"class":319},[97,39799,392],{"class":370},[97,39801,698],{"class":103},[97,39803,31073],{"class":5407},[97,39805,115],{"class":319},[97,39807,537],{"class":370},[97,39809,38237],{"class":103},[97,39811,39812],{"class":99,"line":1890},[97,39813,38242],{"class":103},[97,39815,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834,39836,39838,39840,39842,39844,39846,39848],{"class":99,"line":1919},[97,39817,38204],{"class":103},[97,39819,31046],{"class":5407},[97,39821,115],{"class":319},[97,39823,32260],{"class":370},[97,39825,698],{"class":103},[97,39827,31055],{"class":5407},[97,39829,115],{"class":319},[97,39831,32260],{"class":370},[97,39833,698],{"class":103},[97,39835,31064],{"class":5407},[97,39837,115],{"class":319},[97,39839,392],{"class":370},[97,39841,698],{"class":103},[97,39843,31073],{"class":5407},[97,39845,115],{"class":319},[97,39847,537],{"class":370},[97,39849,38237],{"class":103},[97,39851,39852],{"class":99,"line":1924},[97,39853,38242],{"class":103},[97,39855,39856,39858,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880],{"class":99,"line":1941},[97,39857,38287],{"class":103},[97,39859,31064],{"class":5407},[97,39861,115],{"class":319},[97,39863,398],{"class":370},[97,39865,698],{"class":103},[97,39867,31119],{"class":5407},[97,39869,115],{"class":319},[97,39871,398],{"class":370},[97,39873,698],{"class":103},[97,39875,31073],{"class":5407},[97,39877,115],{"class":319},[97,39879,511],{"class":370},[97,39881,329],{"class":103},[97,39883,39884],{"class":99,"line":1946},[97,39885,38316],{"class":103},[97,39887,39888],{"class":99,"line":1951},[97,39889,38449],{"class":191},[97,39891,39892,39894,39896,39898],{"class":99,"line":1956},[97,39893,31035],{"class":370},[97,39895,38456],{"class":103},[97,39897,115],{"class":319},[97,39899,38199],{"class":103},[97,39901,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934],{"class":99,"line":1970},[97,39903,38204],{"class":103},[97,39905,31046],{"class":5407},[97,39907,115],{"class":319},[97,39909,32260],{"class":370},[97,39911,698],{"class":103},[97,39913,31055],{"class":5407},[97,39915,115],{"class":319},[97,39917,35060],{"class":370},[97,39919,698],{"class":103},[97,39921,31064],{"class":5407},[97,39923,115],{"class":319},[97,39925,392],{"class":370},[97,39927,698],{"class":103},[97,39929,31073],{"class":5407},[97,39931,115],{"class":319},[97,39933,537],{"class":370},[97,39935,38237],{"class":103},[97,39937,39938],{"class":99,"line":1975},[97,39939,38242],{"class":103},[97,39941,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972,39974],{"class":99,"line":2768},[97,39943,38204],{"class":103},[97,39945,31046],{"class":5407},[97,39947,115],{"class":319},[97,39949,35060],{"class":370},[97,39951,698],{"class":103},[97,39953,31055],{"class":5407},[97,39955,115],{"class":319},[97,39957,35060],{"class":370},[97,39959,698],{"class":103},[97,39961,31064],{"class":5407},[97,39963,115],{"class":319},[97,39965,392],{"class":370},[97,39967,698],{"class":103},[97,39969,31073],{"class":5407},[97,39971,115],{"class":319},[97,39973,537],{"class":370},[97,39975,38237],{"class":103},[97,39977,39978],{"class":99,"line":2782},[97,39979,38242],{"class":103},[97,39981,39982,39984,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012,40014],{"class":99,"line":2790},[97,39983,38204],{"class":103},[97,39985,31046],{"class":5407},[97,39987,115],{"class":319},[97,39989,35060],{"class":370},[97,39991,698],{"class":103},[97,39993,31055],{"class":5407},[97,39995,115],{"class":319},[97,39997,35060],{"class":370},[97,39999,698],{"class":103},[97,40001,31064],{"class":5407},[97,40003,115],{"class":319},[97,40005,392],{"class":370},[97,40007,698],{"class":103},[97,40009,31073],{"class":5407},[97,40011,115],{"class":319},[97,40013,537],{"class":370},[97,40015,38237],{"class":103},[97,40017,40018],{"class":99,"line":2795},[97,40019,38242],{"class":103},[97,40021,40022,40024,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046],{"class":99,"line":2801},[97,40023,38287],{"class":103},[97,40025,31064],{"class":5407},[97,40027,115],{"class":319},[97,40029,398],{"class":370},[97,40031,698],{"class":103},[97,40033,31119],{"class":5407},[97,40035,115],{"class":319},[97,40037,398],{"class":370},[97,40039,698],{"class":103},[97,40041,31073],{"class":5407},[97,40043,115],{"class":319},[97,40045,511],{"class":370},[97,40047,329],{"class":103},[97,40049,40050],{"class":99,"line":2807},[97,40051,38316],{"class":103},[97,40053,40054],{"class":99,"line":2812},[97,40055,38617],{"class":191},[97,40057,40058,40060,40062,40064],{"class":99,"line":8139},[97,40059,31035],{"class":370},[97,40061,38624],{"class":103},[97,40063,115],{"class":319},[97,40065,38199],{"class":103},[97,40067,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098,40100],{"class":99,"line":8163},[97,40069,38204],{"class":103},[97,40071,31046],{"class":5407},[97,40073,115],{"class":319},[97,40075,35060],{"class":370},[97,40077,698],{"class":103},[97,40079,31055],{"class":5407},[97,40081,115],{"class":319},[97,40083,38647],{"class":370},[97,40085,698],{"class":103},[97,40087,31064],{"class":5407},[97,40089,115],{"class":319},[97,40091,392],{"class":370},[97,40093,698],{"class":103},[97,40095,31073],{"class":5407},[97,40097,115],{"class":319},[97,40099,537],{"class":370},[97,40101,38237],{"class":103},[97,40103,40104],{"class":99,"line":8168},[97,40105,38242],{"class":103},[97,40107,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138,40140],{"class":99,"line":8174},[97,40109,38204],{"class":103},[97,40111,31046],{"class":5407},[97,40113,115],{"class":319},[97,40115,38647],{"class":370},[97,40117,698],{"class":103},[97,40119,31055],{"class":5407},[97,40121,115],{"class":319},[97,40123,38647],{"class":370},[97,40125,698],{"class":103},[97,40127,31064],{"class":5407},[97,40129,115],{"class":319},[97,40131,392],{"class":370},[97,40133,698],{"class":103},[97,40135,31073],{"class":5407},[97,40137,115],{"class":319},[97,40139,537],{"class":370},[97,40141,38237],{"class":103},[97,40143,40144],{"class":99,"line":8201},[97,40145,38242],{"class":103},[97,40147,40148,40150,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178,40180],{"class":99,"line":8206},[97,40149,38204],{"class":103},[97,40151,31046],{"class":5407},[97,40153,115],{"class":319},[97,40155,38647],{"class":370},[97,40157,698],{"class":103},[97,40159,31055],{"class":5407},[97,40161,115],{"class":319},[97,40163,38647],{"class":370},[97,40165,698],{"class":103},[97,40167,31064],{"class":5407},[97,40169,115],{"class":319},[97,40171,392],{"class":370},[97,40173,698],{"class":103},[97,40175,31073],{"class":5407},[97,40177,115],{"class":319},[97,40179,537],{"class":370},[97,40181,38237],{"class":103},[97,40183,40184],{"class":99,"line":8212},[97,40185,38242],{"class":103},[97,40187,40188,40190,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212],{"class":99,"line":8224},[97,40189,38287],{"class":103},[97,40191,31064],{"class":5407},[97,40193,115],{"class":319},[97,40195,398],{"class":370},[97,40197,698],{"class":103},[97,40199,31119],{"class":5407},[97,40201,115],{"class":319},[97,40203,398],{"class":370},[97,40205,698],{"class":103},[97,40207,31073],{"class":5407},[97,40209,115],{"class":319},[97,40211,511],{"class":370},[97,40213,329],{"class":103},[97,40215,40216],{"class":99,"line":8236},[97,40217,38316],{"class":103},[97,40219,40220],{"class":99,"line":8248},[97,40221,38786],{"class":191},[97,40223,40224,40226,40228,40230],{"class":99,"line":9907},[97,40225,31035],{"class":370},[97,40227,38793],{"class":103},[97,40229,115],{"class":319},[97,40231,38199],{"class":103},[97,40233,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254,40256,40258,40260,40262,40264,40266],{"class":99,"line":9932},[97,40235,38204],{"class":103},[97,40237,31046],{"class":5407},[97,40239,115],{"class":319},[97,40241,38647],{"class":370},[97,40243,698],{"class":103},[97,40245,31055],{"class":5407},[97,40247,115],{"class":319},[97,40249,38647],{"class":370},[97,40251,698],{"class":103},[97,40253,31064],{"class":5407},[97,40255,115],{"class":319},[97,40257,392],{"class":370},[97,40259,698],{"class":103},[97,40261,31073],{"class":5407},[97,40263,115],{"class":319},[97,40265,537],{"class":370},[97,40267,38237],{"class":103},[97,40269,40270],{"class":99,"line":9955},[97,40271,38242],{"class":103},[97,40273,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292,40294,40296,40298,40300,40302,40304,40306],{"class":99,"line":9979},[97,40275,38204],{"class":103},[97,40277,31046],{"class":5407},[97,40279,115],{"class":319},[97,40281,38647],{"class":370},[97,40283,698],{"class":103},[97,40285,31055],{"class":5407},[97,40287,115],{"class":319},[97,40289,38647],{"class":370},[97,40291,698],{"class":103},[97,40293,31064],{"class":5407},[97,40295,115],{"class":319},[97,40297,392],{"class":370},[97,40299,698],{"class":103},[97,40301,31073],{"class":5407},[97,40303,115],{"class":319},[97,40305,537],{"class":370},[97,40307,38237],{"class":103},[97,40309,40310],{"class":99,"line":9984},[97,40311,38242],{"class":103},[97,40313,40314,40316,40318,40320,40322,40324,40326,40328,40330,40332,40334,40336,40338,40340,40342,40344,40346],{"class":99,"line":9989},[97,40315,38204],{"class":103},[97,40317,31046],{"class":5407},[97,40319,115],{"class":319},[97,40321,38647],{"class":370},[97,40323,698],{"class":103},[97,40325,31055],{"class":5407},[97,40327,115],{"class":319},[97,40329,38647],{"class":370},[97,40331,698],{"class":103},[97,40333,31064],{"class":5407},[97,40335,115],{"class":319},[97,40337,392],{"class":370},[97,40339,698],{"class":103},[97,40341,31073],{"class":5407},[97,40343,115],{"class":319},[97,40345,537],{"class":370},[97,40347,38237],{"class":103},[97,40349,40350],{"class":99,"line":9994},[97,40351,38242],{"class":103},[97,40353,40354,40356,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376,40378],{"class":99,"line":10003},[97,40355,38287],{"class":103},[97,40357,31064],{"class":5407},[97,40359,115],{"class":319},[97,40361,398],{"class":370},[97,40363,698],{"class":103},[97,40365,31119],{"class":5407},[97,40367,115],{"class":319},[97,40369,398],{"class":370},[97,40371,698],{"class":103},[97,40373,31073],{"class":5407},[97,40375,115],{"class":319},[97,40377,511],{"class":370},[97,40379,329],{"class":103},[97,40381,40382],{"class":99,"line":10008},[97,40383,38316],{"class":103},[97,40385,40386],{"class":99,"line":10014},[97,40387,38954],{"class":191},[97,40389,40390,40392,40394,40396],{"class":99,"line":10035},[97,40391,31035],{"class":370},[97,40393,38961],{"class":103},[97,40395,115],{"class":319},[97,40397,38199],{"class":103},[97,40399,40400],{"class":99,"line":10041},[97,40401,38970],{"class":191},[97,40403,40404],{"class":99,"line":10055},[97,40405,38975],{"class":191},[97,40407,40408],{"class":99,"line":10061},[97,40409,38980],{"class":103},[97,40411,40412,40414,40416,40418,40420,40422,40424,40426,40428],{"class":99,"line":10088},[97,40413,38985],{"class":103},[97,40415,689],{"class":370},[97,40417,775],{"class":319},[97,40419,689],{"class":370},[97,40421,775],{"class":319},[97,40423,38647],{"class":370},[97,40425,698],{"class":103},[97,40427,35060],{"class":370},[97,40429,38237],{"class":103},[97,40431,40432],{"class":99,"line":10097},[97,40433,38242],{"class":103},[97,40435,40436,40438,40440,40442,40444],{"class":99,"line":10103},[97,40437,38985],{"class":103},[97,40439,35060],{"class":370},[97,40441,698],{"class":103},[97,40443,32260],{"class":370},[97,40445,38237],{"class":103},[97,40447,40448],{"class":99,"line":10111},[97,40449,38242],{"class":103},[97,40451,40452,40454,40456,40458,40460],{"class":99,"line":10116},[97,40453,38985],{"class":103},[97,40455,32260],{"class":370},[97,40457,698],{"class":103},[97,40459,766],{"class":370},[97,40461,329],{"class":103},[97,40463,40464],{"class":99,"line":16794},[97,40465,38316],{"class":103},[97,40467,40468],{"class":99,"line":16800},[97,40469,2591],{"emptyLinePlaceholder":249},[97,40471,40472],{"class":99,"line":16823},[97,40473,39046],{"class":191},[97,40475,40476],{"class":99,"line":16829},[97,40477,39051],{"class":191},[97,40479,40480,40482,40484,40486,40488],{"class":99,"line":16852},[97,40481,3594],{"class":319},[97,40483,39058],{"class":103},[97,40485,26233],{"class":319},[97,40487,39063],{"class":370},[97,40489,39066],{"class":103},[97,40491,40492],{"class":99,"line":16866},[97,40493,39071],{"class":191},[97,40495,40496,40498,40500],{"class":99,"line":16886},[97,40497,4833],{"class":319},[97,40499,39078],{"class":370},[97,40501,39081],{"class":103},[97,40503,40504],{"class":99,"line":16892},[97,40505,39086],{"class":191},[97,40507,40508,40510,40512,40514,40516],{"class":99,"line":16903},[97,40509,39091],{"class":103},[97,40511,39094],{"class":5407},[97,40513,115],{"class":319},[97,40515,39099],{"class":118},[97,40517,329],{"class":103},[97,40519,40520],{"class":99,"line":16926},[97,40521,39106],{"class":191},[97,40523,40524,40526,40528,40530,40532,40534],{"class":99,"line":16948},[97,40525,39111],{"class":319},[97,40527,39114],{"class":103},[97,40529,39117],{"class":319},[97,40531,39120],{"class":319},[97,40533,39123],{"class":370},[97,40535,3930],{"class":103},[97,40537,40538],{"class":99,"line":16953},[97,40539,39130],{"class":191},[97,40541,40542,40544,40546],{"class":99,"line":16959},[97,40543,39135],{"class":103},[97,40545,511],{"class":370},[97,40547,329],{"class":103},[97,40549,40550],{"class":99,"line":16973},[97,40551,39144],{"class":191},[97,40553,40554,40556,40558],{"class":99,"line":16986},[97,40555,39149],{"class":319},[97,40557,39078],{"class":370},[97,40559,39154],{"class":103},[97,40561,40562],{"class":99,"line":16991},[97,40563,39159],{"class":191},[97,40565,40566],{"class":99,"line":17005},[97,40567,39164],{"class":191},[97,40569,40570,40572,40574,40576,40578],{"class":99,"line":17010},[97,40571,39169],{"class":103},[97,40573,511],{"class":370},[97,40575,698],{"class":103},[97,40577,39176],{"class":370},[97,40579,329],{"class":103},[97,40581,40582],{"class":99,"line":17016},[97,40583,39183],{"class":191},[97,40585,40586,40588,40590,40592,40594,40596],{"class":99,"line":17021},[97,40587,39111],{"class":319},[97,40589,39114],{"class":103},[97,40591,39117],{"class":319},[97,40593,39120],{"class":319},[97,40595,39123],{"class":370},[97,40597,3930],{"class":103},[97,40599,40600,40602,40604],{"class":99,"line":17035},[97,40601,39135],{"class":103},[97,40603,511],{"class":370},[97,40605,329],{"class":103},[97,40607,40608],{"class":99,"line":17040},[97,40609,2591],{"emptyLinePlaceholder":249},[97,40611,40612],{"class":99,"line":17045},[97,40613,35355],{"class":191},[97,40615,40616,40618,40620],{"class":99,"line":17059},[97,40617,30991],{"class":319},[97,40619,31283],{"class":111},[97,40621,31286],{"class":103},[97,40623,40624,40626,40628,40630],{"class":99,"line":17071},[97,40625,31291],{"class":103},[97,40627,115],{"class":319},[97,40629,31013],{"class":370},[97,40631,39232],{"class":103},[97,40633,40634,40636,40638,40640],{"class":99,"line":17076},[97,40635,31291],{"class":103},[97,40637,115],{"class":319},[97,40639,31013],{"class":370},[97,40641,39243],{"class":103},[97,40643,40644,40646,40648,40650],{"class":99,"line":17089},[97,40645,31291],{"class":103},[97,40647,115],{"class":319},[97,40649,31013],{"class":370},[97,40651,39254],{"class":103},[97,40653,40654,40656,40658,40660],{"class":99,"line":17094},[97,40655,31291],{"class":103},[97,40657,115],{"class":319},[97,40659,31013],{"class":370},[97,40661,39265],{"class":103},[97,40663,40664,40666,40668,40670],{"class":99,"line":17099},[97,40665,31291],{"class":103},[97,40667,115],{"class":319},[97,40669,31013],{"class":370},[97,40671,39276],{"class":103},[97,40673,40674,40676,40678,40680],{"class":99,"line":17104},[97,40675,31291],{"class":103},[97,40677,115],{"class":319},[97,40679,31013],{"class":370},[97,40681,39287],{"class":103},[97,40683,40684,40686],{"class":99,"line":17117},[97,40685,14943],{"class":319},[97,40687,31399],{"class":103},[97,40689,40690],{"class":99,"line":17122},[97,40691,2591],{"emptyLinePlaceholder":249},[97,40693,40694],{"class":99,"line":32823},[97,40695,39302],{"class":191},[97,40697,40698,40700,40702,40704,40706],{"class":99,"line":32829},[97,40699,1723],{"class":319},[97,40701,31410],{"class":370},[97,40703,3140],{"class":319},[97,40705,39313],{"class":118},[97,40707,3930],{"class":103},[97,40709,40710,40712,40714,40716,40718,40720,40722,40724,40726],{"class":99,"line":32835},[97,40711,31427],{"class":103},[97,40713,115],{"class":319},[97,40715,30641],{"class":103},[97,40717,31434],{"class":118},[97,40719,1896],{"class":319},[97,40721,31439],{"class":103},[97,40723,1893],{"class":319},[97,40725,30666],{"class":118},[97,40727,329],{"class":103},[97,40729,40730,40732],{"class":99,"line":32841},[97,40731,31489],{"class":370},[97,40733,30675],{"class":103},[97,40735,40736,40738,40740],{"class":99,"line":32847},[97,40737,31479],{"class":103},[97,40739,115],{"class":319},[97,40741,39350],{"class":103},[97,40743,40744,40746,40748,40750,40752,40754,40756,40758],{"class":99,"line":32858},[97,40745,31489],{"class":370},[97,40747,31492],{"class":103},[97,40749,537],{"class":370},[97,40751,698],{"class":103},[97,40753,31691],{"class":370},[97,40755,698],{"class":103},[97,40757,31691],{"class":370},[97,40759,31505],{"class":103},[138,40761,40762],{"start":241},[70,40763,40764],{},"测试代码",[87,40766,40768],{"className":30568,"code":40767,"language":30570,"meta":92,"style":92},"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",[94,40769,40770,40776,40786,40796,40800,40810,40821,40825,40829,40833,40841,40857,40867,40883,40893,40907,40911,40921,40931,40941,40947,40951,40955,40963,40967,40983,40991,40995,40999,41007,41015,41019,41023,41027,41031,41037,41041,41051,41059,41067,41071,41075,41079,41087,41091,41107,41111,41115,41119,41131,41135,41147,41151,41155,41167,41171,41181,41185,41189,41201,41205,41214,41218,41222,41230,41234,41242,41246,41250,41254,41258,41262,41278,41286,41290,41294,41342,41348,41352,41362,41370,41378,41382,41386,41390,41394,41402,41406,41422,41426,41434,41442],{"__ignoreMap":92},[97,40771,40772,40774],{"class":99,"line":100},[97,40773,30582],{"class":319},[97,40775,30585],{"class":103},[97,40777,40778,40780,40782,40784],{"class":99,"line":195},[97,40779,30582],{"class":319},[97,40781,31605],{"class":103},[97,40783,31573],{"class":319},[97,40785,31610],{"class":103},[97,40787,40788,40790,40792,40794],{"class":99,"line":241},[97,40789,30927],{"class":319},[97,40791,31588],{"class":103},[97,40793,30582],{"class":319},[97,40795,31593],{"class":103},[97,40797,40798],{"class":99,"line":1387},[97,40799,34112],{"class":191},[97,40801,40802,40804,40806,40808],{"class":99,"line":1393},[97,40803,30927],{"class":319},[97,40805,31558],{"class":103},[97,40807,30582],{"class":319},[97,40809,31563],{"class":103},[97,40811,40812,40814,40816,40818],{"class":99,"line":1407},[97,40813,30927],{"class":319},[97,40815,32104],{"class":103},[97,40817,30582],{"class":319},[97,40819,40820],{"class":370}," VGG16\n",[97,40822,40823],{"class":99,"line":1413},[97,40824,2591],{"emptyLinePlaceholder":249},[97,40826,40827],{"class":99,"line":1504},[97,40828,2591],{"emptyLinePlaceholder":249},[97,40830,40831],{"class":99,"line":1510},[97,40832,34141],{"class":191},[97,40834,40835,40837,40839],{"class":99,"line":1522},[97,40836,32137],{"class":319},[97,40838,34148],{"class":111},[97,40840,32143],{"class":103},[97,40842,40843,40845,40847,40849,40851,40853,40855],{"class":99,"line":1804},[97,40844,34155],{"class":103},[97,40846,115],{"class":319},[97,40848,31645],{"class":103},[97,40850,31648],{"class":5407},[97,40852,115],{"class":319},[97,40854,31653],{"class":118},[97,40856,31656],{"class":103},[97,40858,40859,40861,40863,40865],{"class":99,"line":1809},[97,40860,34172],{"class":5407},[97,40862,115],{"class":319},[97,40864,34177],{"class":370},[97,40866,31656],{"class":103},[97,40868,40869,40871,40873,40875,40877,40879,40881],{"class":99,"line":1815},[97,40870,34184],{"class":5407},[97,40872,115],{"class":319},[97,40874,31683],{"class":103},[97,40876,31686],{"class":5407},[97,40878,115],{"class":319},[97,40880,31691],{"class":370},[97,40882,31694],{"class":103},[97,40884,40885,40887,40889,40891],{"class":99,"line":1820},[97,40886,34201],{"class":5407},[97,40888,115],{"class":319},[97,40890,31666],{"class":370},[97,40892,329],{"class":103},[97,40894,40895,40897,40899,40901,40903,40905],{"class":99,"line":1834},[97,40896,34212],{"class":103},[97,40898,115],{"class":319},[97,40900,31724],{"class":103},[97,40902,31727],{"class":5407},[97,40904,115],{"class":319},[97,40906,34223],{"class":103},[97,40908,40909],{"class":99,"line":1839},[97,40910,34228],{"class":191},[97,40912,40913,40915,40917,40919],{"class":99,"line":1845},[97,40914,34233],{"class":5407},[97,40916,115],{"class":319},[97,40918,537],{"class":370},[97,40920,31656],{"class":103},[97,40922,40923,40925,40927,40929],{"class":99,"line":1866},[97,40924,34244],{"class":5407},[97,40926,115],{"class":319},[97,40928,31666],{"class":370},[97,40930,31656],{"class":103},[97,40932,40933,40935,40937,40939],{"class":99,"line":1871},[97,40934,34255],{"class":5407},[97,40936,115],{"class":319},[97,40938,511],{"class":370},[97,40940,329],{"class":103},[97,40942,40943,40945],{"class":99,"line":1885},[97,40944,4281],{"class":319},[97,40946,34268],{"class":103},[97,40948,40949],{"class":99,"line":1890},[97,40950,2591],{"emptyLinePlaceholder":249},[97,40952,40953],{"class":99,"line":1919},[97,40954,34277],{"class":191},[97,40956,40957,40959,40961],{"class":99,"line":1924},[97,40958,32137],{"class":319},[97,40960,34284],{"class":111},[97,40962,34287],{"class":103},[97,40964,40965],{"class":99,"line":1941},[97,40966,34292],{"class":191},[97,40968,40969,40971,40973,40975,40977,40979,40981],{"class":99,"line":1946},[97,40970,31427],{"class":103},[97,40972,115],{"class":319},[97,40974,31434],{"class":118},[97,40976,1896],{"class":319},[97,40978,31439],{"class":103},[97,40980,1893],{"class":319},[97,40982,34309],{"class":118},[97,40984,40985,40987,40989],{"class":99,"line":1951},[97,40986,31479],{"class":103},[97,40988,115],{"class":319},[97,40990,32479],{"class":103},[97,40992,40993],{"class":99,"line":1956},[97,40994,2591],{"emptyLinePlaceholder":249},[97,40996,40997],{"class":99,"line":1970},[97,40998,34326],{"class":191},[97,41000,41001,41003,41005],{"class":99,"line":1975},[97,41002,34331],{"class":103},[97,41004,115],{"class":319},[97,41006,32532],{"class":370},[97,41008,41009,41011,41013],{"class":99,"line":2768},[97,41010,34340],{"class":103},[97,41012,115],{"class":319},[97,41014,3276],{"class":370},[97,41016,41017],{"class":99,"line":2782},[97,41018,2591],{"emptyLinePlaceholder":249},[97,41020,41021],{"class":99,"line":2790},[97,41022,34353],{"class":191},[97,41024,41025],{"class":99,"line":2795},[97,41026,34358],{"class":191},[97,41028,41029],{"class":99,"line":2801},[97,41030,34363],{"class":191},[97,41032,41033,41035],{"class":99,"line":2807},[97,41034,34368],{"class":319},[97,41036,33074],{"class":103},[97,41038,41039],{"class":99,"line":2812},[97,41040,34375],{"class":191},[97,41042,41043,41045,41047,41049],{"class":99,"line":8139},[97,41044,3594],{"class":319},[97,41046,34382],{"class":103},[97,41048,26233],{"class":319},[97,41050,34387],{"class":103},[97,41052,41053,41055,41057],{"class":99,"line":8163},[97,41054,34392],{"class":103},[97,41056,115],{"class":319},[97,41058,34397],{"class":103},[97,41060,41061,41063,41065],{"class":99,"line":8168},[97,41062,34402],{"class":103},[97,41064,115],{"class":319},[97,41066,34407],{"class":103},[97,41068,41069],{"class":99,"line":8174},[97,41070,34412],{"class":191},[97,41072,41073],{"class":99,"line":8201},[97,41074,33065],{"class":103},[97,41076,41077],{"class":99,"line":8206},[97,41078,34421],{"class":191},[97,41080,41081,41083,41085],{"class":99,"line":8212},[97,41082,32850],{"class":103},[97,41084,115],{"class":319},[97,41086,34430],{"class":103},[97,41088,41089],{"class":99,"line":8224},[97,41090,34435],{"class":191},[97,41092,41093,41095,41097,41099,41101,41103,41105],{"class":99,"line":8236},[97,41094,32867],{"class":103},[97,41096,115],{"class":319},[97,41098,32872],{"class":103},[97,41100,32875],{"class":5407},[97,41102,115],{"class":319},[97,41104,537],{"class":370},[97,41106,329],{"class":103},[97,41108,41109],{"class":99,"line":8248},[97,41110,34456],{"class":191},[97,41112,41113],{"class":99,"line":9907},[97,41114,34461],{"class":191},[97,41116,41117],{"class":99,"line":9932},[97,41118,34466],{"class":191},[97,41120,41121,41123,41125,41127,41129],{"class":99,"line":9955},[97,41122,34471],{"class":103},[97,41124,9668],{"class":319},[97,41126,32977],{"class":103},[97,41128,3140],{"class":319},[97,41130,34480],{"class":103},[97,41132,41133],{"class":99,"line":9979},[97,41134,34485],{"class":191},[97,41136,41137,41139,41141,41143,41145],{"class":99,"line":9984},[97,41138,34490],{"class":103},[97,41140,9668],{"class":319},[97,41142,34495],{"class":103},[97,41144,511],{"class":370},[97,41146,329],{"class":103},[97,41148,41149],{"class":99,"line":9989},[97,41150,2591],{"emptyLinePlaceholder":249},[97,41152,41153],{"class":99,"line":9994},[97,41154,34508],{"class":191},[97,41156,41157,41159,41161,41163,41165],{"class":99,"line":10003},[97,41158,34513],{"class":103},[97,41160,115],{"class":319},[97,41162,34518],{"class":103},[97,41164,904],{"class":319},[97,41166,34523],{"class":103},[97,41168,41169],{"class":99,"line":10008},[97,41170,34528],{"class":191},[97,41172,41173,41175,41177,41179],{"class":99,"line":10014},[97,41174,32641],{"class":370},[97,41176,323],{"class":103},[97,41178,34537],{"class":118},[97,41180,34540],{"class":103},[97,41182,41183],{"class":99,"line":10035},[97,41184,2591],{"emptyLinePlaceholder":249},[97,41186,41187],{"class":99,"line":10041},[97,41188,34549],{"class":191},[97,41190,41191,41193,41195,41197,41199],{"class":99,"line":10055},[97,41192,1723],{"class":319},[97,41194,31410],{"class":370},[97,41196,3140],{"class":319},[97,41198,31415],{"class":118},[97,41200,3930],{"class":103},[97,41202,41203],{"class":99,"line":10061},[97,41204,34566],{"class":191},[97,41206,41207,41209,41211],{"class":99,"line":10088},[97,41208,31479],{"class":103},[97,41210,115],{"class":319},[97,41212,41213],{"class":103},"VGG16()\n",[97,41215,41216],{"class":99,"line":10097},[97,41217,34579],{"class":191},[97,41219,41220],{"class":99,"line":10103},[97,41221,34584],{"class":191},[97,41223,41224,41226,41228],{"class":99,"line":10111},[97,41225,34589],{"class":103},[97,41227,34592],{"class":118},[97,41229,30687],{"class":103},[97,41231,41232],{"class":99,"line":10116},[97,41233,34599],{"class":191},[97,41235,41236,41238,41240],{"class":99,"line":16794},[97,41237,34212],{"class":103},[97,41239,115],{"class":319},[97,41241,34608],{"class":103},[97,41243,41244],{"class":99,"line":16800},[97,41245,34613],{"class":191},[97,41247,41248],{"class":99,"line":16823},[97,41249,34618],{"class":103},[97,41251,41252],{"class":99,"line":16829},[97,41253,2591],{"emptyLinePlaceholder":249},[97,41255,41256],{"class":99,"line":16852},[97,41257,34627],{"class":191},[97,41259,41260],{"class":99,"line":16866},[97,41261,34632],{"class":191},[97,41263,41264,41266,41268,41270,41272,41274,41276],{"class":99,"line":16886},[97,41265,31427],{"class":103},[97,41267,115],{"class":319},[97,41269,31434],{"class":118},[97,41271,1896],{"class":319},[97,41273,31439],{"class":103},[97,41275,1893],{"class":319},[97,41277,34309],{"class":118},[97,41279,41280,41282,41284],{"class":99,"line":16892},[97,41281,31479],{"class":103},[97,41283,115],{"class":319},[97,41285,32479],{"class":103},[97,41287,41288],{"class":99,"line":16903},[97,41289,34661],{"class":191},[97,41291,41292],{"class":99,"line":16926},[97,41293,34666],{"class":191},[97,41295,41296,41298,41300,41302,41304,41306,41308,41310,41312,41314,41316,41318,41320,41322,41324,41326,41328,41330,41332,41334,41336,41338,41340],{"class":99,"line":16948},[97,41297,34671],{"class":103},[97,41299,115],{"class":319},[97,41301,1210],{"class":103},[97,41303,34678],{"class":118},[97,41305,698],{"class":103},[97,41307,34683],{"class":118},[97,41309,698],{"class":103},[97,41311,34688],{"class":118},[97,41313,698],{"class":103},[97,41315,34693],{"class":118},[97,41317,698],{"class":103},[97,41319,34698],{"class":118},[97,41321,698],{"class":103},[97,41323,34703],{"class":118},[97,41325,698],{"class":103},[97,41327,34708],{"class":118},[97,41329,698],{"class":103},[97,41331,34713],{"class":118},[97,41333,698],{"class":103},[97,41335,34718],{"class":118},[97,41337,698],{"class":103},[97,41339,34723],{"class":118},[97,41341,33436],{"class":103},[97,41343,41344,41346],{"class":99,"line":16953},[97,41345,34368],{"class":319},[97,41347,33074],{"class":103},[97,41349,41350],{"class":99,"line":16959},[97,41351,34736],{"class":191},[97,41353,41354,41356,41358,41360],{"class":99,"line":16973},[97,41355,3594],{"class":319},[97,41357,34743],{"class":103},[97,41359,26233],{"class":319},[97,41361,34387],{"class":103},[97,41363,41364,41366,41368],{"class":99,"line":16986},[97,41365,32800],{"class":103},[97,41367,115],{"class":319},[97,41369,32805],{"class":103},[97,41371,41372,41374,41376],{"class":99,"line":16991},[97,41373,32815],{"class":103},[97,41375,115],{"class":319},[97,41377,32820],{"class":103},[97,41379,41380],{"class":99,"line":17005},[97,41381,2591],{"emptyLinePlaceholder":249},[97,41383,41384],{"class":99,"line":17010},[97,41385,34772],{"class":191},[97,41387,41388],{"class":99,"line":17016},[97,41389,33065],{"class":103},[97,41391,41392],{"class":99,"line":17021},[97,41393,34781],{"class":191},[97,41395,41396,41398,41400],{"class":99,"line":17035},[97,41397,32850],{"class":103},[97,41399,115],{"class":319},[97,41401,32855],{"class":103},[97,41403,41404],{"class":99,"line":17040},[97,41405,34794],{"class":191},[97,41407,41408,41410,41412,41414,41416,41418,41420],{"class":99,"line":17045},[97,41409,32867],{"class":103},[97,41411,115],{"class":319},[97,41413,32872],{"class":103},[97,41415,32875],{"class":5407},[97,41417,115],{"class":319},[97,41419,537],{"class":370},[97,41421,329],{"class":103},[97,41423,41424],{"class":99,"line":17059},[97,41425,34815],{"class":191},[97,41427,41428,41430,41432],{"class":99,"line":17071},[97,41429,34820],{"class":103},[97,41431,115],{"class":319},[97,41433,34825],{"class":103},[97,41435,41436,41438,41440],{"class":99,"line":17076},[97,41437,34830],{"class":103},[97,41439,115],{"class":319},[97,41441,34835],{"class":103},[97,41443,41444,41446,41448,41450,41452,41454,41456,41458],{"class":99,"line":17089},[97,41445,34840],{"class":370},[97,41447,323],{"class":103},[97,41449,34845],{"class":118},[97,41451,34848],{"class":103},[97,41453,34851],{"class":118},[97,41455,698],{"class":103},[97,41457,34856],{"class":118},[97,41459,34859],{"class":103},[48,41461,41463],{"id":41462},"_23googlenet","2.3.GoogLeNet",[160,41465,41467],{"id":41466},"_231原理","2.3.1.原理",[138,41469,41470],{},[70,41471,41472],{},"网络结构",[24,41474,41475],{},[19,41476],{"alt":92,"src":41477},"\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",[24,41479,41480],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[24,41482,41483],{},[19,41484],{"alt":92,"src":41485},"\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",[24,41487,41488],{},[19,41489],{"alt":92,"src":41490},"\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",[24,41492,41493],{},[19,41494],{"alt":92,"src":41495},"\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",[138,41497,41498],{"start":195},[70,41499,41500],{},"1x1卷积的优点",[24,41502,41503],{},[19,41504],{"alt":92,"src":41505},"\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",[138,41507,41508],{"start":241},[70,41509,41510],{},"全局平均池化层优点",[24,41512,41513],{},[19,41514],{"alt":92,"src":41515},"\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",[24,41517,41518],{},[19,41519],{"alt":92,"src":41520},"\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",[138,41522,41523],{"start":1387},[70,41524,41525],{},"参数详细描述",[24,41527,41528],{},[19,41529],{"alt":92,"src":41530},"\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",[24,41532,41533],{},[19,41534],{"alt":92,"src":41535},"\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",[24,41537,41538],{},[19,41539],{"alt":92,"src":41540},"\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",[24,41542,41543],{},[19,41544],{"alt":92,"src":41545},"\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",[24,41547,41548],{},[19,41549],{"alt":92,"src":41550},"\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",[24,41552,41553],{},[19,41554],{"alt":92,"src":41555},"\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",[24,41557,41558],{},[19,41559],{"alt":92,"src":41560},"\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",[24,41562,41563],{},[19,41564],{"alt":92,"src":41565},"\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",[24,41567,41568],{},[19,41569],{"alt":92,"src":41570},"\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",[24,41572,41573],{},[19,41574],{"alt":92,"src":41575},"\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",[24,41577,41578],{},[19,41579],{"alt":92,"src":41580},"\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",[24,41582,41583],{},[19,41584],{"alt":92,"src":41585},"\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",[24,41587,41588],{},[19,41589],{"alt":92,"src":41590},"\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",[24,41592,41593],{},[19,41594],{"alt":92,"src":41595},"\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",[24,41597,41598],{},[19,41599],{"alt":92,"src":41600},"\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",[24,41602,41603],{},[19,41604],{"alt":92,"src":41605},"\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",[24,41607,41608],{},[19,41609],{"alt":92,"src":41610},"\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",[24,41612,41613],{},[19,41614],{"alt":92,"src":41615},"\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",[24,41617,41618],{},[19,41619],{"alt":92,"src":41620},"\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",[24,41622,41623],{},[19,41624],{"alt":92,"src":41625},"\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",[24,41627,41628],{},[19,41629],{"alt":92,"src":41630},"\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",[160,41632,41634],{"id":41633},"_232代码实现","2.3.2.代码实现",[138,41636,41637],{},[70,41638,30901],{},[24,41640,41641],{},"根据原理一步一步搭建即可",[87,41643,41645],{"className":30568,"code":41644,"language":30570,"meta":92,"style":92},"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",[94,41646,41647,41653,41663,41673,41677,41694,41703,41718,41728,41733,41766,41771,41808,41855,41860,41896,41943,41948,41953,41988,42020,42024,42032,42048,42072,42097,42118,42123,42138,42142,42146,42151,42168,42173,42182,42197,42208,42252,42256,42284,42288,42299,42327,42331,42368,42372,42400,42404,42415,42451,42483,42511,42515,42526,42560,42592,42624,42657,42691,42719,42723,42734,42767,42799,42813,42817,42830,42834,42839,42851,42859,42881,42886,42891,42896,42901,42906,42911,42925,42933,42942,42955,42970,42979,42983,42991,43002,43013,43024,43035,43046,43052,43056,43061,43073,43093,43102],{"__ignoreMap":92},[97,41648,41649,41651],{"class":99,"line":100},[97,41650,30582],{"class":319},[97,41652,30585],{"class":103},[97,41654,41655,41657,41659,41661],{"class":99,"line":195},[97,41656,30927],{"class":319},[97,41658,30930],{"class":103},[97,41660,30582],{"class":319},[97,41662,30935],{"class":103},[97,41664,41665,41667,41669,41671],{"class":99,"line":241},[97,41666,30927],{"class":319},[97,41668,30947],{"class":103},[97,41670,30582],{"class":319},[97,41672,30952],{"class":103},[97,41674,41675],{"class":99,"line":1387},[97,41676,2591],{"emptyLinePlaceholder":249},[97,41678,41679,41681,41684,41686,41688,41690,41692],{"class":99,"line":1393},[97,41680,14885],{"class":319},[97,41682,41683],{"class":111}," Inception",[97,41685,323],{"class":103},[97,41687,30968],{"class":111},[97,41689,878],{"class":103},[97,41691,30973],{"class":111},[97,41693,30976],{"class":103},[97,41695,41696,41698,41700],{"class":99,"line":1407},[97,41697,30991],{"class":319},[97,41699,30994],{"class":370},[97,41701,41702],{"class":103},"(self,in_channels,c1,c2,c3,c4):\n",[97,41704,41705,41707,41710,41712,41714,41716],{"class":99,"line":1413},[97,41706,31007],{"class":370},[97,41708,41709],{"class":103},"(Inception,",[97,41711,31013],{"class":370},[97,41713,31016],{"class":103},[97,41715,31019],{"class":370},[97,41717,2167],{"class":103},[97,41719,41720,41722,41724,41726],{"class":99,"line":1504},[97,41721,31035],{"class":370},[97,41723,34961],{"class":103},[97,41725,115],{"class":319},[97,41727,34966],{"class":103},[97,41729,41730],{"class":99,"line":1510},[97,41731,41732],{"class":191},"        # 路线1：定义1*1卷积\n",[97,41734,41735,41737,41740,41742,41744,41746,41748,41751,41753,41755,41758,41760,41762,41764],{"class":99,"line":1522},[97,41736,31035],{"class":370},[97,41738,41739],{"class":103},".p1_1",[97,41741,115],{"class":319},[97,41743,31043],{"class":103},[97,41745,31046],{"class":5407},[97,41747,115],{"class":319},[97,41749,41750],{"class":103},"in_channels,",[97,41752,31055],{"class":5407},[97,41754,115],{"class":319},[97,41756,41757],{"class":103},"c1,",[97,41759,31064],{"class":5407},[97,41761,115],{"class":319},[97,41763,537],{"class":370},[97,41765,329],{"class":103},[97,41767,41768],{"class":99,"line":1804},[97,41769,41770],{"class":191},"        # 路线2：定义1*1卷积和3*3\n",[97,41772,41773,41775,41778,41780,41782,41784,41786,41788,41790,41792,41795,41797,41800,41802,41804,41806],{"class":99,"line":1809},[97,41774,31035],{"class":370},[97,41776,41777],{"class":103},".p2_1",[97,41779,115],{"class":319},[97,41781,31043],{"class":103},[97,41783,31046],{"class":5407},[97,41785,115],{"class":319},[97,41787,41750],{"class":103},[97,41789,31055],{"class":5407},[97,41791,115],{"class":319},[97,41793,41794],{"class":103},"c2[",[97,41796,511],{"class":370},[97,41798,41799],{"class":103},"],",[97,41801,31064],{"class":5407},[97,41803,115],{"class":319},[97,41805,537],{"class":370},[97,41807,329],{"class":103},[97,41809,41810,41812,41815,41817,41819,41821,41823,41825,41827,41829,41831,41833,41835,41837,41839,41841,41843,41845,41847,41849,41851,41853],{"class":99,"line":1815},[97,41811,31035],{"class":370},[97,41813,41814],{"class":103},".p2_2",[97,41816,115],{"class":319},[97,41818,31043],{"class":103},[97,41820,31046],{"class":5407},[97,41822,115],{"class":319},[97,41824,41794],{"class":103},[97,41826,511],{"class":370},[97,41828,41799],{"class":103},[97,41830,31055],{"class":5407},[97,41832,115],{"class":319},[97,41834,41794],{"class":103},[97,41836,537],{"class":370},[97,41838,41799],{"class":103},[97,41840,31064],{"class":5407},[97,41842,115],{"class":319},[97,41844,392],{"class":370},[97,41846,698],{"class":103},[97,41848,31073],{"class":5407},[97,41850,115],{"class":319},[97,41852,537],{"class":370},[97,41854,329],{"class":103},[97,41856,41857],{"class":99,"line":1820},[97,41858,41859],{"class":191},"        # 路线3：定义1*1卷积和5*5\n",[97,41861,41862,41864,41867,41869,41871,41873,41875,41877,41879,41881,41884,41886,41888,41890,41892,41894],{"class":99,"line":1834},[97,41863,31035],{"class":370},[97,41865,41866],{"class":103},".p3_1",[97,41868,115],{"class":319},[97,41870,31043],{"class":103},[97,41872,31046],{"class":5407},[97,41874,115],{"class":319},[97,41876,41750],{"class":103},[97,41878,31055],{"class":5407},[97,41880,115],{"class":319},[97,41882,41883],{"class":103},"c3[",[97,41885,511],{"class":370},[97,41887,41799],{"class":103},[97,41889,31064],{"class":5407},[97,41891,115],{"class":319},[97,41893,537],{"class":370},[97,41895,329],{"class":103},[97,41897,41898,41900,41903,41905,41907,41909,41911,41913,41915,41917,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937,41939,41941],{"class":99,"line":1839},[97,41899,31035],{"class":370},[97,41901,41902],{"class":103},".p3_2",[97,41904,115],{"class":319},[97,41906,31043],{"class":103},[97,41908,31046],{"class":5407},[97,41910,115],{"class":319},[97,41912,41883],{"class":103},[97,41914,511],{"class":370},[97,41916,41799],{"class":103},[97,41918,31055],{"class":5407},[97,41920,115],{"class":319},[97,41922,41883],{"class":103},[97,41924,537],{"class":370},[97,41926,41799],{"class":103},[97,41928,31064],{"class":5407},[97,41930,115],{"class":319},[97,41932,639],{"class":370},[97,41934,698],{"class":103},[97,41936,31073],{"class":5407},[97,41938,115],{"class":319},[97,41940,398],{"class":370},[97,41942,329],{"class":103},[97,41944,41945],{"class":99,"line":1845},[97,41946,41947],{"class":191},"        # 路线4：定义3*3最大池化和1*1卷积\n",[97,41949,41950],{"class":99,"line":1866},[97,41951,41952],{"class":191},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[97,41954,41955,41957,41960,41962,41964,41966,41968,41970,41972,41974,41976,41978,41980,41982,41984,41986],{"class":99,"line":1871},[97,41956,31035],{"class":370},[97,41958,41959],{"class":103},".p4_1",[97,41961,115],{"class":319},[97,41963,35019],{"class":103},[97,41965,31064],{"class":5407},[97,41967,115],{"class":319},[97,41969,392],{"class":370},[97,41971,698],{"class":103},[97,41973,31119],{"class":5407},[97,41975,115],{"class":319},[97,41977,537],{"class":370},[97,41979,698],{"class":103},[97,41981,31073],{"class":5407},[97,41983,115],{"class":319},[97,41985,537],{"class":370},[97,41987,329],{"class":103},[97,41989,41990,41992,41995,41997,41999,42001,42003,42005,42007,42009,42012,42014,42016,42018],{"class":99,"line":1885},[97,41991,31035],{"class":370},[97,41993,41994],{"class":103},".p4_2",[97,41996,115],{"class":319},[97,41998,31043],{"class":103},[97,42000,31046],{"class":5407},[97,42002,115],{"class":319},[97,42004,41750],{"class":103},[97,42006,31055],{"class":5407},[97,42008,115],{"class":319},[97,42010,42011],{"class":103},"c4,",[97,42013,31064],{"class":5407},[97,42015,115],{"class":319},[97,42017,537],{"class":370},[97,42019,329],{"class":103},[97,42021,42022],{"class":99,"line":1890},[97,42023,2591],{"emptyLinePlaceholder":249},[97,42025,42026,42028,42030],{"class":99,"line":1919},[97,42027,30991],{"class":319},[97,42029,31283],{"class":111},[97,42031,31286],{"class":103},[97,42033,42034,42037,42039,42041,42043,42045],{"class":99,"line":1924},[97,42035,42036],{"class":103},"        p1",[97,42038,115],{"class":319},[97,42040,31013],{"class":370},[97,42042,35374],{"class":103},[97,42044,31013],{"class":370},[97,42046,42047],{"class":103},".p1_1(x))\n",[97,42049,42050,42052,42054,42056,42058,42060,42063,42065,42067,42069],{"class":99,"line":1941},[97,42051,7276],{"class":103},[97,42053,115],{"class":319},[97,42055,31013],{"class":370},[97,42057,35374],{"class":103},[97,42059,31013],{"class":370},[97,42061,42062],{"class":103},".p2_2(",[97,42064,31013],{"class":370},[97,42066,35374],{"class":103},[97,42068,31013],{"class":370},[97,42070,42071],{"class":103},".p2_1(x))))\n",[97,42073,42074,42077,42079,42081,42083,42085,42088,42090,42092,42094],{"class":99,"line":1946},[97,42075,42076],{"class":103},"        p3",[97,42078,115],{"class":319},[97,42080,31013],{"class":370},[97,42082,35374],{"class":103},[97,42084,31013],{"class":370},[97,42086,42087],{"class":103},".p3_2(",[97,42089,31013],{"class":370},[97,42091,35374],{"class":103},[97,42093,31013],{"class":370},[97,42095,42096],{"class":103},".p3_1(x))))\n",[97,42098,42099,42102,42104,42106,42108,42110,42113,42115],{"class":99,"line":1951},[97,42100,42101],{"class":103},"        p4",[97,42103,115],{"class":319},[97,42105,31013],{"class":370},[97,42107,35374],{"class":103},[97,42109,31013],{"class":370},[97,42111,42112],{"class":103},".p4_2(",[97,42114,31013],{"class":370},[97,42116,42117],{"class":103},".p4_1(x)))\n",[97,42119,42120],{"class":99,"line":1956},[97,42121,42122],{"class":191},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[97,42124,42125,42127,42130,42132,42134,42136],{"class":99,"line":1970},[97,42126,14943],{"class":319},[97,42128,42129],{"class":103}," torch.cat((p1,p2,p3,p4),",[97,42131,32875],{"class":5407},[97,42133,115],{"class":319},[97,42135,537],{"class":370},[97,42137,329],{"class":103},[97,42139,42140],{"class":99,"line":1975},[97,42141,2591],{"emptyLinePlaceholder":249},[97,42143,42144],{"class":99,"line":2768},[97,42145,2591],{"emptyLinePlaceholder":249},[97,42147,42148],{"class":99,"line":2782},[97,42149,42150],{"class":191},"# 搭建GoogLeNet网络\n",[97,42152,42153,42155,42158,42160,42162,42164,42166],{"class":99,"line":2790},[97,42154,14885],{"class":319},[97,42156,42157],{"class":111}," GoogLeNet",[97,42159,323],{"class":103},[97,42161,30968],{"class":111},[97,42163,878],{"class":103},[97,42165,30973],{"class":111},[97,42167,30976],{"class":103},[97,42169,42170],{"class":99,"line":2795},[97,42171,42172],{"class":191},"    # 必须把Inception导入到里边\n",[97,42174,42175,42177,42179],{"class":99,"line":2801},[97,42176,30991],{"class":319},[97,42178,30994],{"class":370},[97,42180,42181],{"class":103},"(self,Inception):\n",[97,42183,42184,42186,42189,42191,42193,42195],{"class":99,"line":2807},[97,42185,31007],{"class":370},[97,42187,42188],{"class":103},"(GoogLeNet,",[97,42190,31013],{"class":370},[97,42192,31016],{"class":103},[97,42194,31019],{"class":370},[97,42196,2167],{"class":103},[97,42198,42199,42201,42204,42206],{"class":99,"line":2812},[97,42200,31035],{"class":370},[97,42202,42203],{"class":103},".b1",[97,42205,115],{"class":319},[97,42207,38199],{"class":103},[97,42209,42210,42212,42214,42216,42218,42220,42222,42224,42226,42228,42230,42232,42234,42236,42238,42240,42242,42244,42246,42248,42250],{"class":99,"line":8139},[97,42211,38204],{"class":103},[97,42213,31046],{"class":5407},[97,42215,115],{"class":319},[97,42217,537],{"class":370},[97,42219,698],{"class":103},[97,42221,31055],{"class":5407},[97,42223,115],{"class":319},[97,42225,523],{"class":370},[97,42227,698],{"class":103},[97,42229,31064],{"class":5407},[97,42231,115],{"class":319},[97,42233,689],{"class":370},[97,42235,698],{"class":103},[97,42237,31119],{"class":5407},[97,42239,115],{"class":319},[97,42241,398],{"class":370},[97,42243,698],{"class":103},[97,42245,31073],{"class":5407},[97,42247,115],{"class":319},[97,42249,392],{"class":370},[97,42251,38237],{"class":103},[97,42253,42254],{"class":99,"line":8163},[97,42255,38242],{"class":103},[97,42257,42258,42260,42262,42264,42266,42268,42270,42272,42274,42276,42278,42280,42282],{"class":99,"line":8168},[97,42259,38287],{"class":103},[97,42261,31064],{"class":5407},[97,42263,115],{"class":319},[97,42265,392],{"class":370},[97,42267,698],{"class":103},[97,42269,31119],{"class":5407},[97,42271,115],{"class":319},[97,42273,398],{"class":370},[97,42275,698],{"class":103},[97,42277,31073],{"class":5407},[97,42279,115],{"class":319},[97,42281,537],{"class":370},[97,42283,329],{"class":103},[97,42285,42286],{"class":99,"line":8174},[97,42287,38316],{"class":103},[97,42289,42290,42292,42295,42297],{"class":99,"line":8201},[97,42291,31035],{"class":370},[97,42293,42294],{"class":103},".b2",[97,42296,115],{"class":319},[97,42298,38199],{"class":103},[97,42300,42301,42303,42305,42307,42309,42311,42313,42315,42317,42319,42321,42323,42325],{"class":99,"line":8206},[97,42302,38204],{"class":103},[97,42304,31046],{"class":5407},[97,42306,115],{"class":319},[97,42308,523],{"class":370},[97,42310,698],{"class":103},[97,42312,31055],{"class":5407},[97,42314,115],{"class":319},[97,42316,523],{"class":370},[97,42318,698],{"class":103},[97,42320,31064],{"class":5407},[97,42322,115],{"class":319},[97,42324,537],{"class":370},[97,42326,38237],{"class":103},[97,42328,42329],{"class":99,"line":8212},[97,42330,38242],{"class":103},[97,42332,42333,42335,42337,42339,42341,42343,42345,42347,42350,42352,42354,42356,42358,42360,42362,42364,42366],{"class":99,"line":8224},[97,42334,38204],{"class":103},[97,42336,31046],{"class":5407},[97,42338,115],{"class":319},[97,42340,523],{"class":370},[97,42342,698],{"class":103},[97,42344,31055],{"class":5407},[97,42346,115],{"class":319},[97,42348,42349],{"class":370},"192",[97,42351,698],{"class":103},[97,42353,31064],{"class":5407},[97,42355,115],{"class":319},[97,42357,392],{"class":370},[97,42359,698],{"class":103},[97,42361,31073],{"class":5407},[97,42363,115],{"class":319},[97,42365,537],{"class":370},[97,42367,38237],{"class":103},[97,42369,42370],{"class":99,"line":8236},[97,42371,38242],{"class":103},[97,42373,42374,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394,42396,42398],{"class":99,"line":8248},[97,42375,38287],{"class":103},[97,42377,31064],{"class":5407},[97,42379,115],{"class":319},[97,42381,392],{"class":370},[97,42383,698],{"class":103},[97,42385,31119],{"class":5407},[97,42387,115],{"class":319},[97,42389,398],{"class":370},[97,42391,698],{"class":103},[97,42393,31073],{"class":5407},[97,42395,115],{"class":319},[97,42397,537],{"class":370},[97,42399,329],{"class":103},[97,42401,42402],{"class":99,"line":9907},[97,42403,38316],{"class":103},[97,42405,42406,42408,42411,42413],{"class":99,"line":9932},[97,42407,31035],{"class":370},[97,42409,42410],{"class":103},".b3",[97,42412,115],{"class":319},[97,42414,38199],{"class":103},[97,42416,42417,42420,42422,42424,42426,42429,42431,42433,42435,42438,42440,42442,42444,42447,42449],{"class":99,"line":9955},[97,42418,42419],{"class":103},"            Inception(",[97,42421,42349],{"class":370},[97,42423,698],{"class":103},[97,42425,523],{"class":370},[97,42427,42428],{"class":103},",(",[97,42430,529],{"class":370},[97,42432,698],{"class":103},[97,42434,32260],{"class":370},[97,42436,42437],{"class":103},"),(",[97,42439,921],{"class":370},[97,42441,698],{"class":103},[97,42443,517],{"class":370},[97,42445,42446],{"class":103},"),",[97,42448,517],{"class":370},[97,42450,38237],{"class":103},[97,42452,42453,42455,42457,42459,42461,42463,42465,42467,42469,42471,42473,42475,42477,42479,42481],{"class":99,"line":9979},[97,42454,42419],{"class":103},[97,42456,35060],{"class":370},[97,42458,698],{"class":103},[97,42460,32260],{"class":370},[97,42462,42428],{"class":103},[97,42464,32260],{"class":370},[97,42466,698],{"class":103},[97,42468,42349],{"class":370},[97,42470,42437],{"class":103},[97,42472,517],{"class":370},[97,42474,698],{"class":103},[97,42476,529],{"class":370},[97,42478,42446],{"class":103},[97,42480,523],{"class":370},[97,42482,38237],{"class":103},[97,42484,42485,42487,42489,42491,42493,42495,42497,42499,42501,42503,42505,42507,42509],{"class":99,"line":9984},[97,42486,38287],{"class":103},[97,42488,31064],{"class":5407},[97,42490,115],{"class":319},[97,42492,392],{"class":370},[97,42494,698],{"class":103},[97,42496,31119],{"class":5407},[97,42498,115],{"class":319},[97,42500,398],{"class":370},[97,42502,698],{"class":103},[97,42504,31073],{"class":5407},[97,42506,115],{"class":319},[97,42508,537],{"class":370},[97,42510,329],{"class":103},[97,42512,42513],{"class":99,"line":9989},[97,42514,38316],{"class":103},[97,42516,42517,42519,42522,42524],{"class":99,"line":9994},[97,42518,31035],{"class":370},[97,42520,42521],{"class":103},".b4",[97,42523,115],{"class":319},[97,42525,38199],{"class":103},[97,42527,42528,42530,42533,42535,42537,42539,42541,42543,42546,42548,42550,42552,42554,42556,42558],{"class":99,"line":10003},[97,42529,42419],{"class":103},[97,42531,42532],{"class":370},"480",[97,42534,698],{"class":103},[97,42536,42349],{"class":370},[97,42538,42428],{"class":103},[97,42540,529],{"class":370},[97,42542,698],{"class":103},[97,42544,42545],{"class":370},"208",[97,42547,42437],{"class":103},[97,42549,921],{"class":370},[97,42551,698],{"class":103},[97,42553,927],{"class":370},[97,42555,42446],{"class":103},[97,42557,523],{"class":370},[97,42559,38237],{"class":103},[97,42561,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586,42588,42590],{"class":99,"line":10008},[97,42563,42419],{"class":103},[97,42565,38647],{"class":370},[97,42567,698],{"class":103},[97,42569,21238],{"class":370},[97,42571,42428],{"class":103},[97,42573,938],{"class":370},[97,42575,698],{"class":103},[97,42577,31691],{"class":370},[97,42579,42437],{"class":103},[97,42581,1120],{"class":370},[97,42583,698],{"class":103},[97,42585,523],{"class":370},[97,42587,42446],{"class":103},[97,42589,523],{"class":370},[97,42591,38237],{"class":103},[97,42593,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618,42620,42622],{"class":99,"line":10014},[97,42595,42419],{"class":103},[97,42597,38647],{"class":370},[97,42599,698],{"class":103},[97,42601,32260],{"class":370},[97,42603,42428],{"class":103},[97,42605,32260],{"class":370},[97,42607,698],{"class":103},[97,42609,35060],{"class":370},[97,42611,42437],{"class":103},[97,42613,1120],{"class":370},[97,42615,698],{"class":103},[97,42617,523],{"class":370},[97,42619,42446],{"class":103},[97,42621,523],{"class":370},[97,42623,38237],{"class":103},[97,42625,42626,42628,42630,42632,42634,42636,42638,42640,42643,42645,42647,42649,42651,42653,42655],{"class":99,"line":10035},[97,42627,42419],{"class":103},[97,42629,38647],{"class":370},[97,42631,698],{"class":103},[97,42633,938],{"class":370},[97,42635,42428],{"class":103},[97,42637,32260],{"class":370},[97,42639,698],{"class":103},[97,42641,42642],{"class":370},"288",[97,42644,42437],{"class":103},[97,42646,517],{"class":370},[97,42648,698],{"class":103},[97,42650,523],{"class":370},[97,42652,42446],{"class":103},[97,42654,523],{"class":370},[97,42656,38237],{"class":103},[97,42658,42659,42661,42664,42666,42668,42670,42672,42674,42677,42679,42681,42683,42685,42687,42689],{"class":99,"line":10041},[97,42660,42419],{"class":103},[97,42662,42663],{"class":370},"528",[97,42665,698],{"class":103},[97,42667,35060],{"class":370},[97,42669,42428],{"class":103},[97,42671,21238],{"class":370},[97,42673,698],{"class":103},[97,42675,42676],{"class":370},"320",[97,42678,42437],{"class":103},[97,42680,517],{"class":370},[97,42682,698],{"class":103},[97,42684,32260],{"class":370},[97,42686,42446],{"class":103},[97,42688,32260],{"class":370},[97,42690,38237],{"class":103},[97,42692,42693,42695,42697,42699,42701,42703,42705,42707,42709,42711,42713,42715,42717],{"class":99,"line":10055},[97,42694,38287],{"class":103},[97,42696,31064],{"class":5407},[97,42698,115],{"class":319},[97,42700,392],{"class":370},[97,42702,698],{"class":103},[97,42704,31119],{"class":5407},[97,42706,115],{"class":319},[97,42708,398],{"class":370},[97,42710,698],{"class":103},[97,42712,31073],{"class":5407},[97,42714,115],{"class":319},[97,42716,537],{"class":370},[97,42718,329],{"class":103},[97,42720,42721],{"class":99,"line":10061},[97,42722,38316],{"class":103},[97,42724,42725,42727,42730,42732],{"class":99,"line":10088},[97,42726,31035],{"class":370},[97,42728,42729],{"class":103},".b5",[97,42731,115],{"class":319},[97,42733,38199],{"class":103},[97,42735,42736,42738,42741,42743,42745,42747,42749,42751,42753,42755,42757,42759,42761,42763,42765],{"class":99,"line":10097},[97,42737,42419],{"class":103},[97,42739,42740],{"class":370},"832",[97,42742,698],{"class":103},[97,42744,35060],{"class":370},[97,42746,42428],{"class":103},[97,42748,21238],{"class":370},[97,42750,698],{"class":103},[97,42752,42676],{"class":370},[97,42754,42437],{"class":103},[97,42756,517],{"class":370},[97,42758,698],{"class":103},[97,42760,32260],{"class":370},[97,42762,42446],{"class":103},[97,42764,32260],{"class":370},[97,42766,38237],{"class":103},[97,42768,42769,42771,42773,42775,42777,42779,42781,42783,42785,42787,42789,42791,42793,42795,42797],{"class":99,"line":10103},[97,42770,42419],{"class":103},[97,42772,42740],{"class":370},[97,42774,698],{"class":103},[97,42776,35130],{"class":370},[97,42778,42428],{"class":103},[97,42780,42349],{"class":370},[97,42782,698],{"class":103},[97,42784,35130],{"class":370},[97,42786,42437],{"class":103},[97,42788,927],{"class":370},[97,42790,698],{"class":103},[97,42792,32260],{"class":370},[97,42794,42446],{"class":103},[97,42796,32260],{"class":370},[97,42798,38237],{"class":103},[97,42800,42801,42804,42806,42808,42810],{"class":99,"line":10111},[97,42802,42803],{"class":103},"            nn.AdaptiveAvgPool2d((",[97,42805,537],{"class":370},[97,42807,698],{"class":103},[97,42809,537],{"class":370},[97,42811,42812],{"class":103},")),\n",[97,42814,42815],{"class":99,"line":10116},[97,42816,38980],{"class":103},[97,42818,42819,42821,42824,42826,42828],{"class":99,"line":16794},[97,42820,38985],{"class":103},[97,42822,42823],{"class":370},"1024",[97,42825,698],{"class":103},[97,42827,766],{"class":370},[97,42829,329],{"class":103},[97,42831,42832],{"class":99,"line":16800},[97,42833,38316],{"class":103},[97,42835,42836],{"class":99,"line":16823},[97,42837,42838],{"class":191},"        # 对模型参数初始化\n",[97,42840,42841,42843,42845,42847,42849],{"class":99,"line":16829},[97,42842,3594],{"class":319},[97,42844,39058],{"class":103},[97,42846,26233],{"class":319},[97,42848,39063],{"class":370},[97,42850,39066],{"class":103},[97,42852,42853,42855,42857],{"class":99,"line":16852},[97,42854,4833],{"class":319},[97,42856,39078],{"class":370},[97,42858,39081],{"class":103},[97,42860,42861,42863,42866,42868,42871,42873,42875,42877,42879],{"class":99,"line":16866},[97,42862,39091],{"class":103},[97,42864,42865],{"class":5407},"mode",[97,42867,115],{"class":319},[97,42869,42870],{"class":118},"'fan_out'",[97,42872,698],{"class":103},[97,42874,39094],{"class":5407},[97,42876,115],{"class":319},[97,42878,39099],{"class":118},[97,42880,329],{"class":103},[97,42882,42883],{"class":99,"line":16886},[97,42884,42885],{"class":191},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[97,42887,42888],{"class":99,"line":16892},[97,42889,42890],{"class":191},"                # ② mode = 'fan_out'决定使用的fan值：\n",[97,42892,42893],{"class":99,"line":16903},[97,42894,42895],{"class":191},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[97,42897,42898],{"class":99,"line":16926},[97,42899,42900],{"class":191},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[97,42902,42903],{"class":99,"line":16948},[97,42904,42905],{"class":191},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[97,42907,42908],{"class":99,"line":16953},[97,42909,42910],{"class":191},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[97,42912,42913,42915,42917,42919,42921,42923],{"class":99,"line":16959},[97,42914,39111],{"class":319},[97,42916,39114],{"class":103},[97,42918,39117],{"class":319},[97,42920,39120],{"class":319},[97,42922,39123],{"class":370},[97,42924,3930],{"class":103},[97,42926,42927,42929,42931],{"class":99,"line":16973},[97,42928,39135],{"class":103},[97,42930,511],{"class":370},[97,42932,329],{"class":103},[97,42934,42935,42938,42940],{"class":99,"line":16986},[97,42936,42937],{"class":319},"                elif",[97,42939,39078],{"class":370},[97,42941,39154],{"class":103},[97,42943,42944,42947,42949,42951,42953],{"class":99,"line":16991},[97,42945,42946],{"class":103},"                    nn.init.normal_(m.weight,",[97,42948,511],{"class":370},[97,42950,698],{"class":103},[97,42952,39176],{"class":370},[97,42954,329],{"class":103},[97,42956,42957,42960,42962,42964,42966,42968],{"class":99,"line":17005},[97,42958,42959],{"class":319},"                    if",[97,42961,39114],{"class":103},[97,42963,39117],{"class":319},[97,42965,39120],{"class":319},[97,42967,39123],{"class":370},[97,42969,3930],{"class":103},[97,42971,42972,42975,42977],{"class":99,"line":17010},[97,42973,42974],{"class":103},"                        nn.init.constant_(m.bias,",[97,42976,511],{"class":370},[97,42978,329],{"class":103},[97,42980,42981],{"class":99,"line":17016},[97,42982,35355],{"class":191},[97,42984,42985,42987,42989],{"class":99,"line":17021},[97,42986,30991],{"class":319},[97,42988,31283],{"class":111},[97,42990,31286],{"class":103},[97,42992,42993,42995,42997,42999],{"class":99,"line":17035},[97,42994,31291],{"class":103},[97,42996,115],{"class":319},[97,42998,31013],{"class":370},[97,43000,43001],{"class":103},".b1(x)\n",[97,43003,43004,43006,43008,43010],{"class":99,"line":17040},[97,43005,31291],{"class":103},[97,43007,115],{"class":319},[97,43009,31013],{"class":370},[97,43011,43012],{"class":103},".b2(x)\n",[97,43014,43015,43017,43019,43021],{"class":99,"line":17045},[97,43016,31291],{"class":103},[97,43018,115],{"class":319},[97,43020,31013],{"class":370},[97,43022,43023],{"class":103},".b3(x)\n",[97,43025,43026,43028,43030,43032],{"class":99,"line":17059},[97,43027,31291],{"class":103},[97,43029,115],{"class":319},[97,43031,31013],{"class":370},[97,43033,43034],{"class":103},".b4(x)\n",[97,43036,43037,43039,43041,43043],{"class":99,"line":17071},[97,43038,31291],{"class":103},[97,43040,115],{"class":319},[97,43042,31013],{"class":370},[97,43044,43045],{"class":103},".b5(x)\n",[97,43047,43048,43050],{"class":99,"line":17076},[97,43049,14943],{"class":319},[97,43051,31399],{"class":103},[97,43053,43054],{"class":99,"line":17089},[97,43055,2591],{"emptyLinePlaceholder":249},[97,43057,43058],{"class":99,"line":17094},[97,43059,43060],{"class":191},"# 模型展示\n",[97,43062,43063,43065,43067,43069,43071],{"class":99,"line":17099},[97,43064,1723],{"class":319},[97,43066,31410],{"class":370},[97,43068,3140],{"class":319},[97,43070,31415],{"class":118},[97,43072,3930],{"class":103},[97,43074,43075,43077,43079,43081,43083,43085,43087,43089,43091],{"class":99,"line":17104},[97,43076,31427],{"class":103},[97,43078,115],{"class":319},[97,43080,30641],{"class":103},[97,43082,31434],{"class":118},[97,43084,1896],{"class":319},[97,43086,31439],{"class":103},[97,43088,1893],{"class":319},[97,43090,30666],{"class":118},[97,43092,329],{"class":103},[97,43094,43095,43097,43099],{"class":99,"line":17117},[97,43096,31479],{"class":103},[97,43098,115],{"class":319},[97,43100,43101],{"class":103},"GoogLeNet(Inception).to(device)\n",[97,43103,43104,43106,43108,43110,43112,43114,43116,43118],{"class":99,"line":17122},[97,43105,31489],{"class":370},[97,43107,31492],{"class":103},[97,43109,537],{"class":370},[97,43111,698],{"class":103},[97,43113,31691],{"class":370},[97,43115,698],{"class":103},[97,43117,31691],{"class":370},[97,43119,31505],{"class":103},[138,43121,43122],{"start":195},[70,43123,39373],{},[87,43125,43127],{"className":30568,"code":43126,"language":30570,"meta":92,"style":92},"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",[94,43128,43129,43135,43141,43151,43157,43167,43177,43187,43197,43207,43211,43222,43232,43236,43240,43244,43252,43264,43274,43290,43300,43332,43346,43356,43366,43370,43380,43394,43404,43414,43424,43430,43434,43438,43442,43446,43450,43458,43478,43482,43486,43490,43494,43498,43514,43518,43522,43530,43534,43538,43546,43550,43554,43558,43566,43570,43574,43578,43582,43590,43594,43602,43606,43614,43618,43626,43630,43638,43642,43646,43654,43658,43662,43666,43678,43702,43716,43720,43724,43728,43736,43740,43748,43752,43760,43764,43772,43776,43784,43788,43796,43800,43812,43816,43824,43828,43836,43840,43844,43848,43852,43860,43864,43880,43884,43892,43896,43900,43904,43908,43912,43916,43920,43936,43940,43952,43956,43968,43972,43984,43988,43996,44000,44008,44012,44016,44020,44026,44030,44038,44042,44058,44062,44070,44074,44090,44102,44106,44118,44122,44126,44134,44138,44142,44150,44154,44162,44166,44174,44178,44182,44224,44266,44270,44274,44290,44294,44310,44314,44318,44326,44330,44334,44346,44384,44388,44392,44400,44404,44418,44428,44434,44440,44446,44452,44456,44460,44466,44470,44474,44482,44486,44504,44508,44512,44516,44532,44536,44540,44544,44548,44552,44572,44592,44596,44600,44604,44612,44620,44624,44640,44660,44680,44684,44688,44696,44704,44708,44712,44716,44728,44732,44742,44750,44767],{"__ignoreMap":92},[97,43130,43131,43133],{"class":99,"line":100},[97,43132,30582],{"class":319},[97,43134,32012],{"class":103},[97,43136,43137,43139],{"class":99,"line":195},[97,43138,30582],{"class":319},[97,43140,32019],{"class":103},[97,43142,43143,43145,43147,43149],{"class":99,"line":241},[97,43144,30582],{"class":319},[97,43146,32030],{"class":103},[97,43148,31573],{"class":319},[97,43150,32035],{"class":103},[97,43152,43153,43155],{"class":99,"line":1387},[97,43154,30582],{"class":319},[97,43156,30585],{"class":103},[97,43158,43159,43161,43163,43165],{"class":99,"line":1393},[97,43160,30927],{"class":319},[97,43162,31605],{"class":103},[97,43164,30582],{"class":319},[97,43166,32052],{"class":103},[97,43168,43169,43171,43173,43175],{"class":99,"line":1407},[97,43170,30927],{"class":319},[97,43172,31558],{"class":103},[97,43174,30582],{"class":319},[97,43176,31563],{"class":103},[97,43178,43179,43181,43183,43185],{"class":99,"line":1413},[97,43180,30927],{"class":319},[97,43182,31588],{"class":103},[97,43184,30582],{"class":319},[97,43186,31593],{"class":103},[97,43188,43189,43191,43193,43195],{"class":99,"line":1504},[97,43190,30582],{"class":319},[97,43192,31605],{"class":103},[97,43194,31573],{"class":319},[97,43196,31610],{"class":103},[97,43198,43199,43201,43203,43205],{"class":99,"line":1510},[97,43200,30582],{"class":319},[97,43202,31622],{"class":103},[97,43204,31573],{"class":319},[97,43206,31627],{"class":103},[97,43208,43209],{"class":99,"line":1522},[97,43210,32097],{"class":191},[97,43212,43213,43215,43217,43219],{"class":99,"line":1804},[97,43214,30927],{"class":319},[97,43216,32104],{"class":103},[97,43218,30582],{"class":319},[97,43220,43221],{"class":103}," GoogLeNet, Inception\n",[97,43223,43224,43226,43228,43230],{"class":99,"line":1809},[97,43225,30927],{"class":319},[97,43227,30930],{"class":103},[97,43229,30582],{"class":319},[97,43231,30935],{"class":103},[97,43233,43234],{"class":99,"line":1815},[97,43235,2591],{"emptyLinePlaceholder":249},[97,43237,43238],{"class":99,"line":1820},[97,43239,2591],{"emptyLinePlaceholder":249},[97,43241,43242],{"class":99,"line":1834},[97,43243,32132],{"class":191},[97,43245,43246,43248,43250],{"class":99,"line":1839},[97,43247,32137],{"class":319},[97,43249,32140],{"class":111},[97,43251,32143],{"class":103},[97,43253,43254,43256,43258,43260,43262],{"class":99,"line":1845},[97,43255,32148],{"class":103},[97,43257,115],{"class":319},[97,43259,31645],{"class":103},[97,43261,31653],{"class":118},[97,43263,31656],{"class":103},[97,43265,43266,43268,43270,43272],{"class":99,"line":1866},[97,43267,32161],{"class":5407},[97,43269,115],{"class":319},[97,43271,31666],{"class":370},[97,43273,31656],{"class":103},[97,43275,43276,43278,43280,43282,43284,43286,43288],{"class":99,"line":1871},[97,43277,32172],{"class":5407},[97,43279,115],{"class":319},[97,43281,31683],{"class":103},[97,43283,31686],{"class":5407},[97,43285,115],{"class":319},[97,43287,35639],{"class":370},[97,43289,31694],{"class":103},[97,43291,43292,43294,43296,43298],{"class":99,"line":1885},[97,43293,32189],{"class":5407},[97,43295,115],{"class":319},[97,43297,31666],{"class":370},[97,43299,329],{"class":103},[97,43301,43302,43304,43306,43308,43310,43312,43314,43316,43318,43320,43322,43324,43326,43328,43330],{"class":99,"line":1890},[97,43303,32200],{"class":103},[97,43305,115],{"class":319},[97,43307,32205],{"class":103},[97,43309,32208],{"class":370},[97,43311,323],{"class":103},[97,43313,32213],{"class":370},[97,43315,775],{"class":319},[97,43317,7549],{"class":370},[97,43319,32220],{"class":103},[97,43321,32208],{"class":370},[97,43323,323],{"class":103},[97,43325,32227],{"class":370},[97,43327,775],{"class":319},[97,43329,7549],{"class":370},[97,43331,32234],{"class":103},[97,43333,43334,43336,43338,43340,43342,43344],{"class":99,"line":1919},[97,43335,32239],{"class":103},[97,43337,115],{"class":319},[97,43339,32244],{"class":103},[97,43341,31727],{"class":5407},[97,43343,115],{"class":319},[97,43345,31732],{"class":103},[97,43347,43348,43350,43352,43354],{"class":99,"line":1924},[97,43349,32255],{"class":5407},[97,43351,115],{"class":319},[97,43353,517],{"class":370},[97,43355,31656],{"class":103},[97,43357,43358,43360,43362,43364],{"class":99,"line":1941},[97,43359,32267],{"class":5407},[97,43361,115],{"class":319},[97,43363,31666],{"class":370},[97,43365,31656],{"class":103},[97,43367,43368],{"class":99,"line":1946},[97,43369,32278],{"class":191},[97,43371,43372,43374,43376,43378],{"class":99,"line":1951},[97,43373,32283],{"class":5407},[97,43375,115],{"class":319},[97,43377,715],{"class":370},[97,43379,329],{"class":103},[97,43381,43382,43384,43386,43388,43390,43392],{"class":99,"line":1956},[97,43383,32294],{"class":103},[97,43385,115],{"class":319},[97,43387,31724],{"class":103},[97,43389,31727],{"class":5407},[97,43391,115],{"class":319},[97,43393,32305],{"class":103},[97,43395,43396,43398,43400,43402],{"class":99,"line":1970},[97,43397,32310],{"class":5407},[97,43399,115],{"class":319},[97,43401,517],{"class":370},[97,43403,31656],{"class":103},[97,43405,43406,43408,43410,43412],{"class":99,"line":1975},[97,43407,32321],{"class":5407},[97,43409,115],{"class":319},[97,43411,31666],{"class":370},[97,43413,31656],{"class":103},[97,43415,43416,43418,43420,43422],{"class":99,"line":2768},[97,43417,32332],{"class":5407},[97,43419,115],{"class":319},[97,43421,715],{"class":370},[97,43423,329],{"class":103},[97,43425,43426,43428],{"class":99,"line":2782},[97,43427,4281],{"class":319},[97,43429,32345],{"class":103},[97,43431,43432],{"class":99,"line":2790},[97,43433,2591],{"emptyLinePlaceholder":249},[97,43435,43436],{"class":99,"line":2795},[97,43437,32354],{"class":191},[97,43439,43440],{"class":99,"line":2801},[97,43441,32359],{"class":191},[97,43443,43444],{"class":99,"line":2807},[97,43445,2591],{"emptyLinePlaceholder":249},[97,43447,43448],{"class":99,"line":2812},[97,43449,32368],{"class":191},[97,43451,43452,43454,43456],{"class":99,"line":8139},[97,43453,32137],{"class":319},[97,43455,32375],{"class":111},[97,43457,32378],{"class":103},[97,43459,43460,43462,43464,43466,43468,43470,43472,43474,43476],{"class":99,"line":8163},[97,43461,31427],{"class":103},[97,43463,115],{"class":319},[97,43465,30641],{"class":103},[97,43467,31434],{"class":118},[97,43469,1896],{"class":319},[97,43471,31439],{"class":103},[97,43473,1893],{"class":319},[97,43475,32397],{"class":118},[97,43477,329],{"class":103},[97,43479,43480],{"class":99,"line":8168},[97,43481,2591],{"emptyLinePlaceholder":249},[97,43483,43484],{"class":99,"line":8174},[97,43485,2591],{"emptyLinePlaceholder":249},[97,43487,43488],{"class":99,"line":8201},[97,43489,32412],{"class":191},[97,43491,43492],{"class":99,"line":8206},[97,43493,32417],{"class":191},[97,43495,43496],{"class":99,"line":8212},[97,43497,32422],{"class":191},[97,43499,43500,43502,43504,43506,43508,43510,43512],{"class":99,"line":8224},[97,43501,32427],{"class":103},[97,43503,115],{"class":319},[97,43505,32432],{"class":103},[97,43507,32435],{"class":5407},[97,43509,115],{"class":319},[97,43511,32440],{"class":370},[97,43513,329],{"class":103},[97,43515,43516],{"class":99,"line":8236},[97,43517,2591],{"emptyLinePlaceholder":249},[97,43519,43520],{"class":99,"line":8248},[97,43521,32451],{"class":191},[97,43523,43524,43526,43528],{"class":99,"line":9907},[97,43525,32456],{"class":103},[97,43527,115],{"class":319},[97,43529,32461],{"class":103},[97,43531,43532],{"class":99,"line":9932},[97,43533,2591],{"emptyLinePlaceholder":249},[97,43535,43536],{"class":99,"line":9955},[97,43537,32470],{"class":191},[97,43539,43540,43542,43544],{"class":99,"line":9979},[97,43541,31479],{"class":103},[97,43543,115],{"class":319},[97,43545,32479],{"class":103},[97,43547,43548],{"class":99,"line":9984},[97,43549,32484],{"class":191},[97,43551,43552],{"class":99,"line":9989},[97,43553,32489],{"class":191},[97,43555,43556],{"class":99,"line":9994},[97,43557,32494],{"class":191},[97,43559,43560,43562,43564],{"class":99,"line":10003},[97,43561,32499],{"class":103},[97,43563,115],{"class":319},[97,43565,32504],{"class":103},[97,43567,43568],{"class":99,"line":10008},[97,43569,2591],{"emptyLinePlaceholder":249},[97,43571,43572],{"class":99,"line":10014},[97,43573,2591],{"emptyLinePlaceholder":249},[97,43575,43576],{"class":99,"line":10035},[97,43577,32517],{"class":191},[97,43579,43580],{"class":99,"line":10041},[97,43581,32522],{"class":191},[97,43583,43584,43586,43588],{"class":99,"line":10055},[97,43585,32527],{"class":103},[97,43587,115],{"class":319},[97,43589,32532],{"class":370},[97,43591,43592],{"class":99,"line":10061},[97,43593,32537],{"class":191},[97,43595,43596,43598,43600],{"class":99,"line":10088},[97,43597,32542],{"class":103},[97,43599,115],{"class":319},[97,43601,32547],{"class":103},[97,43603,43604],{"class":99,"line":10097},[97,43605,32552],{"class":191},[97,43607,43608,43610,43612],{"class":99,"line":10103},[97,43609,32557],{"class":103},[97,43611,115],{"class":319},[97,43613,32547],{"class":103},[97,43615,43616],{"class":99,"line":10111},[97,43617,32566],{"class":191},[97,43619,43620,43622,43624],{"class":99,"line":10116},[97,43621,32571],{"class":103},[97,43623,115],{"class":319},[97,43625,32547],{"class":103},[97,43627,43628],{"class":99,"line":16794},[97,43629,32580],{"class":191},[97,43631,43632,43634,43636],{"class":99,"line":16800},[97,43633,32585],{"class":103},[97,43635,115],{"class":319},[97,43637,32547],{"class":103},[97,43639,43640],{"class":99,"line":16823},[97,43641,2591],{"emptyLinePlaceholder":249},[97,43643,43644],{"class":99,"line":16829},[97,43645,32598],{"class":191},[97,43647,43648,43650,43652],{"class":99,"line":16852},[97,43649,32603],{"class":103},[97,43651,115],{"class":319},[97,43653,32608],{"class":103},[97,43655,43656],{"class":99,"line":16866},[97,43657,2591],{"emptyLinePlaceholder":249},[97,43659,43660],{"class":99,"line":16886},[97,43661,2591],{"emptyLinePlaceholder":249},[97,43663,43664],{"class":99,"line":16892},[97,43665,32621],{"class":191},[97,43667,43668,43670,43672,43674,43676],{"class":99,"line":16903},[97,43669,3392],{"class":319},[97,43671,32628],{"class":103},[97,43673,26233],{"class":319},[97,43675,32633],{"class":370},[97,43677,32636],{"class":103},[97,43679,43680,43682,43684,43686,43688,43690,43692,43694,43696,43698,43700],{"class":99,"line":16926},[97,43681,32641],{"class":370},[97,43683,323],{"class":103},[97,43685,32646],{"class":118},[97,43687,32649],{"class":370},[97,43689,904],{"class":118},[97,43691,32649],{"class":370},[97,43693,571],{"class":118},[97,43695,32658],{"class":103},[97,43697,852],{"class":319},[97,43699,537],{"class":370},[97,43701,30687],{"class":103},[97,43703,43704,43706,43708,43710,43712,43714],{"class":99,"line":16948},[97,43705,32641],{"class":370},[97,43707,323],{"class":103},[97,43709,32673],{"class":118},[97,43711,775],{"class":319},[97,43713,766],{"class":370},[97,43715,329],{"class":103},[97,43717,43718],{"class":99,"line":16953},[97,43719,2591],{"emptyLinePlaceholder":249},[97,43721,43722],{"class":99,"line":16959},[97,43723,32688],{"class":191},[97,43725,43726],{"class":99,"line":16973},[97,43727,32693],{"class":191},[97,43729,43730,43732,43734],{"class":99,"line":16986},[97,43731,32698],{"class":103},[97,43733,115],{"class":319},[97,43735,32532],{"class":370},[97,43737,43738],{"class":99,"line":16991},[97,43739,32707],{"class":191},[97,43741,43742,43744,43746],{"class":99,"line":17005},[97,43743,32712],{"class":103},[97,43745,115],{"class":319},[97,43747,3276],{"class":370},[97,43749,43750],{"class":99,"line":17010},[97,43751,32721],{"class":191},[97,43753,43754,43756,43758],{"class":99,"line":17016},[97,43755,32726],{"class":103},[97,43757,115],{"class":319},[97,43759,32532],{"class":370},[97,43761,43762],{"class":99,"line":17021},[97,43763,32735],{"class":191},[97,43765,43766,43768,43770],{"class":99,"line":17035},[97,43767,32740],{"class":103},[97,43769,115],{"class":319},[97,43771,3276],{"class":370},[97,43773,43774],{"class":99,"line":17040},[97,43775,32749],{"class":191},[97,43777,43778,43780,43782],{"class":99,"line":17045},[97,43779,32754],{"class":103},[97,43781,115],{"class":319},[97,43783,3276],{"class":370},[97,43785,43786],{"class":99,"line":17059},[97,43787,32763],{"class":191},[97,43789,43790,43792,43794],{"class":99,"line":17071},[97,43791,32768],{"class":103},[97,43793,115],{"class":319},[97,43795,3276],{"class":370},[97,43797,43798],{"class":99,"line":17076},[97,43799,32777],{"class":191},[97,43801,43802,43804,43806,43808,43810],{"class":99,"line":17089},[97,43803,3594],{"class":319},[97,43805,31791],{"class":103},[97,43807,26233],{"class":319},[97,43809,31796],{"class":370},[97,43811,32790],{"class":103},[97,43813,43814],{"class":99,"line":17094},[97,43815,32795],{"class":191},[97,43817,43818,43820,43822],{"class":99,"line":17099},[97,43819,32800],{"class":103},[97,43821,115],{"class":319},[97,43823,32805],{"class":103},[97,43825,43826],{"class":99,"line":17104},[97,43827,32810],{"class":191},[97,43829,43830,43832,43834],{"class":99,"line":17117},[97,43831,32815],{"class":103},[97,43833,115],{"class":319},[97,43835,32820],{"class":103},[97,43837,43838],{"class":99,"line":17122},[97,43839,32826],{"class":191},[97,43841,43842],{"class":99,"line":32823},[97,43843,32832],{"class":103},[97,43845,43846],{"class":99,"line":32829},[97,43847,32838],{"class":191},[97,43849,43850],{"class":99,"line":32835},[97,43851,32844],{"class":191},[97,43853,43854,43856,43858],{"class":99,"line":32841},[97,43855,32850],{"class":103},[97,43857,115],{"class":319},[97,43859,32855],{"class":103},[97,43861,43862],{"class":99,"line":32847},[97,43863,32861],{"class":191},[97,43865,43866,43868,43870,43872,43874,43876,43878],{"class":99,"line":32858},[97,43867,32867],{"class":103},[97,43869,115],{"class":319},[97,43871,32872],{"class":103},[97,43873,32875],{"class":5407},[97,43875,115],{"class":319},[97,43877,537],{"class":370},[97,43879,329],{"class":103},[97,43881,43882],{"class":99,"line":32864},[97,43883,32887],{"class":191},[97,43885,43886,43888,43890],{"class":99,"line":32884},[97,43887,32893],{"class":103},[97,43889,115],{"class":319},[97,43891,32898],{"class":103},[97,43893,43894],{"class":99,"line":32890},[97,43895,32904],{"class":191},[97,43897,43898],{"class":99,"line":32901},[97,43899,32910],{"class":103},[97,43901,43902],{"class":99,"line":32907},[97,43903,32916],{"class":191},[97,43905,43906],{"class":99,"line":32913},[97,43907,32922],{"class":103},[97,43909,43910],{"class":99,"line":32919},[97,43911,32928],{"class":191},[97,43913,43914],{"class":99,"line":32925},[97,43915,32934],{"class":103},[97,43917,43918],{"class":99,"line":32931},[97,43919,32940],{"class":191},[97,43921,43922,43924,43926,43928,43930,43932,43934],{"class":99,"line":32937},[97,43923,32946],{"class":103},[97,43925,9668],{"class":319},[97,43927,32951],{"class":103},[97,43929,775],{"class":319},[97,43931,32956],{"class":103},[97,43933,511],{"class":370},[97,43935,329],{"class":103},[97,43937,43938],{"class":99,"line":32943},[97,43939,32966],{"class":191},[97,43941,43942,43944,43946,43948,43950],{"class":99,"line":32963},[97,43943,32972],{"class":103},[97,43945,9668],{"class":319},[97,43947,32977],{"class":103},[97,43949,3140],{"class":319},[97,43951,32982],{"class":103},[97,43953,43954],{"class":99,"line":32969},[97,43955,32988],{"class":191},[97,43957,43958,43960,43962,43964,43966],{"class":99,"line":32985},[97,43959,32994],{"class":103},[97,43961,9668],{"class":319},[97,43963,32956],{"class":103},[97,43965,511],{"class":370},[97,43967,329],{"class":103},[97,43969,43970],{"class":99,"line":32991},[97,43971,33008],{"class":191},[97,43973,43974,43976,43978,43980,43982],{"class":99,"line":33005},[97,43975,3594],{"class":319},[97,43977,33016],{"class":103},[97,43979,26233],{"class":319},[97,43981,31796],{"class":370},[97,43983,33023],{"class":103},[97,43985,43986],{"class":99,"line":33011},[97,43987,33029],{"class":191},[97,43989,43990,43992,43994],{"class":99,"line":33026},[97,43991,32800],{"class":103},[97,43993,115],{"class":319},[97,43995,32805],{"class":103},[97,43997,43998],{"class":99,"line":33032},[97,43999,33044],{"class":191},[97,44001,44002,44004,44006],{"class":99,"line":33041},[97,44003,32815],{"class":103},[97,44005,115],{"class":319},[97,44007,32820],{"class":103},[97,44009,44010],{"class":99,"line":33047},[97,44011,33059],{"class":191},[97,44013,44014],{"class":99,"line":33056},[97,44015,33065],{"class":103},[97,44017,44018],{"class":99,"line":33062},[97,44019,36546],{"class":191},[97,44021,44022,44024],{"class":99,"line":33068},[97,44023,33071],{"class":319},[97,44025,33074],{"class":103},[97,44027,44028],{"class":99,"line":33077},[97,44029,33080],{"class":191},[97,44031,44032,44034,44036],{"class":99,"line":33083},[97,44033,36561],{"class":103},[97,44035,115],{"class":319},[97,44037,32855],{"class":103},[97,44039,44040],{"class":99,"line":33094},[97,44041,33097],{"class":191},[97,44043,44044,44046,44048,44050,44052,44054,44056],{"class":99,"line":33100},[97,44045,36574],{"class":103},[97,44047,115],{"class":319},[97,44049,32872],{"class":103},[97,44051,32875],{"class":5407},[97,44053,115],{"class":319},[97,44055,537],{"class":370},[97,44057,329],{"class":103},[97,44059,44060],{"class":99,"line":33119},[97,44061,33122],{"class":191},[97,44063,44064,44066,44068],{"class":99,"line":33125},[97,44065,36595],{"class":103},[97,44067,115],{"class":319},[97,44069,32898],{"class":103},[97,44071,44072],{"class":99,"line":33136},[97,44073,33139],{"class":191},[97,44075,44076,44078,44080,44082,44084,44086,44088],{"class":99,"line":33142},[97,44077,36608],{"class":103},[97,44079,9668],{"class":319},[97,44081,36613],{"class":103},[97,44083,775],{"class":319},[97,44085,32956],{"class":103},[97,44087,511],{"class":370},[97,44089,329],{"class":103},[97,44091,44092,44094,44096,44098,44100],{"class":99,"line":33162},[97,44093,36626],{"class":103},[97,44095,9668],{"class":319},[97,44097,32977],{"class":103},[97,44099,3140],{"class":319},[97,44101,32982],{"class":103},[97,44103,44104],{"class":99,"line":33178},[97,44105,36639],{"class":191},[97,44107,44108,44110,44112,44114,44116],{"class":99,"line":33184},[97,44109,36644],{"class":103},[97,44111,9668],{"class":319},[97,44113,32956],{"class":103},[97,44115,511],{"class":370},[97,44117,329],{"class":103},[97,44119,44120],{"class":99,"line":33198},[97,44121,33201],{"class":191},[97,44123,44124],{"class":99,"line":33204},[97,44125,33207],{"class":191},[97,44127,44128,44130,44132],{"class":99,"line":33210},[97,44129,33213],{"class":103},[97,44131,904],{"class":319},[97,44133,33218],{"class":103},[97,44135,44136],{"class":99,"line":33221},[97,44137,33224],{"class":191},[97,44139,44140],{"class":99,"line":33227},[97,44141,33230],{"class":191},[97,44143,44144,44146,44148],{"class":99,"line":33233},[97,44145,33236],{"class":103},[97,44147,904],{"class":319},[97,44149,33218],{"class":103},[97,44151,44152],{"class":99,"line":33243},[97,44153,33246],{"class":191},[97,44155,44156,44158,44160],{"class":99,"line":33249},[97,44157,33252],{"class":103},[97,44159,904],{"class":319},[97,44161,33257],{"class":103},[97,44163,44164],{"class":99,"line":33260},[97,44165,33263],{"class":191},[97,44167,44168,44170,44172],{"class":99,"line":33266},[97,44169,33269],{"class":103},[97,44171,904],{"class":319},[97,44173,33257],{"class":103},[97,44175,44176],{"class":99,"line":33276},[97,44177,2591],{"emptyLinePlaceholder":249},[97,44179,44180],{"class":99,"line":33281},[97,44181,33284],{"class":191},[97,44183,44184,44186,44188,44190,44192,44194,44196,44198,44200,44202,44204,44206,44208,44210,44212,44214,44216,44218,44220,44222],{"class":99,"line":33287},[97,44185,32641],{"class":370},[97,44187,323],{"class":103},[97,44189,3783],{"class":118},[97,44191,32649],{"class":370},[97,44193,33298],{"class":118},[97,44195,1216],{"class":370},[97,44197,33303],{"class":319},[97,44199,1265],{"class":370},[97,44201,33308],{"class":118},[97,44203,1216],{"class":370},[97,44205,33303],{"class":319},[97,44207,1265],{"class":370},[97,44209,3783],{"class":118},[97,44211,33319],{"class":103},[97,44213,852],{"class":319},[97,44215,537],{"class":370},[97,44217,33326],{"class":103},[97,44219,852],{"class":319},[97,44221,537],{"class":370},[97,44223,33333],{"class":103},[97,44225,44226,44228,44230,44232,44234,44236,44238,44240,44242,44244,44246,44248,44250,44252,44254,44256,44258,44260,44262,44264],{"class":99,"line":33336},[97,44227,32641],{"class":370},[97,44229,323],{"class":103},[97,44231,3783],{"class":118},[97,44233,32649],{"class":370},[97,44235,33347],{"class":118},[97,44237,1216],{"class":370},[97,44239,33303],{"class":319},[97,44241,1265],{"class":370},[97,44243,33356],{"class":118},[97,44245,1216],{"class":370},[97,44247,33303],{"class":319},[97,44249,1265],{"class":370},[97,44251,3783],{"class":118},[97,44253,33367],{"class":103},[97,44255,852],{"class":319},[97,44257,537],{"class":370},[97,44259,33374],{"class":103},[97,44261,852],{"class":319},[97,44263,537],{"class":370},[97,44265,33333],{"class":103},[97,44267,44268],{"class":99,"line":33383},[97,44269,2591],{"emptyLinePlaceholder":249},[97,44271,44272],{"class":99,"line":33388},[97,44273,33391],{"class":191},[97,44275,44276,44278,44280,44282,44284,44286,44288],{"class":99,"line":33394},[97,44277,2688],{"class":319},[97,44279,33399],{"class":103},[97,44281,852],{"class":319},[97,44283,537],{"class":370},[97,44285,1259],{"class":103},[97,44287,1279],{"class":319},[97,44289,33410],{"class":103},[97,44291,44292],{"class":99,"line":33413},[97,44293,33416],{"class":191},[97,44295,44296,44298,44300,44302,44304,44306,44308],{"class":99,"line":33419},[97,44297,33422],{"class":103},[97,44299,362],{"class":370},[97,44301,115],{"class":319},[97,44303,33429],{"class":103},[97,44305,852],{"class":319},[97,44307,537],{"class":370},[97,44309,33436],{"class":103},[97,44311,44312],{"class":99,"line":33439},[97,44313,33442],{"class":191},[97,44315,44316],{"class":99,"line":33445},[97,44317,33448],{"class":191},[97,44319,44320,44322,44324],{"class":99,"line":33451},[97,44321,33454],{"class":103},[97,44323,115],{"class":319},[97,44325,32504],{"class":103},[97,44327,44328],{"class":99,"line":33461},[97,44329,2591],{"emptyLinePlaceholder":249},[97,44331,44332],{"class":99,"line":33466},[97,44333,33469],{"class":191},[97,44335,44336,44338,44340,44342,44344],{"class":99,"line":33472},[97,44337,33475],{"class":103},[97,44339,115],{"class":319},[97,44341,33480],{"class":103},[97,44343,852],{"class":319},[97,44345,33485],{"class":103},[97,44347,44348,44350,44352,44354,44356,44358,44360,44362,44364,44366,44368,44370,44372,44374,44376,44378,44380,44382],{"class":99,"line":33488},[97,44349,32641],{"class":370},[97,44351,323],{"class":103},[97,44353,33495],{"class":118},[97,44355,1216],{"class":370},[97,44357,33500],{"class":319},[97,44359,1265],{"class":370},[97,44361,864],{"class":118},[97,44363,1216],{"class":370},[97,44365,33500],{"class":319},[97,44367,1265],{"class":370},[97,44369,33513],{"class":118},[97,44371,33516],{"class":103},[97,44373,33519],{"class":319},[97,44375,1227],{"class":370},[97,44377,33524],{"class":103},[97,44379,648],{"class":319},[97,44381,1227],{"class":370},[97,44383,30687],{"class":103},[97,44385,44386],{"class":99,"line":33533},[97,44387,36923],{"class":191},[97,44389,44390],{"class":99,"line":33539},[97,44391,36928],{"class":191},[97,44393,44394,44396,44398],{"class":99,"line":33545},[97,44395,36933],{"class":103},[97,44397,33557],{"class":118},[97,44399,329],{"class":103},[97,44401,44402],{"class":99,"line":33551},[97,44403,33577],{"class":191},[97,44405,44406,44408,44410,44412,44414,44416],{"class":99,"line":33562},[97,44407,33583],{"class":103},[97,44409,115],{"class":319},[97,44411,33588],{"class":103},[97,44413,33591],{"class":5407},[97,44415,115],{"class":319},[97,44417,1738],{"class":103},[97,44419,44420,44422,44424,44426],{"class":99,"line":33568},[97,44421,33601],{"class":118},[97,44423,1179],{"class":103},[97,44425,33606],{"class":370},[97,44427,33609],{"class":103},[97,44429,44430,44432],{"class":99,"line":33574},[97,44431,33615],{"class":118},[97,44433,33618],{"class":103},[97,44435,44436,44438],{"class":99,"line":33580},[97,44437,33624],{"class":118},[97,44439,33627],{"class":103},[97,44441,44442,44444],{"class":99,"line":33598},[97,44443,33633],{"class":118},[97,44445,33636],{"class":103},[97,44447,44448,44450],{"class":99,"line":33612},[97,44449,33642],{"class":118},[97,44451,33645],{"class":103},[97,44453,44454],{"class":99,"line":33621},[97,44455,33651],{"class":103},[97,44457,44458],{"class":99,"line":33630},[97,44459,33657],{"class":191},[97,44461,44462,44464],{"class":99,"line":33639},[97,44463,4281],{"class":319},[97,44465,33665],{"class":103},[97,44467,44468],{"class":99,"line":33648},[97,44469,2591],{"emptyLinePlaceholder":249},[97,44471,44472],{"class":99,"line":33654},[97,44473,33676],{"class":191},[97,44475,44476,44478,44480],{"class":99,"line":33660},[97,44477,32137],{"class":319},[97,44479,33684],{"class":111},[97,44481,33687],{"class":103},[97,44483,44484],{"class":99,"line":33668},[97,44485,33693],{"class":191},[97,44487,44488,44490,44492,44494,44496,44498,44500,44502],{"class":99,"line":33673},[97,44489,33699],{"class":103},[97,44491,31883],{"class":5407},[97,44493,115],{"class":319},[97,44495,323],{"class":103},[97,44497,818],{"class":370},[97,44499,698],{"class":103},[97,44501,613],{"class":370},[97,44503,30687],{"class":103},[97,44505,44506],{"class":99,"line":33679},[97,44507,33719],{"class":191},[97,44509,44510],{"class":99,"line":33690},[97,44511,33725],{"class":191},[97,44513,44514],{"class":99,"line":33696},[97,44515,33731],{"class":191},[97,44517,44518,44520,44522,44524,44526,44528,44530],{"class":99,"line":33716},[97,44519,31917],{"class":103},[97,44521,537],{"class":370},[97,44523,698],{"class":103},[97,44525,398],{"class":370},[97,44527,698],{"class":103},[97,44529,537],{"class":370},[97,44531,329],{"class":103},[97,44533,44534],{"class":99,"line":33722},[97,44535,33754],{"class":191},[97,44537,44538],{"class":99,"line":33728},[97,44539,33760],{"class":191},[97,44541,44542],{"class":99,"line":33734},[97,44543,33766],{"class":191},[97,44545,44546],{"class":99,"line":33751},[97,44547,33772],{"class":191},[97,44549,44550],{"class":99,"line":33757},[97,44551,33778],{"class":191},[97,44553,44554,44556,44558,44560,44562,44564,44566,44568,44570],{"class":99,"line":33763},[97,44555,33784],{"class":103},[97,44557,33787],{"class":118},[97,44559,33790],{"class":103},[97,44561,33793],{"class":118},[97,44563,698],{"class":103},[97,44565,33798],{"class":5407},[97,44567,115],{"class":319},[97,44569,33803],{"class":118},[97,44571,329],{"class":103},[97,44573,44574,44576,44578,44580,44582,44584,44586,44588,44590],{"class":99,"line":33769},[97,44575,33784],{"class":103},[97,44577,33787],{"class":118},[97,44579,33815],{"class":103},[97,44581,33818],{"class":118},[97,44583,698],{"class":103},[97,44585,33798],{"class":5407},[97,44587,115],{"class":319},[97,44589,33827],{"class":118},[97,44591,329],{"class":103},[97,44593,44594],{"class":99,"line":33775},[97,44595,33835],{"class":191},[97,44597,44598],{"class":99,"line":33781},[97,44599,33841],{"class":103},[97,44601,44602],{"class":99,"line":33808},[97,44603,33847],{"class":191},[97,44605,44606,44608,44610],{"class":99,"line":33832},[97,44607,33853],{"class":103},[97,44609,33856],{"class":118},[97,44611,329],{"class":103},[97,44613,44614,44616,44618],{"class":99,"line":33838},[97,44615,33864],{"class":103},[97,44617,33867],{"class":118},[97,44619,329],{"class":103},[97,44621,44622],{"class":99,"line":33844},[97,44623,33875],{"class":191},[97,44625,44626,44628,44630,44632,44634,44636,44638],{"class":99,"line":33850},[97,44627,31917],{"class":103},[97,44629,537],{"class":370},[97,44631,698],{"class":103},[97,44633,398],{"class":370},[97,44635,698],{"class":103},[97,44637,398],{"class":370},[97,44639,329],{"class":103},[97,44641,44642,44644,44646,44648,44650,44652,44654,44656,44658],{"class":99,"line":33861},[97,44643,33784],{"class":103},[97,44645,33787],{"class":118},[97,44647,33902],{"class":103},[97,44649,33793],{"class":118},[97,44651,698],{"class":103},[97,44653,33798],{"class":5407},[97,44655,115],{"class":319},[97,44657,33913],{"class":118},[97,44659,329],{"class":103},[97,44661,44662,44664,44666,44668,44670,44672,44674,44676,44678],{"class":99,"line":33872},[97,44663,33784],{"class":103},[97,44665,33787],{"class":118},[97,44667,33925],{"class":103},[97,44669,33818],{"class":118},[97,44671,698],{"class":103},[97,44673,33798],{"class":5407},[97,44675,115],{"class":319},[97,44677,33936],{"class":118},[97,44679,329],{"class":103},[97,44681,44682],{"class":99,"line":33878},[97,44683,33944],{"class":191},[97,44685,44686],{"class":99,"line":33895},[97,44687,33841],{"class":103},[97,44689,44690,44692,44694],{"class":99,"line":33918},[97,44691,33853],{"class":103},[97,44693,33787],{"class":118},[97,44695,329],{"class":103},[97,44697,44698,44700,44702],{"class":99,"line":33941},[97,44699,33864],{"class":103},[97,44701,33966],{"class":118},[97,44703,329],{"class":103},[97,44705,44706],{"class":99,"line":33947},[97,44707,33974],{"class":103},[97,44709,44710],{"class":99,"line":33952},[97,44711,2591],{"emptyLinePlaceholder":249},[97,44713,44714],{"class":99,"line":33961},[97,44715,33985],{"class":191},[97,44717,44718,44720,44722,44724,44726],{"class":99,"line":33971},[97,44719,1723],{"class":319},[97,44721,31410],{"class":370},[97,44723,3140],{"class":319},[97,44725,31415],{"class":118},[97,44727,3930],{"class":103},[97,44729,44730],{"class":99,"line":33977},[97,44731,34004],{"class":191},[97,44733,44734,44737,44739],{"class":99,"line":33982},[97,44735,44736],{"class":103},"    GoogLeNet",[97,44738,115],{"class":319},[97,44740,44741],{"class":103},"GoogLeNet(Inception)\n",[97,44743,44744,44746,44748],{"class":99,"line":33988},[97,44745,34021],{"class":103},[97,44747,115],{"class":319},[97,44749,34026],{"class":103},[97,44751,44752,44754,44756,44759,44761,44763,44765],{"class":99,"line":34001},[97,44753,33583],{"class":103},[97,44755,115],{"class":319},[97,44757,44758],{"class":103},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[97,44760,34039],{"class":5407},[97,44762,115],{"class":319},[97,44764,1270],{"class":370},[97,44766,329],{"class":103},[97,44768,44769],{"class":99,"line":34007},[97,44770,34051],{"class":103},[138,44772,44773],{"start":241},[70,44774,40764],{},[87,44776,44778],{"className":30568,"code":44777,"language":30570,"meta":92,"style":92},"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",[94,44779,44780,44786,44796,44806,44810,44820,44831,44835,44839,44843,44851,44867,44877,44893,44903,44917,44921,44931,44941,44951,44957,44961,44965,44973,44977,44993,45001,45005,45009,45017,45025,45029,45033,45037,45041,45047,45051,45061,45069,45077,45081,45085,45089,45097,45101,45117,45121,45125,45129,45141,45145,45157,45161,45165,45177,45181,45191,45195,45199,45211,45215,45223,45227,45231,45239,45243,45251,45255,45259,45263,45267,45271,45287,45295,45299,45303,45351,45357,45361,45371,45379,45387,45391,45395,45399,45403,45411,45415,45431,45435,45443,45451],{"__ignoreMap":92},[97,44781,44782,44784],{"class":99,"line":100},[97,44783,30582],{"class":319},[97,44785,30585],{"class":103},[97,44787,44788,44790,44792,44794],{"class":99,"line":195},[97,44789,30582],{"class":319},[97,44791,31605],{"class":103},[97,44793,31573],{"class":319},[97,44795,31610],{"class":103},[97,44797,44798,44800,44802,44804],{"class":99,"line":241},[97,44799,30927],{"class":319},[97,44801,31588],{"class":103},[97,44803,30582],{"class":319},[97,44805,31593],{"class":103},[97,44807,44808],{"class":99,"line":1387},[97,44809,34112],{"class":191},[97,44811,44812,44814,44816,44818],{"class":99,"line":1393},[97,44813,30927],{"class":319},[97,44815,31558],{"class":103},[97,44817,30582],{"class":319},[97,44819,31563],{"class":103},[97,44821,44822,44824,44826,44828],{"class":99,"line":1407},[97,44823,30927],{"class":319},[97,44825,32104],{"class":103},[97,44827,30582],{"class":319},[97,44829,44830],{"class":103}," GoogLeNet,Inception\n",[97,44832,44833],{"class":99,"line":1413},[97,44834,2591],{"emptyLinePlaceholder":249},[97,44836,44837],{"class":99,"line":1504},[97,44838,2591],{"emptyLinePlaceholder":249},[97,44840,44841],{"class":99,"line":1510},[97,44842,34141],{"class":191},[97,44844,44845,44847,44849],{"class":99,"line":1522},[97,44846,32137],{"class":319},[97,44848,34148],{"class":111},[97,44850,32143],{"class":103},[97,44852,44853,44855,44857,44859,44861,44863,44865],{"class":99,"line":1804},[97,44854,34155],{"class":103},[97,44856,115],{"class":319},[97,44858,31645],{"class":103},[97,44860,31648],{"class":5407},[97,44862,115],{"class":319},[97,44864,31653],{"class":118},[97,44866,31656],{"class":103},[97,44868,44869,44871,44873,44875],{"class":99,"line":1809},[97,44870,34172],{"class":5407},[97,44872,115],{"class":319},[97,44874,34177],{"class":370},[97,44876,31656],{"class":103},[97,44878,44879,44881,44883,44885,44887,44889,44891],{"class":99,"line":1815},[97,44880,34184],{"class":5407},[97,44882,115],{"class":319},[97,44884,31683],{"class":103},[97,44886,31686],{"class":5407},[97,44888,115],{"class":319},[97,44890,35639],{"class":370},[97,44892,31694],{"class":103},[97,44894,44895,44897,44899,44901],{"class":99,"line":1820},[97,44896,34201],{"class":5407},[97,44898,115],{"class":319},[97,44900,31666],{"class":370},[97,44902,329],{"class":103},[97,44904,44905,44907,44909,44911,44913,44915],{"class":99,"line":1834},[97,44906,34212],{"class":103},[97,44908,115],{"class":319},[97,44910,31724],{"class":103},[97,44912,31727],{"class":5407},[97,44914,115],{"class":319},[97,44916,34223],{"class":103},[97,44918,44919],{"class":99,"line":1839},[97,44920,34228],{"class":191},[97,44922,44923,44925,44927,44929],{"class":99,"line":1845},[97,44924,34233],{"class":5407},[97,44926,115],{"class":319},[97,44928,537],{"class":370},[97,44930,31656],{"class":103},[97,44932,44933,44935,44937,44939],{"class":99,"line":1866},[97,44934,34244],{"class":5407},[97,44936,115],{"class":319},[97,44938,31666],{"class":370},[97,44940,31656],{"class":103},[97,44942,44943,44945,44947,44949],{"class":99,"line":1871},[97,44944,34255],{"class":5407},[97,44946,115],{"class":319},[97,44948,511],{"class":370},[97,44950,329],{"class":103},[97,44952,44953,44955],{"class":99,"line":1885},[97,44954,4281],{"class":319},[97,44956,34268],{"class":103},[97,44958,44959],{"class":99,"line":1890},[97,44960,2591],{"emptyLinePlaceholder":249},[97,44962,44963],{"class":99,"line":1919},[97,44964,34277],{"class":191},[97,44966,44967,44969,44971],{"class":99,"line":1924},[97,44968,32137],{"class":319},[97,44970,34284],{"class":111},[97,44972,34287],{"class":103},[97,44974,44975],{"class":99,"line":1941},[97,44976,34292],{"class":191},[97,44978,44979,44981,44983,44985,44987,44989,44991],{"class":99,"line":1946},[97,44980,31427],{"class":103},[97,44982,115],{"class":319},[97,44984,31434],{"class":118},[97,44986,1896],{"class":319},[97,44988,31439],{"class":103},[97,44990,1893],{"class":319},[97,44992,34309],{"class":118},[97,44994,44995,44997,44999],{"class":99,"line":1951},[97,44996,31479],{"class":103},[97,44998,115],{"class":319},[97,45000,32479],{"class":103},[97,45002,45003],{"class":99,"line":1956},[97,45004,2591],{"emptyLinePlaceholder":249},[97,45006,45007],{"class":99,"line":1970},[97,45008,34326],{"class":191},[97,45010,45011,45013,45015],{"class":99,"line":1975},[97,45012,34331],{"class":103},[97,45014,115],{"class":319},[97,45016,32532],{"class":370},[97,45018,45019,45021,45023],{"class":99,"line":2768},[97,45020,34340],{"class":103},[97,45022,115],{"class":319},[97,45024,3276],{"class":370},[97,45026,45027],{"class":99,"line":2782},[97,45028,2591],{"emptyLinePlaceholder":249},[97,45030,45031],{"class":99,"line":2790},[97,45032,34353],{"class":191},[97,45034,45035],{"class":99,"line":2795},[97,45036,34358],{"class":191},[97,45038,45039],{"class":99,"line":2801},[97,45040,34363],{"class":191},[97,45042,45043,45045],{"class":99,"line":2807},[97,45044,34368],{"class":319},[97,45046,33074],{"class":103},[97,45048,45049],{"class":99,"line":2812},[97,45050,34375],{"class":191},[97,45052,45053,45055,45057,45059],{"class":99,"line":8139},[97,45054,3594],{"class":319},[97,45056,34382],{"class":103},[97,45058,26233],{"class":319},[97,45060,34387],{"class":103},[97,45062,45063,45065,45067],{"class":99,"line":8163},[97,45064,34392],{"class":103},[97,45066,115],{"class":319},[97,45068,34397],{"class":103},[97,45070,45071,45073,45075],{"class":99,"line":8168},[97,45072,34402],{"class":103},[97,45074,115],{"class":319},[97,45076,34407],{"class":103},[97,45078,45079],{"class":99,"line":8174},[97,45080,34412],{"class":191},[97,45082,45083],{"class":99,"line":8201},[97,45084,33065],{"class":103},[97,45086,45087],{"class":99,"line":8206},[97,45088,34421],{"class":191},[97,45090,45091,45093,45095],{"class":99,"line":8212},[97,45092,32850],{"class":103},[97,45094,115],{"class":319},[97,45096,34430],{"class":103},[97,45098,45099],{"class":99,"line":8224},[97,45100,34435],{"class":191},[97,45102,45103,45105,45107,45109,45111,45113,45115],{"class":99,"line":8236},[97,45104,32867],{"class":103},[97,45106,115],{"class":319},[97,45108,32872],{"class":103},[97,45110,32875],{"class":5407},[97,45112,115],{"class":319},[97,45114,537],{"class":370},[97,45116,329],{"class":103},[97,45118,45119],{"class":99,"line":8248},[97,45120,34456],{"class":191},[97,45122,45123],{"class":99,"line":9907},[97,45124,34461],{"class":191},[97,45126,45127],{"class":99,"line":9932},[97,45128,34466],{"class":191},[97,45130,45131,45133,45135,45137,45139],{"class":99,"line":9955},[97,45132,34471],{"class":103},[97,45134,9668],{"class":319},[97,45136,32977],{"class":103},[97,45138,3140],{"class":319},[97,45140,34480],{"class":103},[97,45142,45143],{"class":99,"line":9979},[97,45144,34485],{"class":191},[97,45146,45147,45149,45151,45153,45155],{"class":99,"line":9984},[97,45148,34490],{"class":103},[97,45150,9668],{"class":319},[97,45152,34495],{"class":103},[97,45154,511],{"class":370},[97,45156,329],{"class":103},[97,45158,45159],{"class":99,"line":9989},[97,45160,2591],{"emptyLinePlaceholder":249},[97,45162,45163],{"class":99,"line":9994},[97,45164,34508],{"class":191},[97,45166,45167,45169,45171,45173,45175],{"class":99,"line":10003},[97,45168,34513],{"class":103},[97,45170,115],{"class":319},[97,45172,34518],{"class":103},[97,45174,904],{"class":319},[97,45176,34523],{"class":103},[97,45178,45179],{"class":99,"line":10008},[97,45180,34528],{"class":191},[97,45182,45183,45185,45187,45189],{"class":99,"line":10014},[97,45184,32641],{"class":370},[97,45186,323],{"class":103},[97,45188,34537],{"class":118},[97,45190,34540],{"class":103},[97,45192,45193],{"class":99,"line":10035},[97,45194,2591],{"emptyLinePlaceholder":249},[97,45196,45197],{"class":99,"line":10041},[97,45198,34549],{"class":191},[97,45200,45201,45203,45205,45207,45209],{"class":99,"line":10055},[97,45202,1723],{"class":319},[97,45204,31410],{"class":370},[97,45206,3140],{"class":319},[97,45208,31415],{"class":118},[97,45210,3930],{"class":103},[97,45212,45213],{"class":99,"line":10061},[97,45214,34566],{"class":191},[97,45216,45217,45219,45221],{"class":99,"line":10088},[97,45218,31479],{"class":103},[97,45220,115],{"class":319},[97,45222,44741],{"class":103},[97,45224,45225],{"class":99,"line":10097},[97,45226,34579],{"class":191},[97,45228,45229],{"class":99,"line":10103},[97,45230,34584],{"class":191},[97,45232,45233,45235,45237],{"class":99,"line":10111},[97,45234,34589],{"class":103},[97,45236,34592],{"class":118},[97,45238,30687],{"class":103},[97,45240,45241],{"class":99,"line":10116},[97,45242,34599],{"class":191},[97,45244,45245,45247,45249],{"class":99,"line":16794},[97,45246,34212],{"class":103},[97,45248,115],{"class":319},[97,45250,34608],{"class":103},[97,45252,45253],{"class":99,"line":16800},[97,45254,34613],{"class":191},[97,45256,45257],{"class":99,"line":16823},[97,45258,34618],{"class":103},[97,45260,45261],{"class":99,"line":16829},[97,45262,2591],{"emptyLinePlaceholder":249},[97,45264,45265],{"class":99,"line":16852},[97,45266,34627],{"class":191},[97,45268,45269],{"class":99,"line":16866},[97,45270,34632],{"class":191},[97,45272,45273,45275,45277,45279,45281,45283,45285],{"class":99,"line":16886},[97,45274,31427],{"class":103},[97,45276,115],{"class":319},[97,45278,31434],{"class":118},[97,45280,1896],{"class":319},[97,45282,31439],{"class":103},[97,45284,1893],{"class":319},[97,45286,34309],{"class":118},[97,45288,45289,45291,45293],{"class":99,"line":16892},[97,45290,31479],{"class":103},[97,45292,115],{"class":319},[97,45294,32479],{"class":103},[97,45296,45297],{"class":99,"line":16903},[97,45298,34661],{"class":191},[97,45300,45301],{"class":99,"line":16926},[97,45302,34666],{"class":191},[97,45304,45305,45307,45309,45311,45313,45315,45317,45319,45321,45323,45325,45327,45329,45331,45333,45335,45337,45339,45341,45343,45345,45347,45349],{"class":99,"line":16948},[97,45306,34671],{"class":103},[97,45308,115],{"class":319},[97,45310,1210],{"class":103},[97,45312,34678],{"class":118},[97,45314,698],{"class":103},[97,45316,34683],{"class":118},[97,45318,698],{"class":103},[97,45320,34688],{"class":118},[97,45322,698],{"class":103},[97,45324,34693],{"class":118},[97,45326,698],{"class":103},[97,45328,34698],{"class":118},[97,45330,698],{"class":103},[97,45332,34703],{"class":118},[97,45334,698],{"class":103},[97,45336,34708],{"class":118},[97,45338,698],{"class":103},[97,45340,34713],{"class":118},[97,45342,698],{"class":103},[97,45344,34718],{"class":118},[97,45346,698],{"class":103},[97,45348,34723],{"class":118},[97,45350,33436],{"class":103},[97,45352,45353,45355],{"class":99,"line":16953},[97,45354,34368],{"class":319},[97,45356,33074],{"class":103},[97,45358,45359],{"class":99,"line":16959},[97,45360,34736],{"class":191},[97,45362,45363,45365,45367,45369],{"class":99,"line":16973},[97,45364,3594],{"class":319},[97,45366,34743],{"class":103},[97,45368,26233],{"class":319},[97,45370,34387],{"class":103},[97,45372,45373,45375,45377],{"class":99,"line":16986},[97,45374,32800],{"class":103},[97,45376,115],{"class":319},[97,45378,32805],{"class":103},[97,45380,45381,45383,45385],{"class":99,"line":16991},[97,45382,32815],{"class":103},[97,45384,115],{"class":319},[97,45386,32820],{"class":103},[97,45388,45389],{"class":99,"line":17005},[97,45390,2591],{"emptyLinePlaceholder":249},[97,45392,45393],{"class":99,"line":17010},[97,45394,34772],{"class":191},[97,45396,45397],{"class":99,"line":17016},[97,45398,33065],{"class":103},[97,45400,45401],{"class":99,"line":17021},[97,45402,34781],{"class":191},[97,45404,45405,45407,45409],{"class":99,"line":17035},[97,45406,32850],{"class":103},[97,45408,115],{"class":319},[97,45410,32855],{"class":103},[97,45412,45413],{"class":99,"line":17040},[97,45414,34794],{"class":191},[97,45416,45417,45419,45421,45423,45425,45427,45429],{"class":99,"line":17045},[97,45418,32867],{"class":103},[97,45420,115],{"class":319},[97,45422,32872],{"class":103},[97,45424,32875],{"class":5407},[97,45426,115],{"class":319},[97,45428,537],{"class":370},[97,45430,329],{"class":103},[97,45432,45433],{"class":99,"line":17059},[97,45434,34815],{"class":191},[97,45436,45437,45439,45441],{"class":99,"line":17071},[97,45438,34820],{"class":103},[97,45440,115],{"class":319},[97,45442,34825],{"class":103},[97,45444,45445,45447,45449],{"class":99,"line":17076},[97,45446,34830],{"class":103},[97,45448,115],{"class":319},[97,45450,34835],{"class":103},[97,45452,45453,45455,45457,45459,45461,45463,45465,45467],{"class":99,"line":17089},[97,45454,34840],{"class":370},[97,45456,323],{"class":103},[97,45458,34845],{"class":118},[97,45460,34848],{"class":103},[97,45462,34851],{"class":118},[97,45464,698],{"class":103},[97,45466,34856],{"class":118},[97,45468,34859],{"class":103},[48,45470,45472],{"id":45471},"_24训练自己的数据集","2.4.训练自己的数据集",[24,45474,45475],{},"猫狗分类任务",[24,45477,45478],{},"划分数据集和验证集",[87,45480,45482],{"className":30568,"code":45481,"language":30570,"meta":92,"style":92},"# 创建脚本，用于划分数据集和验证集\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",[94,45483,45484,45489,45496,45501,45512,45519,45523,45533,45547,45556,45560,45565,45575,45595,45599,45604,45614,45625,45638,45642,45647,45656,45666,45677,45681,45686,45696,45700,45705,45710,45715,45720,45725,45729,45739,45766,45779,45791,45818,45823,45828,45842,45847,45859,45874,45889,45897,45901,45906,45912,45924,45937,45942,45947,45952,46002,46008,46012],{"__ignoreMap":92},[97,45485,45486],{"class":99,"line":100},[97,45487,45488],{"class":191},"# 创建脚本，用于划分数据集和验证集\n",[97,45490,45491,45493],{"class":99,"line":195},[97,45492,30582],{"class":319},[97,45494,45495],{"class":103}," os\n",[97,45497,45498],{"class":99,"line":241},[97,45499,45500],{"class":191},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[97,45502,45503,45505,45508,45510],{"class":99,"line":1387},[97,45504,30927],{"class":319},[97,45506,45507],{"class":103}," shutil ",[97,45509,30582],{"class":319},[97,45511,32012],{"class":103},[97,45513,45514,45516],{"class":99,"line":1393},[97,45515,30582],{"class":319},[97,45517,45518],{"class":103}," random\n",[97,45520,45521],{"class":99,"line":1407},[97,45522,2591],{"emptyLinePlaceholder":249},[97,45524,45525,45527,45530],{"class":99,"line":1413},[97,45526,32137],{"class":319},[97,45528,45529],{"class":111}," mkfile",[97,45531,45532],{"class":103},"(file):\n",[97,45534,45535,45537,45539,45542,45545],{"class":99,"line":1504},[97,45536,3292],{"class":319},[97,45538,39120],{"class":319},[97,45540,45541],{"class":103}," os.path.exists(",[97,45543,45544],{"class":5407},"file",[97,45546,30976],{"class":103},[97,45548,45549,45552,45554],{"class":99,"line":1510},[97,45550,45551],{"class":103},"        os.makedirs(",[97,45553,45544],{"class":5407},[97,45555,329],{"class":103},[97,45557,45558],{"class":99,"line":1522},[97,45559,2591],{"emptyLinePlaceholder":249},[97,45561,45562],{"class":99,"line":1804},[97,45563,45564],{"class":191},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[97,45566,45567,45570,45572],{"class":99,"line":1809},[97,45568,45569],{"class":103},"file_path",[97,45571,115],{"class":319},[97,45573,45574],{"class":118},"'data_cat_dog'\n",[97,45576,45577,45580,45582,45585,45587,45590,45592],{"class":99,"line":1815},[97,45578,45579],{"class":103},"flower_class",[97,45581,115],{"class":319},[97,45583,45584],{"class":103},"[cla ",[97,45586,3216],{"class":319},[97,45588,45589],{"class":103}," cla ",[97,45591,26233],{"class":319},[97,45593,45594],{"class":103}," os.listdir(file_path)]\n",[97,45596,45597],{"class":99,"line":1820},[97,45598,2591],{"emptyLinePlaceholder":249},[97,45600,45601],{"class":99,"line":1834},[97,45602,45603],{"class":191},"# 创建训练集train文件夹\n",[97,45605,45606,45609,45612],{"class":99,"line":1839},[97,45607,45608],{"class":103},"mkfile(",[97,45610,45611],{"class":118},"'data\u002Ftrain'",[97,45613,329],{"class":103},[97,45615,45616,45618,45620,45622],{"class":99,"line":1845},[97,45617,3216],{"class":319},[97,45619,45589],{"class":103},[97,45621,26233],{"class":319},[97,45623,45624],{"class":103}," flower_class:\n",[97,45626,45627,45630,45633,45635],{"class":99,"line":1866},[97,45628,45629],{"class":103},"    mkfile(",[97,45631,45632],{"class":118},"'data\u002Ftrain\u002F'",[97,45634,801],{"class":319},[97,45636,45637],{"class":103},"cla)\n",[97,45639,45640],{"class":99,"line":1871},[97,45641,2591],{"emptyLinePlaceholder":249},[97,45643,45644],{"class":99,"line":1885},[97,45645,45646],{"class":191},"# 创建验证集val文件夹\n",[97,45648,45649,45651,45654],{"class":99,"line":1890},[97,45650,45608],{"class":103},[97,45652,45653],{"class":118},"'data\u002Ftest'",[97,45655,329],{"class":103},[97,45657,45658,45660,45662,45664],{"class":99,"line":1919},[97,45659,3216],{"class":319},[97,45661,45589],{"class":103},[97,45663,26233],{"class":319},[97,45665,45624],{"class":103},[97,45667,45668,45670,45673,45675],{"class":99,"line":1924},[97,45669,45629],{"class":103},[97,45671,45672],{"class":118},"'data\u002Ftest\u002F'",[97,45674,801],{"class":319},[97,45676,45637],{"class":103},[97,45678,45679],{"class":99,"line":1941},[97,45680,2591],{"emptyLinePlaceholder":249},[97,45682,45683],{"class":99,"line":1946},[97,45684,45685],{"class":191},"# 划分比例，训练集：测试集=9：1\n",[97,45687,45688,45691,45693],{"class":99,"line":1951},[97,45689,45690],{"class":103},"split_rate",[97,45692,115],{"class":319},[97,45694,45695],{"class":370},"0.1\n",[97,45697,45698],{"class":99,"line":1956},[97,45699,2591],{"emptyLinePlaceholder":249},[97,45701,45702],{"class":99,"line":1970},[97,45703,45704],{"class":191},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[97,45706,45707],{"class":99,"line":1975},[97,45708,45709],{"class":191},"# cla_path：当前类别的原始图片路径\n",[97,45711,45712],{"class":99,"line":2768},[97,45713,45714],{"class":191},"# images：当前类别下所有图片的文件名列表\n",[97,45716,45717],{"class":99,"line":2782},[97,45718,45719],{"class":191},"# num：该类别图片总数\n",[97,45721,45722],{"class":99,"line":2790},[97,45723,45724],{"class":191},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[97,45726,45727],{"class":99,"line":2795},[97,45728,2591],{"emptyLinePlaceholder":249},[97,45730,45731,45733,45735,45737],{"class":99,"line":2801},[97,45732,3216],{"class":319},[97,45734,45589],{"class":103},[97,45736,26233],{"class":319},[97,45738,45624],{"class":103},[97,45740,45741,45744,45746,45749,45751,45754,45757,45759,45761,45763],{"class":99,"line":2807},[97,45742,45743],{"class":103},"    cla_path ",[97,45745,115],{"class":319},[97,45747,45748],{"class":103}," file_path ",[97,45750,801],{"class":319},[97,45752,45753],{"class":118}," '\u002F'",[97,45755,45756],{"class":319}," +",[97,45758,45589],{"class":103},[97,45760,801],{"class":319},[97,45762,45753],{"class":118},[97,45764,45765],{"class":191},"  # 某一类别的子目录\n",[97,45767,45768,45771,45773,45776],{"class":99,"line":2812},[97,45769,45770],{"class":103},"    images ",[97,45772,115],{"class":319},[97,45774,45775],{"class":103}," os.listdir(cla_path)  ",[97,45777,45778],{"class":191},"# iamges 列表存储了该目录下所有图像的名称\n",[97,45780,45781,45784,45786,45788],{"class":99,"line":8139},[97,45782,45783],{"class":103},"    num ",[97,45785,115],{"class":319},[97,45787,7522],{"class":370},[97,45789,45790],{"class":103},"(images)\n",[97,45792,45793,45796,45798,45801,45803,45805,45807,45810,45812,45815],{"class":99,"line":8163},[97,45794,45795],{"class":103},"    eval_index ",[97,45797,115],{"class":319},[97,45799,45800],{"class":103}," random.sample(images, ",[97,45802,813],{"class":5407},[97,45804,115],{"class":319},[97,45806,326],{"class":370},[97,45808,45809],{"class":103},"(num ",[97,45811,775],{"class":319},[97,45813,45814],{"class":103}," split_rate))  ",[97,45816,45817],{"class":191},"# 从images列表中随机抽取 k 个图像名称\n",[97,45819,45820],{"class":99,"line":8168},[97,45821,45822],{"class":191},"    # 遍历该类别下的所有图片\n",[97,45824,45825],{"class":99,"line":8174},[97,45826,45827],{"class":191},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[97,45829,45830,45832,45835,45837,45839],{"class":99,"line":8201},[97,45831,3392],{"class":319},[97,45833,45834],{"class":103}," index, image ",[97,45836,26233],{"class":319},[97,45838,31796],{"class":370},[97,45840,45841],{"class":103},"(images):\n",[97,45843,45844],{"class":99,"line":8206},[97,45845,45846],{"class":191},"        # eval_index 中保存验证集val的图像名称\n",[97,45848,45849,45851,45854,45856],{"class":99,"line":8212},[97,45850,2688],{"class":319},[97,45852,45853],{"class":103}," image ",[97,45855,26233],{"class":319},[97,45857,45858],{"class":103}," eval_index:\n",[97,45860,45861,45864,45866,45869,45871],{"class":99,"line":8224},[97,45862,45863],{"class":103},"            image_path ",[97,45865,115],{"class":319},[97,45867,45868],{"class":103}," cla_path ",[97,45870,801],{"class":319},[97,45872,45873],{"class":103}," image\n",[97,45875,45876,45879,45881,45884,45886],{"class":99,"line":8236},[97,45877,45878],{"class":103},"            new_path ",[97,45880,115],{"class":319},[97,45882,45883],{"class":118}," 'data\u002Ftest\u002F'",[97,45885,45756],{"class":319},[97,45887,45888],{"class":103}," cla\n",[97,45890,45891,45894],{"class":99,"line":8248},[97,45892,45893],{"class":103},"            copy(image_path, new_path)  ",[97,45895,45896],{"class":191},"# 将选中的图像复制到新路径\n",[97,45898,45899],{"class":99,"line":9907},[97,45900,2591],{"emptyLinePlaceholder":249},[97,45902,45903],{"class":99,"line":9932},[97,45904,45905],{"class":191},"        # 其余的图像保存在训练集train中\n",[97,45907,45908,45910],{"class":99,"line":9955},[97,45909,2725],{"class":319},[97,45911,3930],{"class":103},[97,45913,45914,45916,45918,45920,45922],{"class":99,"line":9979},[97,45915,45863],{"class":103},[97,45917,115],{"class":319},[97,45919,45868],{"class":103},[97,45921,801],{"class":319},[97,45923,45873],{"class":103},[97,45925,45926,45928,45930,45933,45935],{"class":99,"line":9984},[97,45927,45878],{"class":103},[97,45929,115],{"class":319},[97,45931,45932],{"class":118}," 'data\u002Ftrain\u002F'",[97,45934,45756],{"class":319},[97,45936,45888],{"class":103},[97,45938,45939],{"class":99,"line":9989},[97,45940,45941],{"class":103},"            copy(image_path, new_path)\n",[97,45943,45944],{"class":99,"line":9994},[97,45945,45946],{"class":191},"            # 打印进度条信息\n",[97,45948,45949],{"class":99,"line":10003},[97,45950,45951],{"class":191},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[97,45953,45954,45956,45958,45960,45963,45965,45967,45970,45972,45974,45976,45979,45982,45984,45986,45989,45992,45994,45996,45999],{"class":99,"line":10008},[97,45955,32641],{"class":370},[97,45957,323],{"class":103},[97,45959,571],{"class":118},[97,45961,45962],{"class":370},"\\r",[97,45964,1210],{"class":118},[97,45966,32649],{"class":370},[97,45968,45969],{"class":118},"] processing [",[97,45971,32649],{"class":370},[97,45973,904],{"class":118},[97,45975,32649],{"class":370},[97,45977,45978],{"class":118},"]\"",[97,45980,45981],{"class":103},".format(cla, index ",[97,45983,801],{"class":319},[97,45985,25308],{"class":370},[97,45987,45988],{"class":103},", num), ",[97,45990,45991],{"class":5407},"end",[97,45993,115],{"class":319},[97,45995,7843],{"class":118},[97,45997,45998],{"class":103},")  ",[97,46000,46001],{"class":191},"# processing bar\n",[97,46003,46004,46006],{"class":99,"line":10014},[97,46005,31489],{"class":370},[97,46007,2167],{"class":103},[97,46009,46010],{"class":99,"line":10035},[97,46011,2591],{"emptyLinePlaceholder":249},[97,46013,46014,46016,46018,46021],{"class":99,"line":10041},[97,46015,30605],{"class":370},[97,46017,323],{"class":103},[97,46019,46020],{"class":118},"\"processing done!\"",[97,46022,329],{"class":103},[24,46024,46025],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[160,46027,46029],{"id":46028},"_242模型代码","2.4.2.模型代码",[24,46031,46032],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[87,46034,46036],{"className":30568,"code":46035,"language":30570,"meta":92,"style":92},"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",[94,46037,46038,46044,46054,46064,46068,46084,46092,46106,46116,46120,46150,46154,46188,46234,46238,46272,46318,46322,46326,46360,46390,46394,46402,46416,46438,46460,46478,46482,46496,46500,46504,46520,46524,46532,46546,46556,46600,46604,46632,46636,46646,46674,46678,46714,46718,46746,46750,46760,46792,46824,46852,46856,46866,46898,46930,46962,46994,47026,47054,47058,47068,47100,47132,47144,47148,47160,47164,47168,47180,47188,47208,47212,47216,47220,47224,47228,47232,47246,47254,47262,47274,47288,47296,47300,47308,47318,47328,47338,47348,47358,47364,47368,47372,47384,47404,47412],{"__ignoreMap":92},[97,46039,46040,46042],{"class":99,"line":100},[97,46041,30582],{"class":319},[97,46043,30585],{"class":103},[97,46045,46046,46048,46050,46052],{"class":99,"line":195},[97,46047,30927],{"class":319},[97,46049,30930],{"class":103},[97,46051,30582],{"class":319},[97,46053,30935],{"class":103},[97,46055,46056,46058,46060,46062],{"class":99,"line":241},[97,46057,30927],{"class":319},[97,46059,30947],{"class":103},[97,46061,30582],{"class":319},[97,46063,30952],{"class":103},[97,46065,46066],{"class":99,"line":1387},[97,46067,2591],{"emptyLinePlaceholder":249},[97,46069,46070,46072,46074,46076,46078,46080,46082],{"class":99,"line":1393},[97,46071,14885],{"class":319},[97,46073,41683],{"class":111},[97,46075,323],{"class":103},[97,46077,30968],{"class":111},[97,46079,878],{"class":103},[97,46081,30973],{"class":111},[97,46083,30976],{"class":103},[97,46085,46086,46088,46090],{"class":99,"line":1407},[97,46087,30991],{"class":319},[97,46089,30994],{"class":370},[97,46091,41702],{"class":103},[97,46093,46094,46096,46098,46100,46102,46104],{"class":99,"line":1413},[97,46095,31007],{"class":370},[97,46097,41709],{"class":103},[97,46099,31013],{"class":370},[97,46101,31016],{"class":103},[97,46103,31019],{"class":370},[97,46105,2167],{"class":103},[97,46107,46108,46110,46112,46114],{"class":99,"line":1504},[97,46109,31035],{"class":370},[97,46111,34961],{"class":103},[97,46113,115],{"class":319},[97,46115,34966],{"class":103},[97,46117,46118],{"class":99,"line":1510},[97,46119,41732],{"class":191},[97,46121,46122,46124,46126,46128,46130,46132,46134,46136,46138,46140,46142,46144,46146,46148],{"class":99,"line":1522},[97,46123,31035],{"class":370},[97,46125,41739],{"class":103},[97,46127,115],{"class":319},[97,46129,31043],{"class":103},[97,46131,31046],{"class":5407},[97,46133,115],{"class":319},[97,46135,41750],{"class":103},[97,46137,31055],{"class":5407},[97,46139,115],{"class":319},[97,46141,41757],{"class":103},[97,46143,31064],{"class":5407},[97,46145,115],{"class":319},[97,46147,537],{"class":370},[97,46149,329],{"class":103},[97,46151,46152],{"class":99,"line":1804},[97,46153,41770],{"class":191},[97,46155,46156,46158,46160,46162,46164,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184,46186],{"class":99,"line":1809},[97,46157,31035],{"class":370},[97,46159,41777],{"class":103},[97,46161,115],{"class":319},[97,46163,31043],{"class":103},[97,46165,31046],{"class":5407},[97,46167,115],{"class":319},[97,46169,41750],{"class":103},[97,46171,31055],{"class":5407},[97,46173,115],{"class":319},[97,46175,41794],{"class":103},[97,46177,511],{"class":370},[97,46179,41799],{"class":103},[97,46181,31064],{"class":5407},[97,46183,115],{"class":319},[97,46185,537],{"class":370},[97,46187,329],{"class":103},[97,46189,46190,46192,46194,46196,46198,46200,46202,46204,46206,46208,46210,46212,46214,46216,46218,46220,46222,46224,46226,46228,46230,46232],{"class":99,"line":1815},[97,46191,31035],{"class":370},[97,46193,41814],{"class":103},[97,46195,115],{"class":319},[97,46197,31043],{"class":103},[97,46199,31046],{"class":5407},[97,46201,115],{"class":319},[97,46203,41794],{"class":103},[97,46205,511],{"class":370},[97,46207,41799],{"class":103},[97,46209,31055],{"class":5407},[97,46211,115],{"class":319},[97,46213,41794],{"class":103},[97,46215,537],{"class":370},[97,46217,41799],{"class":103},[97,46219,31064],{"class":5407},[97,46221,115],{"class":319},[97,46223,392],{"class":370},[97,46225,698],{"class":103},[97,46227,31073],{"class":5407},[97,46229,115],{"class":319},[97,46231,537],{"class":370},[97,46233,329],{"class":103},[97,46235,46236],{"class":99,"line":1820},[97,46237,41859],{"class":191},[97,46239,46240,46242,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262,46264,46266,46268,46270],{"class":99,"line":1834},[97,46241,31035],{"class":370},[97,46243,41866],{"class":103},[97,46245,115],{"class":319},[97,46247,31043],{"class":103},[97,46249,31046],{"class":5407},[97,46251,115],{"class":319},[97,46253,41750],{"class":103},[97,46255,31055],{"class":5407},[97,46257,115],{"class":319},[97,46259,41883],{"class":103},[97,46261,511],{"class":370},[97,46263,41799],{"class":103},[97,46265,31064],{"class":5407},[97,46267,115],{"class":319},[97,46269,537],{"class":370},[97,46271,329],{"class":103},[97,46273,46274,46276,46278,46280,46282,46284,46286,46288,46290,46292,46294,46296,46298,46300,46302,46304,46306,46308,46310,46312,46314,46316],{"class":99,"line":1839},[97,46275,31035],{"class":370},[97,46277,41902],{"class":103},[97,46279,115],{"class":319},[97,46281,31043],{"class":103},[97,46283,31046],{"class":5407},[97,46285,115],{"class":319},[97,46287,41883],{"class":103},[97,46289,511],{"class":370},[97,46291,41799],{"class":103},[97,46293,31055],{"class":5407},[97,46295,115],{"class":319},[97,46297,41883],{"class":103},[97,46299,537],{"class":370},[97,46301,41799],{"class":103},[97,46303,31064],{"class":5407},[97,46305,115],{"class":319},[97,46307,639],{"class":370},[97,46309,698],{"class":103},[97,46311,31073],{"class":5407},[97,46313,115],{"class":319},[97,46315,398],{"class":370},[97,46317,329],{"class":103},[97,46319,46320],{"class":99,"line":1845},[97,46321,41947],{"class":191},[97,46323,46324],{"class":99,"line":1866},[97,46325,41952],{"class":191},[97,46327,46328,46330,46332,46334,46336,46338,46340,46342,46344,46346,46348,46350,46352,46354,46356,46358],{"class":99,"line":1871},[97,46329,31035],{"class":370},[97,46331,41959],{"class":103},[97,46333,115],{"class":319},[97,46335,35019],{"class":103},[97,46337,31064],{"class":5407},[97,46339,115],{"class":319},[97,46341,392],{"class":370},[97,46343,698],{"class":103},[97,46345,31119],{"class":5407},[97,46347,115],{"class":319},[97,46349,537],{"class":370},[97,46351,698],{"class":103},[97,46353,31073],{"class":5407},[97,46355,115],{"class":319},[97,46357,537],{"class":370},[97,46359,329],{"class":103},[97,46361,46362,46364,46366,46368,46370,46372,46374,46376,46378,46380,46382,46384,46386,46388],{"class":99,"line":1885},[97,46363,31035],{"class":370},[97,46365,41994],{"class":103},[97,46367,115],{"class":319},[97,46369,31043],{"class":103},[97,46371,31046],{"class":5407},[97,46373,115],{"class":319},[97,46375,41750],{"class":103},[97,46377,31055],{"class":5407},[97,46379,115],{"class":319},[97,46381,42011],{"class":103},[97,46383,31064],{"class":5407},[97,46385,115],{"class":319},[97,46387,537],{"class":370},[97,46389,329],{"class":103},[97,46391,46392],{"class":99,"line":1890},[97,46393,2591],{"emptyLinePlaceholder":249},[97,46395,46396,46398,46400],{"class":99,"line":1919},[97,46397,30991],{"class":319},[97,46399,31283],{"class":111},[97,46401,31286],{"class":103},[97,46403,46404,46406,46408,46410,46412,46414],{"class":99,"line":1924},[97,46405,42036],{"class":103},[97,46407,115],{"class":319},[97,46409,31013],{"class":370},[97,46411,35374],{"class":103},[97,46413,31013],{"class":370},[97,46415,42047],{"class":103},[97,46417,46418,46420,46422,46424,46426,46428,46430,46432,46434,46436],{"class":99,"line":1941},[97,46419,7276],{"class":103},[97,46421,115],{"class":319},[97,46423,31013],{"class":370},[97,46425,35374],{"class":103},[97,46427,31013],{"class":370},[97,46429,42062],{"class":103},[97,46431,31013],{"class":370},[97,46433,35374],{"class":103},[97,46435,31013],{"class":370},[97,46437,42071],{"class":103},[97,46439,46440,46442,46444,46446,46448,46450,46452,46454,46456,46458],{"class":99,"line":1946},[97,46441,42076],{"class":103},[97,46443,115],{"class":319},[97,46445,31013],{"class":370},[97,46447,35374],{"class":103},[97,46449,31013],{"class":370},[97,46451,42087],{"class":103},[97,46453,31013],{"class":370},[97,46455,35374],{"class":103},[97,46457,31013],{"class":370},[97,46459,42096],{"class":103},[97,46461,46462,46464,46466,46468,46470,46472,46474,46476],{"class":99,"line":1951},[97,46463,42101],{"class":103},[97,46465,115],{"class":319},[97,46467,31013],{"class":370},[97,46469,35374],{"class":103},[97,46471,31013],{"class":370},[97,46473,42112],{"class":103},[97,46475,31013],{"class":370},[97,46477,42117],{"class":103},[97,46479,46480],{"class":99,"line":1956},[97,46481,42122],{"class":191},[97,46483,46484,46486,46488,46490,46492,46494],{"class":99,"line":1970},[97,46485,14943],{"class":319},[97,46487,42129],{"class":103},[97,46489,32875],{"class":5407},[97,46491,115],{"class":319},[97,46493,537],{"class":370},[97,46495,329],{"class":103},[97,46497,46498],{"class":99,"line":1975},[97,46499,2591],{"emptyLinePlaceholder":249},[97,46501,46502],{"class":99,"line":2768},[97,46503,42150],{"class":191},[97,46505,46506,46508,46510,46512,46514,46516,46518],{"class":99,"line":2782},[97,46507,14885],{"class":319},[97,46509,42157],{"class":111},[97,46511,323],{"class":103},[97,46513,30968],{"class":111},[97,46515,878],{"class":103},[97,46517,30973],{"class":111},[97,46519,30976],{"class":103},[97,46521,46522],{"class":99,"line":2790},[97,46523,42172],{"class":191},[97,46525,46526,46528,46530],{"class":99,"line":2795},[97,46527,30991],{"class":319},[97,46529,30994],{"class":370},[97,46531,42181],{"class":103},[97,46533,46534,46536,46538,46540,46542,46544],{"class":99,"line":2801},[97,46535,31007],{"class":370},[97,46537,42188],{"class":103},[97,46539,31013],{"class":370},[97,46541,31016],{"class":103},[97,46543,31019],{"class":370},[97,46545,2167],{"class":103},[97,46547,46548,46550,46552,46554],{"class":99,"line":2807},[97,46549,31035],{"class":370},[97,46551,42203],{"class":103},[97,46553,115],{"class":319},[97,46555,38199],{"class":103},[97,46557,46558,46560,46562,46564,46566,46568,46570,46572,46574,46576,46578,46580,46582,46584,46586,46588,46590,46592,46594,46596,46598],{"class":99,"line":2812},[97,46559,38204],{"class":103},[97,46561,31046],{"class":5407},[97,46563,115],{"class":319},[97,46565,392],{"class":370},[97,46567,698],{"class":103},[97,46569,31055],{"class":5407},[97,46571,115],{"class":319},[97,46573,523],{"class":370},[97,46575,698],{"class":103},[97,46577,31064],{"class":5407},[97,46579,115],{"class":319},[97,46581,689],{"class":370},[97,46583,698],{"class":103},[97,46585,31119],{"class":5407},[97,46587,115],{"class":319},[97,46589,398],{"class":370},[97,46591,698],{"class":103},[97,46593,31073],{"class":5407},[97,46595,115],{"class":319},[97,46597,392],{"class":370},[97,46599,38237],{"class":103},[97,46601,46602],{"class":99,"line":8139},[97,46603,38242],{"class":103},[97,46605,46606,46608,46610,46612,46614,46616,46618,46620,46622,46624,46626,46628,46630],{"class":99,"line":8163},[97,46607,38287],{"class":103},[97,46609,31064],{"class":5407},[97,46611,115],{"class":319},[97,46613,392],{"class":370},[97,46615,698],{"class":103},[97,46617,31119],{"class":5407},[97,46619,115],{"class":319},[97,46621,398],{"class":370},[97,46623,698],{"class":103},[97,46625,31073],{"class":5407},[97,46627,115],{"class":319},[97,46629,537],{"class":370},[97,46631,329],{"class":103},[97,46633,46634],{"class":99,"line":8168},[97,46635,38316],{"class":103},[97,46637,46638,46640,46642,46644],{"class":99,"line":8174},[97,46639,31035],{"class":370},[97,46641,42294],{"class":103},[97,46643,115],{"class":319},[97,46645,38199],{"class":103},[97,46647,46648,46650,46652,46654,46656,46658,46660,46662,46664,46666,46668,46670,46672],{"class":99,"line":8201},[97,46649,38204],{"class":103},[97,46651,31046],{"class":5407},[97,46653,115],{"class":319},[97,46655,523],{"class":370},[97,46657,698],{"class":103},[97,46659,31055],{"class":5407},[97,46661,115],{"class":319},[97,46663,523],{"class":370},[97,46665,698],{"class":103},[97,46667,31064],{"class":5407},[97,46669,115],{"class":319},[97,46671,537],{"class":370},[97,46673,38237],{"class":103},[97,46675,46676],{"class":99,"line":8206},[97,46677,38242],{"class":103},[97,46679,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712],{"class":99,"line":8212},[97,46681,38204],{"class":103},[97,46683,31046],{"class":5407},[97,46685,115],{"class":319},[97,46687,523],{"class":370},[97,46689,698],{"class":103},[97,46691,31055],{"class":5407},[97,46693,115],{"class":319},[97,46695,42349],{"class":370},[97,46697,698],{"class":103},[97,46699,31064],{"class":5407},[97,46701,115],{"class":319},[97,46703,392],{"class":370},[97,46705,698],{"class":103},[97,46707,31073],{"class":5407},[97,46709,115],{"class":319},[97,46711,537],{"class":370},[97,46713,38237],{"class":103},[97,46715,46716],{"class":99,"line":8224},[97,46717,38242],{"class":103},[97,46719,46720,46722,46724,46726,46728,46730,46732,46734,46736,46738,46740,46742,46744],{"class":99,"line":8236},[97,46721,38287],{"class":103},[97,46723,31064],{"class":5407},[97,46725,115],{"class":319},[97,46727,392],{"class":370},[97,46729,698],{"class":103},[97,46731,31119],{"class":5407},[97,46733,115],{"class":319},[97,46735,398],{"class":370},[97,46737,698],{"class":103},[97,46739,31073],{"class":5407},[97,46741,115],{"class":319},[97,46743,537],{"class":370},[97,46745,329],{"class":103},[97,46747,46748],{"class":99,"line":8248},[97,46749,38316],{"class":103},[97,46751,46752,46754,46756,46758],{"class":99,"line":9907},[97,46753,31035],{"class":370},[97,46755,42410],{"class":103},[97,46757,115],{"class":319},[97,46759,38199],{"class":103},[97,46761,46762,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790],{"class":99,"line":9932},[97,46763,42419],{"class":103},[97,46765,42349],{"class":370},[97,46767,698],{"class":103},[97,46769,523],{"class":370},[97,46771,42428],{"class":103},[97,46773,529],{"class":370},[97,46775,698],{"class":103},[97,46777,32260],{"class":370},[97,46779,42437],{"class":103},[97,46781,921],{"class":370},[97,46783,698],{"class":103},[97,46785,517],{"class":370},[97,46787,42446],{"class":103},[97,46789,517],{"class":370},[97,46791,38237],{"class":103},[97,46793,46794,46796,46798,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822],{"class":99,"line":9955},[97,46795,42419],{"class":103},[97,46797,35060],{"class":370},[97,46799,698],{"class":103},[97,46801,32260],{"class":370},[97,46803,42428],{"class":103},[97,46805,32260],{"class":370},[97,46807,698],{"class":103},[97,46809,42349],{"class":370},[97,46811,42437],{"class":103},[97,46813,517],{"class":370},[97,46815,698],{"class":103},[97,46817,529],{"class":370},[97,46819,42446],{"class":103},[97,46821,523],{"class":370},[97,46823,38237],{"class":103},[97,46825,46826,46828,46830,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850],{"class":99,"line":9979},[97,46827,38287],{"class":103},[97,46829,31064],{"class":5407},[97,46831,115],{"class":319},[97,46833,392],{"class":370},[97,46835,698],{"class":103},[97,46837,31119],{"class":5407},[97,46839,115],{"class":319},[97,46841,398],{"class":370},[97,46843,698],{"class":103},[97,46845,31073],{"class":5407},[97,46847,115],{"class":319},[97,46849,537],{"class":370},[97,46851,329],{"class":103},[97,46853,46854],{"class":99,"line":9984},[97,46855,38316],{"class":103},[97,46857,46858,46860,46862,46864],{"class":99,"line":9989},[97,46859,31035],{"class":370},[97,46861,42521],{"class":103},[97,46863,115],{"class":319},[97,46865,38199],{"class":103},[97,46867,46868,46870,46872,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896],{"class":99,"line":9994},[97,46869,42419],{"class":103},[97,46871,42532],{"class":370},[97,46873,698],{"class":103},[97,46875,42349],{"class":370},[97,46877,42428],{"class":103},[97,46879,529],{"class":370},[97,46881,698],{"class":103},[97,46883,42545],{"class":370},[97,46885,42437],{"class":103},[97,46887,921],{"class":370},[97,46889,698],{"class":103},[97,46891,927],{"class":370},[97,46893,42446],{"class":103},[97,46895,523],{"class":370},[97,46897,38237],{"class":103},[97,46899,46900,46902,46904,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928],{"class":99,"line":10003},[97,46901,42419],{"class":103},[97,46903,38647],{"class":370},[97,46905,698],{"class":103},[97,46907,21238],{"class":370},[97,46909,42428],{"class":103},[97,46911,938],{"class":370},[97,46913,698],{"class":103},[97,46915,31691],{"class":370},[97,46917,42437],{"class":103},[97,46919,1120],{"class":370},[97,46921,698],{"class":103},[97,46923,523],{"class":370},[97,46925,42446],{"class":103},[97,46927,523],{"class":370},[97,46929,38237],{"class":103},[97,46931,46932,46934,46936,46938,46940,46942,46944,46946,46948,46950,46952,46954,46956,46958,46960],{"class":99,"line":10008},[97,46933,42419],{"class":103},[97,46935,38647],{"class":370},[97,46937,698],{"class":103},[97,46939,32260],{"class":370},[97,46941,42428],{"class":103},[97,46943,32260],{"class":370},[97,46945,698],{"class":103},[97,46947,35060],{"class":370},[97,46949,42437],{"class":103},[97,46951,1120],{"class":370},[97,46953,698],{"class":103},[97,46955,523],{"class":370},[97,46957,42446],{"class":103},[97,46959,523],{"class":370},[97,46961,38237],{"class":103},[97,46963,46964,46966,46968,46970,46972,46974,46976,46978,46980,46982,46984,46986,46988,46990,46992],{"class":99,"line":10014},[97,46965,42419],{"class":103},[97,46967,38647],{"class":370},[97,46969,698],{"class":103},[97,46971,938],{"class":370},[97,46973,42428],{"class":103},[97,46975,32260],{"class":370},[97,46977,698],{"class":103},[97,46979,42642],{"class":370},[97,46981,42437],{"class":103},[97,46983,517],{"class":370},[97,46985,698],{"class":103},[97,46987,523],{"class":370},[97,46989,42446],{"class":103},[97,46991,523],{"class":370},[97,46993,38237],{"class":103},[97,46995,46996,46998,47000,47002,47004,47006,47008,47010,47012,47014,47016,47018,47020,47022,47024],{"class":99,"line":10035},[97,46997,42419],{"class":103},[97,46999,42663],{"class":370},[97,47001,698],{"class":103},[97,47003,35060],{"class":370},[97,47005,42428],{"class":103},[97,47007,21238],{"class":370},[97,47009,698],{"class":103},[97,47011,42676],{"class":370},[97,47013,42437],{"class":103},[97,47015,517],{"class":370},[97,47017,698],{"class":103},[97,47019,32260],{"class":370},[97,47021,42446],{"class":103},[97,47023,32260],{"class":370},[97,47025,38237],{"class":103},[97,47027,47028,47030,47032,47034,47036,47038,47040,47042,47044,47046,47048,47050,47052],{"class":99,"line":10041},[97,47029,38287],{"class":103},[97,47031,31064],{"class":5407},[97,47033,115],{"class":319},[97,47035,392],{"class":370},[97,47037,698],{"class":103},[97,47039,31119],{"class":5407},[97,47041,115],{"class":319},[97,47043,398],{"class":370},[97,47045,698],{"class":103},[97,47047,31073],{"class":5407},[97,47049,115],{"class":319},[97,47051,537],{"class":370},[97,47053,329],{"class":103},[97,47055,47056],{"class":99,"line":10055},[97,47057,38316],{"class":103},[97,47059,47060,47062,47064,47066],{"class":99,"line":10061},[97,47061,31035],{"class":370},[97,47063,42729],{"class":103},[97,47065,115],{"class":319},[97,47067,38199],{"class":103},[97,47069,47070,47072,47074,47076,47078,47080,47082,47084,47086,47088,47090,47092,47094,47096,47098],{"class":99,"line":10088},[97,47071,42419],{"class":103},[97,47073,42740],{"class":370},[97,47075,698],{"class":103},[97,47077,35060],{"class":370},[97,47079,42428],{"class":103},[97,47081,21238],{"class":370},[97,47083,698],{"class":103},[97,47085,42676],{"class":370},[97,47087,42437],{"class":103},[97,47089,517],{"class":370},[97,47091,698],{"class":103},[97,47093,32260],{"class":370},[97,47095,42446],{"class":103},[97,47097,32260],{"class":370},[97,47099,38237],{"class":103},[97,47101,47102,47104,47106,47108,47110,47112,47114,47116,47118,47120,47122,47124,47126,47128,47130],{"class":99,"line":10097},[97,47103,42419],{"class":103},[97,47105,42740],{"class":370},[97,47107,698],{"class":103},[97,47109,35130],{"class":370},[97,47111,42428],{"class":103},[97,47113,42349],{"class":370},[97,47115,698],{"class":103},[97,47117,35130],{"class":370},[97,47119,42437],{"class":103},[97,47121,927],{"class":370},[97,47123,698],{"class":103},[97,47125,32260],{"class":370},[97,47127,42446],{"class":103},[97,47129,32260],{"class":370},[97,47131,38237],{"class":103},[97,47133,47134,47136,47138,47140,47142],{"class":99,"line":10103},[97,47135,42803],{"class":103},[97,47137,537],{"class":370},[97,47139,698],{"class":103},[97,47141,537],{"class":370},[97,47143,42812],{"class":103},[97,47145,47146],{"class":99,"line":10111},[97,47147,38980],{"class":103},[97,47149,47150,47152,47154,47156,47158],{"class":99,"line":10116},[97,47151,38985],{"class":103},[97,47153,42823],{"class":370},[97,47155,698],{"class":103},[97,47157,398],{"class":370},[97,47159,329],{"class":103},[97,47161,47162],{"class":99,"line":16794},[97,47163,38316],{"class":103},[97,47165,47166],{"class":99,"line":16800},[97,47167,42838],{"class":191},[97,47169,47170,47172,47174,47176,47178],{"class":99,"line":16823},[97,47171,3594],{"class":319},[97,47173,39058],{"class":103},[97,47175,26233],{"class":319},[97,47177,39063],{"class":370},[97,47179,39066],{"class":103},[97,47181,47182,47184,47186],{"class":99,"line":16829},[97,47183,4833],{"class":319},[97,47185,39078],{"class":370},[97,47187,39081],{"class":103},[97,47189,47190,47192,47194,47196,47198,47200,47202,47204,47206],{"class":99,"line":16852},[97,47191,39091],{"class":103},[97,47193,42865],{"class":5407},[97,47195,115],{"class":319},[97,47197,42870],{"class":118},[97,47199,698],{"class":103},[97,47201,39094],{"class":5407},[97,47203,115],{"class":319},[97,47205,39099],{"class":118},[97,47207,329],{"class":103},[97,47209,47210],{"class":99,"line":16866},[97,47211,42885],{"class":191},[97,47213,47214],{"class":99,"line":16886},[97,47215,42890],{"class":191},[97,47217,47218],{"class":99,"line":16892},[97,47219,42895],{"class":191},[97,47221,47222],{"class":99,"line":16903},[97,47223,42900],{"class":191},[97,47225,47226],{"class":99,"line":16926},[97,47227,42905],{"class":191},[97,47229,47230],{"class":99,"line":16948},[97,47231,42910],{"class":191},[97,47233,47234,47236,47238,47240,47242,47244],{"class":99,"line":16953},[97,47235,39111],{"class":319},[97,47237,39114],{"class":103},[97,47239,39117],{"class":319},[97,47241,39120],{"class":319},[97,47243,39123],{"class":370},[97,47245,3930],{"class":103},[97,47247,47248,47250,47252],{"class":99,"line":16959},[97,47249,39135],{"class":103},[97,47251,511],{"class":370},[97,47253,329],{"class":103},[97,47255,47256,47258,47260],{"class":99,"line":16973},[97,47257,42937],{"class":319},[97,47259,39078],{"class":370},[97,47261,39154],{"class":103},[97,47263,47264,47266,47268,47270,47272],{"class":99,"line":16986},[97,47265,42946],{"class":103},[97,47267,511],{"class":370},[97,47269,698],{"class":103},[97,47271,39176],{"class":370},[97,47273,329],{"class":103},[97,47275,47276,47278,47280,47282,47284,47286],{"class":99,"line":16991},[97,47277,42959],{"class":319},[97,47279,39114],{"class":103},[97,47281,39117],{"class":319},[97,47283,39120],{"class":319},[97,47285,39123],{"class":370},[97,47287,3930],{"class":103},[97,47289,47290,47292,47294],{"class":99,"line":17005},[97,47291,42974],{"class":103},[97,47293,511],{"class":370},[97,47295,329],{"class":103},[97,47297,47298],{"class":99,"line":17010},[97,47299,35355],{"class":191},[97,47301,47302,47304,47306],{"class":99,"line":17016},[97,47303,30991],{"class":319},[97,47305,31283],{"class":111},[97,47307,31286],{"class":103},[97,47309,47310,47312,47314,47316],{"class":99,"line":17021},[97,47311,31291],{"class":103},[97,47313,115],{"class":319},[97,47315,31013],{"class":370},[97,47317,43001],{"class":103},[97,47319,47320,47322,47324,47326],{"class":99,"line":17035},[97,47321,31291],{"class":103},[97,47323,115],{"class":319},[97,47325,31013],{"class":370},[97,47327,43012],{"class":103},[97,47329,47330,47332,47334,47336],{"class":99,"line":17040},[97,47331,31291],{"class":103},[97,47333,115],{"class":319},[97,47335,31013],{"class":370},[97,47337,43023],{"class":103},[97,47339,47340,47342,47344,47346],{"class":99,"line":17045},[97,47341,31291],{"class":103},[97,47343,115],{"class":319},[97,47345,31013],{"class":370},[97,47347,43034],{"class":103},[97,47349,47350,47352,47354,47356],{"class":99,"line":17059},[97,47351,31291],{"class":103},[97,47353,115],{"class":319},[97,47355,31013],{"class":370},[97,47357,43045],{"class":103},[97,47359,47360,47362],{"class":99,"line":17071},[97,47361,14943],{"class":319},[97,47363,31399],{"class":103},[97,47365,47366],{"class":99,"line":17076},[97,47367,2591],{"emptyLinePlaceholder":249},[97,47369,47370],{"class":99,"line":17089},[97,47371,43060],{"class":191},[97,47373,47374,47376,47378,47380,47382],{"class":99,"line":17094},[97,47375,1723],{"class":319},[97,47377,31410],{"class":370},[97,47379,3140],{"class":319},[97,47381,31415],{"class":118},[97,47383,3930],{"class":103},[97,47385,47386,47388,47390,47392,47394,47396,47398,47400,47402],{"class":99,"line":17099},[97,47387,31427],{"class":103},[97,47389,115],{"class":319},[97,47391,30641],{"class":103},[97,47393,31434],{"class":118},[97,47395,1896],{"class":319},[97,47397,31439],{"class":103},[97,47399,1893],{"class":319},[97,47401,30666],{"class":118},[97,47403,329],{"class":103},[97,47405,47406,47408,47410],{"class":99,"line":17104},[97,47407,31479],{"class":103},[97,47409,115],{"class":319},[97,47411,43101],{"class":103},[97,47413,47414,47416,47418,47420,47422,47424,47426,47428],{"class":99,"line":17117},[97,47415,31489],{"class":370},[97,47417,31492],{"class":103},[97,47419,537],{"class":370},[97,47421,698],{"class":103},[97,47423,31691],{"class":370},[97,47425,698],{"class":103},[97,47427,31691],{"class":370},[97,47429,31505],{"class":103},[160,47431,47433],{"id":47432},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[24,47435,47436],{},"计算图片的均值与方差，用于训练中归一化处理操作",[87,47438,47440],{"className":30568,"code":47439,"language":30570,"meta":92,"style":92},"# 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",[94,47441,47442,47447,47460,47465,47471,47476,47486,47490,47495,47505,47509,47514,47524,47541,47545,47550,47562,47574,47605,47614,47624,47634,47638,47643,47658,47662,47667,47672,47677,47687,47692,47717,47721,47726,47741,47745,47758,47762,47767,47772,47777,47782,47787,47797,47807,47830,47838,47846,47854,47858,47870,47874,47879,47883,47887,47894,47914,47938,47945,47959,47964,47969,47973,47987,47991,48003],{"__ignoreMap":92},[97,47443,47444],{"class":99,"line":100},[97,47445,47446],{"class":191},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[97,47448,47449,47451,47454,47457],{"class":99,"line":195},[97,47450,30927],{"class":319},[97,47452,47453],{"class":370}," PIL",[97,47455,47456],{"class":319}," import",[97,47458,47459],{"class":103}," Image\n",[97,47461,47462],{"class":99,"line":241},[97,47463,47464],{"class":191},"# os 用来处理文件夹和文件路径\n",[97,47466,47467,47469],{"class":99,"line":1387},[97,47468,30582],{"class":319},[97,47470,45495],{"class":103},[97,47472,47473],{"class":99,"line":1393},[97,47474,47475],{"class":191},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[97,47477,47478,47480,47482,47484],{"class":99,"line":1407},[97,47479,30582],{"class":319},[97,47481,31570],{"class":103},[97,47483,31573],{"class":319},[97,47485,31576],{"class":103},[97,47487,47488],{"class":99,"line":1413},[97,47489,2591],{"emptyLinePlaceholder":249},[97,47491,47492],{"class":99,"line":1504},[97,47493,47494],{"class":191},"# 文件夹路径，包含所有图片文件\n",[97,47496,47497,47500,47502],{"class":99,"line":1510},[97,47498,47499],{"class":103},"folder_path ",[97,47501,115],{"class":319},[97,47503,47504],{"class":118}," 'data_cat_dog'\n",[97,47506,47507],{"class":99,"line":1522},[97,47508,2591],{"emptyLinePlaceholder":249},[97,47510,47511],{"class":99,"line":1804},[97,47512,47513],{"class":191},"# 初始化累积变量\n",[97,47515,47516,47519,47521],{"class":99,"line":1809},[97,47517,47518],{"class":103},"total_pixels ",[97,47520,115],{"class":319},[97,47522,47523],{"class":370}," 0\n",[97,47525,47526,47529,47531,47534,47536,47538],{"class":99,"line":1815},[97,47527,47528],{"class":103},"sum_normalized_pixel_values ",[97,47530,115],{"class":319},[97,47532,47533],{"class":103}," np.zeros(",[97,47535,392],{"class":370},[97,47537,45998],{"class":103},[97,47539,47540],{"class":191},"# 如果是RGB图像，需要三个通道的均值和方差\n",[97,47542,47543],{"class":99,"line":1820},[97,47544,2591],{"emptyLinePlaceholder":249},[97,47546,47547],{"class":99,"line":1834},[97,47548,47549],{"class":191},"# 遍历文件夹中的图片文件\n",[97,47551,47552,47554,47557,47559],{"class":99,"line":1839},[97,47553,3216],{"class":319},[97,47555,47556],{"class":103}," root, dirs, files ",[97,47558,26233],{"class":319},[97,47560,47561],{"class":103}," os.walk(folder_path):\n",[97,47563,47564,47566,47569,47571],{"class":99,"line":1845},[97,47565,3392],{"class":319},[97,47567,47568],{"class":103}," filename ",[97,47570,26233],{"class":319},[97,47572,47573],{"class":103}," files:\n",[97,47575,47576,47578,47581,47584,47586,47589,47591,47594,47596,47599,47602],{"class":99,"line":1866},[97,47577,2688],{"class":319},[97,47579,47580],{"class":103}," filename.endswith((",[97,47582,47583],{"class":118},"'.jpg'",[97,47585,12626],{"class":103},[97,47587,47588],{"class":118},"'.jpeg'",[97,47590,12626],{"class":103},[97,47592,47593],{"class":118},"'.png'",[97,47595,12626],{"class":103},[97,47597,47598],{"class":118},"'.bmp'",[97,47600,47601],{"class":103},")):  ",[97,47603,47604],{"class":191},"# 可根据实际情况添加其他格式\n",[97,47606,47607,47609,47611],{"class":99,"line":1871},[97,47608,45863],{"class":103},[97,47610,115],{"class":319},[97,47612,47613],{"class":103}," os.path.join(root, filename)\n",[97,47615,47616,47619,47621],{"class":99,"line":1885},[97,47617,47618],{"class":103},"            image ",[97,47620,115],{"class":319},[97,47622,47623],{"class":103}," Image.open(image_path)\n",[97,47625,47626,47629,47631],{"class":99,"line":1890},[97,47627,47628],{"class":103},"            image_array ",[97,47630,115],{"class":319},[97,47632,47633],{"class":103}," np.array(image)\n",[97,47635,47636],{"class":99,"line":1919},[97,47637,2591],{"emptyLinePlaceholder":249},[97,47639,47640],{"class":99,"line":1924},[97,47641,47642],{"class":191},"            # 归一化像素值到0-1之间\n",[97,47644,47645,47648,47650,47653,47655],{"class":99,"line":1941},[97,47646,47647],{"class":103},"            normalized_image_array ",[97,47649,115],{"class":319},[97,47651,47652],{"class":103}," image_array ",[97,47654,904],{"class":319},[97,47656,47657],{"class":370}," 255.0\n",[97,47659,47660],{"class":99,"line":1946},[97,47661,2591],{"emptyLinePlaceholder":249},[97,47663,47664],{"class":99,"line":1951},[97,47665,47666],{"class":191},"            # print(image_path)\n",[97,47668,47669],{"class":99,"line":1956},[97,47670,47671],{"class":191},"            # print(normalized_image_array.shape)\n",[97,47673,47674],{"class":99,"line":1970},[97,47675,47676],{"class":191},"            # 累积归一化后的像素值和像素数量\n",[97,47678,47679,47682,47684],{"class":99,"line":1975},[97,47680,47681],{"class":103},"            total_pixels ",[97,47683,9668],{"class":319},[97,47685,47686],{"class":103}," normalized_image_array.size\n",[97,47688,47689],{"class":99,"line":2768},[97,47690,47691],{"class":191},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[97,47693,47694,47697,47699,47702,47705,47707,47709,47711,47713,47715],{"class":99,"line":2782},[97,47695,47696],{"class":103},"            sum_normalized_pixel_values ",[97,47698,9668],{"class":319},[97,47700,47701],{"class":103}," np.sum(normalized_image_array, ",[97,47703,47704],{"class":5407},"axis",[97,47706,115],{"class":319},[97,47708,323],{"class":103},[97,47710,511],{"class":370},[97,47712,12626],{"class":103},[97,47714,537],{"class":370},[97,47716,30687],{"class":103},[97,47718,47719],{"class":99,"line":2790},[97,47720,2591],{"emptyLinePlaceholder":249},[97,47722,47723],{"class":99,"line":2795},[97,47724,47725],{"class":191},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[97,47727,47728,47731,47733,47736,47738],{"class":99,"line":2801},[97,47729,47730],{"class":103},"mean ",[97,47732,115],{"class":319},[97,47734,47735],{"class":103}," sum_normalized_pixel_values ",[97,47737,904],{"class":319},[97,47739,47740],{"class":103}," total_pixels\n",[97,47742,47743],{"class":99,"line":2807},[97,47744,2591],{"emptyLinePlaceholder":249},[97,47746,47747,47750,47752,47754,47756],{"class":99,"line":2812},[97,47748,47749],{"class":103},"sum_squared_diff ",[97,47751,115],{"class":319},[97,47753,47533],{"class":103},[97,47755,392],{"class":370},[97,47757,329],{"class":103},[97,47759,47760],{"class":99,"line":8139},[97,47761,2591],{"emptyLinePlaceholder":249},[97,47763,47764],{"class":99,"line":8163},[97,47765,47766],{"class":191},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[97,47768,47769],{"class":99,"line":8168},[97,47770,47771],{"class":191},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[97,47773,47774],{"class":99,"line":8174},[97,47775,47776],{"class":191},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[97,47778,47779],{"class":99,"line":8201},[97,47780,47781],{"class":191},"# Image.open(image_path)：打开图片\n",[97,47783,47784],{"class":99,"line":8206},[97,47785,47786],{"class":191},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[97,47788,47789,47791,47793,47795],{"class":99,"line":8212},[97,47790,3216],{"class":319},[97,47792,47556],{"class":103},[97,47794,26233],{"class":319},[97,47796,47561],{"class":103},[97,47798,47799,47801,47803,47805],{"class":99,"line":8224},[97,47800,3392],{"class":319},[97,47802,47568],{"class":103},[97,47804,26233],{"class":319},[97,47806,47573],{"class":103},[97,47808,47809,47811,47813,47815,47817,47819,47821,47823,47825,47827],{"class":99,"line":8236},[97,47810,2688],{"class":319},[97,47812,47580],{"class":103},[97,47814,47583],{"class":118},[97,47816,12626],{"class":103},[97,47818,47588],{"class":118},[97,47820,12626],{"class":103},[97,47822,47593],{"class":118},[97,47824,12626],{"class":103},[97,47826,47598],{"class":118},[97,47828,47829],{"class":103},")):\n",[97,47831,47832,47834,47836],{"class":99,"line":8248},[97,47833,45863],{"class":103},[97,47835,115],{"class":319},[97,47837,47613],{"class":103},[97,47839,47840,47842,47844],{"class":99,"line":9907},[97,47841,47618],{"class":103},[97,47843,115],{"class":319},[97,47845,47623],{"class":103},[97,47847,47848,47850,47852],{"class":99,"line":9932},[97,47849,47628],{"class":103},[97,47851,115],{"class":319},[97,47853,47633],{"class":103},[97,47855,47856],{"class":99,"line":9955},[97,47857,47642],{"class":191},[97,47859,47860,47862,47864,47866,47868],{"class":99,"line":9979},[97,47861,47647],{"class":103},[97,47863,115],{"class":319},[97,47865,47652],{"class":103},[97,47867,904],{"class":319},[97,47869,47657],{"class":370},[97,47871,47872],{"class":99,"line":9984},[97,47873,47671],{"class":191},[97,47875,47876],{"class":99,"line":9989},[97,47877,47878],{"class":191},"            # print(mean.shape)\n",[97,47880,47881],{"class":99,"line":9994},[97,47882,47666],{"class":191},[97,47884,47885],{"class":99,"line":10003},[97,47886,2591],{"emptyLinePlaceholder":249},[97,47888,47889,47892],{"class":99,"line":10008},[97,47890,47891],{"class":319},"            try",[97,47893,3930],{"class":103},[97,47895,47896,47899,47901,47904,47906,47909,47911],{"class":99,"line":10014},[97,47897,47898],{"class":103},"                diff ",[97,47900,115],{"class":319},[97,47902,47903],{"class":103}," (normalized_image_array ",[97,47905,852],{"class":319},[97,47907,47908],{"class":103}," mean) ",[97,47910,10852],{"class":319},[97,47912,47913],{"class":370}," 2\n",[97,47915,47916,47919,47921,47924,47926,47928,47930,47932,47934,47936],{"class":99,"line":10035},[97,47917,47918],{"class":103},"                sum_squared_diff ",[97,47920,9668],{"class":319},[97,47922,47923],{"class":103}," np.sum(diff, ",[97,47925,47704],{"class":5407},[97,47927,115],{"class":319},[97,47929,323],{"class":103},[97,47931,511],{"class":370},[97,47933,12626],{"class":103},[97,47935,537],{"class":370},[97,47937,30687],{"class":103},[97,47939,47940,47943],{"class":99,"line":10041},[97,47941,47942],{"class":319},"            except",[97,47944,3930],{"class":103},[97,47946,47947,47950,47952,47954,47957],{"class":99,"line":10055},[97,47948,47949],{"class":370},"                print",[97,47951,323],{"class":103},[97,47953,374],{"class":319},[97,47955,47956],{"class":118},"\"捕获到自定义异常\"",[97,47958,329],{"class":103},[97,47960,47961],{"class":99,"line":10061},[97,47962,47963],{"class":191},"            # diff = (normalized_image_array - mean) ** 2\n",[97,47965,47966],{"class":99,"line":10088},[97,47967,47968],{"class":191},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[97,47970,47971],{"class":99,"line":10097},[97,47972,2591],{"emptyLinePlaceholder":249},[97,47974,47975,47978,47980,47983,47985],{"class":99,"line":10103},[97,47976,47977],{"class":103},"variance ",[97,47979,115],{"class":319},[97,47981,47982],{"class":103}," sum_squared_diff ",[97,47984,904],{"class":319},[97,47986,47740],{"class":103},[97,47988,47989],{"class":99,"line":10111},[97,47990,2591],{"emptyLinePlaceholder":249},[97,47992,47993,47995,47997,48000],{"class":99,"line":10116},[97,47994,30605],{"class":370},[97,47996,323],{"class":103},[97,47998,47999],{"class":118},"\"Mean:\"",[97,48001,48002],{"class":103},", mean)\n",[97,48004,48005,48007,48009,48012],{"class":99,"line":16794},[97,48006,30605],{"class":370},[97,48008,323],{"class":103},[97,48010,48011],{"class":118},"\"Variance:\"",[97,48013,48014],{"class":103},", variance)\n",[87,48016,48018],{"className":30568,"code":48017,"language":30570,"meta":92,"style":92},"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",[94,48019,48020,48026,48032,48042,48048,48058,48072,48082,48092,48102,48106,48116,48126,48130,48134,48142,48147,48152,48171,48175,48180,48185,48190,48195,48236,48241,48251,48256,48269,48274,48279,48284,48289,48294,48298,48303,48308,48330,48334,48366,48380,48390,48400,48404,48414,48428,48438,48448,48458,48464,48468,48472,48476,48480,48484,48492,48512,48516,48520,48524,48528,48544,48548,48552,48560,48564,48568,48576,48580,48584,48588,48596,48600,48604,48608,48616,48620,48628,48632,48640,48644,48652,48656,48664,48668,48672,48680,48684,48688,48700,48724,48738,48742,48746,48750,48758,48762,48770,48774,48782,48786,48794,48798,48806,48810,48818,48822,48834,48838,48846,48850,48858,48862,48866,48870,48874,48882,48886,48902,48906,48914,48918,48922,48926,48930,48934,48938,48942,48958,48962,48974,48978,48990,48994,49006,49010,49018,49022,49030,49034,49038,49042,49048,49052,49060,49064,49080,49084,49092,49096,49112,49124,49128,49140,49144,49148,49156,49160,49164,49172,49176,49184,49188,49196,49200,49204,49246,49288,49292,49296,49312,49316,49332,49336,49340,49348,49352,49356,49368,49406,49410,49414,49422,49426,49440,49450,49456,49462,49468,49474,49478,49482,49488,49492,49496,49504,49508,49526,49530,49534,49538,49554,49558,49562,49566,49570,49574,49594,49614,49618,49622,49626,49634,49642,49646,49662,49682,49702,49706,49711,49720,49729,49734,49739,49744,49757,49762,49771,49780,49797],{"__ignoreMap":92},[97,48021,48022,48024],{"class":99,"line":100},[97,48023,30582],{"class":319},[97,48025,32012],{"class":103},[97,48027,48028,48030],{"class":99,"line":195},[97,48029,30582],{"class":319},[97,48031,32019],{"class":103},[97,48033,48034,48036,48038,48040],{"class":99,"line":241},[97,48035,30582],{"class":319},[97,48037,32030],{"class":103},[97,48039,31573],{"class":319},[97,48041,32035],{"class":103},[97,48043,48044,48046],{"class":99,"line":1387},[97,48045,30582],{"class":319},[97,48047,30585],{"class":103},[97,48049,48050,48052,48054,48056],{"class":99,"line":1393},[97,48051,30927],{"class":319},[97,48053,31605],{"class":103},[97,48055,30582],{"class":319},[97,48057,32052],{"class":103},[97,48059,48060,48062,48064,48066,48069],{"class":99,"line":1407},[97,48061,30927],{"class":319},[97,48063,31558],{"class":103},[97,48065,30582],{"class":319},[97,48067,48068],{"class":103}," ImageFolder ",[97,48070,48071],{"class":191},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[97,48073,48074,48076,48078,48080],{"class":99,"line":1413},[97,48075,30927],{"class":319},[97,48077,31588],{"class":103},[97,48079,30582],{"class":319},[97,48081,31593],{"class":103},[97,48083,48084,48086,48088,48090],{"class":99,"line":1504},[97,48085,30582],{"class":319},[97,48087,31605],{"class":103},[97,48089,31573],{"class":319},[97,48091,31610],{"class":103},[97,48093,48094,48096,48098,48100],{"class":99,"line":1510},[97,48095,30582],{"class":319},[97,48097,31622],{"class":103},[97,48099,31573],{"class":319},[97,48101,31627],{"class":103},[97,48103,48104],{"class":99,"line":1522},[97,48105,32097],{"class":191},[97,48107,48108,48110,48112,48114],{"class":99,"line":1804},[97,48109,30927],{"class":319},[97,48111,32104],{"class":103},[97,48113,30582],{"class":319},[97,48115,43221],{"class":103},[97,48117,48118,48120,48122,48124],{"class":99,"line":1809},[97,48119,30927],{"class":319},[97,48121,30930],{"class":103},[97,48123,30582],{"class":319},[97,48125,30935],{"class":103},[97,48127,48128],{"class":99,"line":1815},[97,48129,2591],{"emptyLinePlaceholder":249},[97,48131,48132],{"class":99,"line":1820},[97,48133,32132],{"class":191},[97,48135,48136,48138,48140],{"class":99,"line":1834},[97,48137,32137],{"class":319},[97,48139,32140],{"class":111},[97,48141,32143],{"class":103},[97,48143,48144],{"class":99,"line":1839},[97,48145,48146],{"class":191},"    # 导入自己的数据集，并进行数据处理\n",[97,48148,48149],{"class":99,"line":1845},[97,48150,48151],{"class":191},"    # 定义数据集的路径\n",[97,48153,48154,48157,48159,48161,48163,48165,48169],{"class":99,"line":1866},[97,48155,48156],{"class":370},"    ROOT_PATH",[97,48158,115],{"class":319},[97,48160,990],{"class":319},[97,48162,571],{"class":118},[97,48164,878],{"class":370},[97,48166,48168],{"class":48167},"sA_wV","\u002Fdata\u002Ftrain",[97,48170,25323],{"class":118},[97,48172,48173],{"class":99,"line":1871},[97,48174,2591],{"emptyLinePlaceholder":249},[97,48176,48177],{"class":99,"line":1885},[97,48178,48179],{"class":191},"    # 定义归一化方法\n",[97,48181,48182],{"class":99,"line":1890},[97,48183,48184],{"class":191},"    # 这里需要先计算一下数据集的均值和方差\n",[97,48186,48187],{"class":99,"line":1919},[97,48188,48189],{"class":191},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[97,48191,48192],{"class":99,"line":1924},[97,48193,48194],{"class":191},"    # 第一个参数是均值，第二个参数是方差\n",[97,48196,48197,48200,48202,48205,48208,48210,48213,48215,48218,48221,48224,48226,48229,48231,48234],{"class":99,"line":1941},[97,48198,48199],{"class":103},"    normalize",[97,48201,115],{"class":319},[97,48203,48204],{"class":103},"transforms.Normalize([",[97,48206,48207],{"class":370},"0.162",[97,48209,698],{"class":103},[97,48211,48212],{"class":370},"0.151",[97,48214,698],{"class":103},[97,48216,48217],{"class":370},"0.138",[97,48219,48220],{"class":103},"],[",[97,48222,48223],{"class":370},"0.058",[97,48225,698],{"class":103},[97,48227,48228],{"class":370},"0.052",[97,48230,698],{"class":103},[97,48232,48233],{"class":370},"0.048",[97,48235,4848],{"class":103},[97,48237,48238],{"class":99,"line":1946},[97,48239,48240],{"class":191},"    # 定义数据集处理方法变量\n",[97,48242,48243,48246,48248],{"class":99,"line":1951},[97,48244,48245],{"class":103},"    train_transform",[97,48247,115],{"class":319},[97,48249,48250],{"class":103},"transforms.Compose([\n",[97,48252,48253],{"class":99,"line":1956},[97,48254,48255],{"class":191},"        # 调整图像大小为224*224\n",[97,48257,48258,48261,48263,48265,48267],{"class":99,"line":1970},[97,48259,48260],{"class":103},"        transforms.Resize((",[97,48262,31691],{"class":370},[97,48264,698],{"class":103},[97,48266,31691],{"class":370},[97,48268,42812],{"class":103},[97,48270,48271],{"class":99,"line":1975},[97,48272,48273],{"class":191},"        # 将图像转换为张量\n",[97,48275,48276],{"class":99,"line":2768},[97,48277,48278],{"class":103},"        transforms.ToTensor(),\n",[97,48280,48281],{"class":99,"line":2782},[97,48282,48283],{"class":103},"        normalize])\n",[97,48285,48286],{"class":99,"line":2790},[97,48287,48288],{"class":191},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[97,48290,48291],{"class":99,"line":2795},[97,48292,48293],{"class":191},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[97,48295,48296],{"class":99,"line":2801},[97,48297,2591],{"emptyLinePlaceholder":249},[97,48299,48300],{"class":99,"line":2807},[97,48301,48302],{"class":191},"    # 加载数据集\n",[97,48304,48305],{"class":99,"line":2812},[97,48306,48307],{"class":191},"    # 传入数据集路径与处理方法\n",[97,48309,48310,48312,48314,48317,48320,48322,48325,48327],{"class":99,"line":8139},[97,48311,32148],{"class":103},[97,48313,115],{"class":319},[97,48315,48316],{"class":103},"ImageFolder(",[97,48318,48319],{"class":370},"ROOT_PATH",[97,48321,698],{"class":103},[97,48323,48324],{"class":5407},"transform",[97,48326,115],{"class":319},[97,48328,48329],{"class":103},"train_transform)\n",[97,48331,48332],{"class":99,"line":8163},[97,48333,2591],{"emptyLinePlaceholder":249},[97,48335,48336,48338,48340,48342,48344,48346,48348,48350,48352,48354,48356,48358,48360,48362,48364],{"class":99,"line":8168},[97,48337,32200],{"class":103},[97,48339,115],{"class":319},[97,48341,32205],{"class":103},[97,48343,32208],{"class":370},[97,48345,323],{"class":103},[97,48347,32213],{"class":370},[97,48349,775],{"class":319},[97,48351,7549],{"class":370},[97,48353,32220],{"class":103},[97,48355,32208],{"class":370},[97,48357,323],{"class":103},[97,48359,32227],{"class":370},[97,48361,775],{"class":319},[97,48363,7549],{"class":370},[97,48365,32234],{"class":103},[97,48367,48368,48370,48372,48374,48376,48378],{"class":99,"line":8174},[97,48369,32239],{"class":103},[97,48371,115],{"class":319},[97,48373,32244],{"class":103},[97,48375,31727],{"class":5407},[97,48377,115],{"class":319},[97,48379,31732],{"class":103},[97,48381,48382,48384,48386,48388],{"class":99,"line":8201},[97,48383,32255],{"class":5407},[97,48385,115],{"class":319},[97,48387,517],{"class":370},[97,48389,31656],{"class":103},[97,48391,48392,48394,48396,48398],{"class":99,"line":8206},[97,48393,32267],{"class":5407},[97,48395,115],{"class":319},[97,48397,31666],{"class":370},[97,48399,31656],{"class":103},[97,48401,48402],{"class":99,"line":8212},[97,48403,32278],{"class":191},[97,48405,48406,48408,48410,48412],{"class":99,"line":8224},[97,48407,32283],{"class":5407},[97,48409,115],{"class":319},[97,48411,715],{"class":370},[97,48413,329],{"class":103},[97,48415,48416,48418,48420,48422,48424,48426],{"class":99,"line":8236},[97,48417,32294],{"class":103},[97,48419,115],{"class":319},[97,48421,31724],{"class":103},[97,48423,31727],{"class":5407},[97,48425,115],{"class":319},[97,48427,32305],{"class":103},[97,48429,48430,48432,48434,48436],{"class":99,"line":8248},[97,48431,32310],{"class":5407},[97,48433,115],{"class":319},[97,48435,517],{"class":370},[97,48437,31656],{"class":103},[97,48439,48440,48442,48444,48446],{"class":99,"line":9907},[97,48441,32321],{"class":5407},[97,48443,115],{"class":319},[97,48445,31666],{"class":370},[97,48447,31656],{"class":103},[97,48449,48450,48452,48454,48456],{"class":99,"line":9932},[97,48451,32332],{"class":5407},[97,48453,115],{"class":319},[97,48455,715],{"class":370},[97,48457,329],{"class":103},[97,48459,48460,48462],{"class":99,"line":9955},[97,48461,4281],{"class":319},[97,48463,32345],{"class":103},[97,48465,48466],{"class":99,"line":9979},[97,48467,2591],{"emptyLinePlaceholder":249},[97,48469,48470],{"class":99,"line":9984},[97,48471,32354],{"class":191},[97,48473,48474],{"class":99,"line":9989},[97,48475,32359],{"class":191},[97,48477,48478],{"class":99,"line":9994},[97,48479,2591],{"emptyLinePlaceholder":249},[97,48481,48482],{"class":99,"line":10003},[97,48483,32368],{"class":191},[97,48485,48486,48488,48490],{"class":99,"line":10008},[97,48487,32137],{"class":319},[97,48489,32375],{"class":111},[97,48491,32378],{"class":103},[97,48493,48494,48496,48498,48500,48502,48504,48506,48508,48510],{"class":99,"line":10014},[97,48495,31427],{"class":103},[97,48497,115],{"class":319},[97,48499,30641],{"class":103},[97,48501,31434],{"class":118},[97,48503,1896],{"class":319},[97,48505,31439],{"class":103},[97,48507,1893],{"class":319},[97,48509,32397],{"class":118},[97,48511,329],{"class":103},[97,48513,48514],{"class":99,"line":10035},[97,48515,2591],{"emptyLinePlaceholder":249},[97,48517,48518],{"class":99,"line":10041},[97,48519,32412],{"class":191},[97,48521,48522],{"class":99,"line":10055},[97,48523,32417],{"class":191},[97,48525,48526],{"class":99,"line":10061},[97,48527,32422],{"class":191},[97,48529,48530,48532,48534,48536,48538,48540,48542],{"class":99,"line":10088},[97,48531,32427],{"class":103},[97,48533,115],{"class":319},[97,48535,32432],{"class":103},[97,48537,32435],{"class":5407},[97,48539,115],{"class":319},[97,48541,32440],{"class":370},[97,48543,329],{"class":103},[97,48545,48546],{"class":99,"line":10097},[97,48547,2591],{"emptyLinePlaceholder":249},[97,48549,48550],{"class":99,"line":10103},[97,48551,32451],{"class":191},[97,48553,48554,48556,48558],{"class":99,"line":10111},[97,48555,32456],{"class":103},[97,48557,115],{"class":319},[97,48559,32461],{"class":103},[97,48561,48562],{"class":99,"line":10116},[97,48563,2591],{"emptyLinePlaceholder":249},[97,48565,48566],{"class":99,"line":16794},[97,48567,32470],{"class":191},[97,48569,48570,48572,48574],{"class":99,"line":16800},[97,48571,31479],{"class":103},[97,48573,115],{"class":319},[97,48575,32479],{"class":103},[97,48577,48578],{"class":99,"line":16823},[97,48579,32484],{"class":191},[97,48581,48582],{"class":99,"line":16829},[97,48583,32489],{"class":191},[97,48585,48586],{"class":99,"line":16852},[97,48587,32494],{"class":191},[97,48589,48590,48592,48594],{"class":99,"line":16866},[97,48591,32499],{"class":103},[97,48593,115],{"class":319},[97,48595,32504],{"class":103},[97,48597,48598],{"class":99,"line":16886},[97,48599,2591],{"emptyLinePlaceholder":249},[97,48601,48602],{"class":99,"line":16892},[97,48603,32517],{"class":191},[97,48605,48606],{"class":99,"line":16903},[97,48607,32522],{"class":191},[97,48609,48610,48612,48614],{"class":99,"line":16926},[97,48611,32527],{"class":103},[97,48613,115],{"class":319},[97,48615,32532],{"class":370},[97,48617,48618],{"class":99,"line":16948},[97,48619,32537],{"class":191},[97,48621,48622,48624,48626],{"class":99,"line":16953},[97,48623,32542],{"class":103},[97,48625,115],{"class":319},[97,48627,32547],{"class":103},[97,48629,48630],{"class":99,"line":16959},[97,48631,32552],{"class":191},[97,48633,48634,48636,48638],{"class":99,"line":16973},[97,48635,32557],{"class":103},[97,48637,115],{"class":319},[97,48639,32547],{"class":103},[97,48641,48642],{"class":99,"line":16986},[97,48643,32566],{"class":191},[97,48645,48646,48648,48650],{"class":99,"line":16991},[97,48647,32571],{"class":103},[97,48649,115],{"class":319},[97,48651,32547],{"class":103},[97,48653,48654],{"class":99,"line":17005},[97,48655,32580],{"class":191},[97,48657,48658,48660,48662],{"class":99,"line":17010},[97,48659,32585],{"class":103},[97,48661,115],{"class":319},[97,48663,32547],{"class":103},[97,48665,48666],{"class":99,"line":17016},[97,48667,2591],{"emptyLinePlaceholder":249},[97,48669,48670],{"class":99,"line":17021},[97,48671,32598],{"class":191},[97,48673,48674,48676,48678],{"class":99,"line":17035},[97,48675,32603],{"class":103},[97,48677,115],{"class":319},[97,48679,32608],{"class":103},[97,48681,48682],{"class":99,"line":17040},[97,48683,2591],{"emptyLinePlaceholder":249},[97,48685,48686],{"class":99,"line":17045},[97,48687,32621],{"class":191},[97,48689,48690,48692,48694,48696,48698],{"class":99,"line":17059},[97,48691,3392],{"class":319},[97,48693,32628],{"class":103},[97,48695,26233],{"class":319},[97,48697,32633],{"class":370},[97,48699,32636],{"class":103},[97,48701,48702,48704,48706,48708,48710,48712,48714,48716,48718,48720,48722],{"class":99,"line":17071},[97,48703,32641],{"class":370},[97,48705,323],{"class":103},[97,48707,32646],{"class":118},[97,48709,32649],{"class":370},[97,48711,904],{"class":118},[97,48713,32649],{"class":370},[97,48715,571],{"class":118},[97,48717,32658],{"class":103},[97,48719,852],{"class":319},[97,48721,537],{"class":370},[97,48723,30687],{"class":103},[97,48725,48726,48728,48730,48732,48734,48736],{"class":99,"line":17076},[97,48727,32641],{"class":370},[97,48729,323],{"class":103},[97,48731,32673],{"class":118},[97,48733,775],{"class":319},[97,48735,766],{"class":370},[97,48737,329],{"class":103},[97,48739,48740],{"class":99,"line":17089},[97,48741,2591],{"emptyLinePlaceholder":249},[97,48743,48744],{"class":99,"line":17094},[97,48745,32688],{"class":191},[97,48747,48748],{"class":99,"line":17099},[97,48749,32693],{"class":191},[97,48751,48752,48754,48756],{"class":99,"line":17104},[97,48753,32698],{"class":103},[97,48755,115],{"class":319},[97,48757,32532],{"class":370},[97,48759,48760],{"class":99,"line":17117},[97,48761,32707],{"class":191},[97,48763,48764,48766,48768],{"class":99,"line":17122},[97,48765,32712],{"class":103},[97,48767,115],{"class":319},[97,48769,3276],{"class":370},[97,48771,48772],{"class":99,"line":32823},[97,48773,32721],{"class":191},[97,48775,48776,48778,48780],{"class":99,"line":32829},[97,48777,32726],{"class":103},[97,48779,115],{"class":319},[97,48781,32532],{"class":370},[97,48783,48784],{"class":99,"line":32835},[97,48785,32735],{"class":191},[97,48787,48788,48790,48792],{"class":99,"line":32841},[97,48789,32740],{"class":103},[97,48791,115],{"class":319},[97,48793,3276],{"class":370},[97,48795,48796],{"class":99,"line":32847},[97,48797,32749],{"class":191},[97,48799,48800,48802,48804],{"class":99,"line":32858},[97,48801,32754],{"class":103},[97,48803,115],{"class":319},[97,48805,3276],{"class":370},[97,48807,48808],{"class":99,"line":32864},[97,48809,32763],{"class":191},[97,48811,48812,48814,48816],{"class":99,"line":32884},[97,48813,32768],{"class":103},[97,48815,115],{"class":319},[97,48817,3276],{"class":370},[97,48819,48820],{"class":99,"line":32890},[97,48821,32777],{"class":191},[97,48823,48824,48826,48828,48830,48832],{"class":99,"line":32901},[97,48825,3594],{"class":319},[97,48827,31791],{"class":103},[97,48829,26233],{"class":319},[97,48831,31796],{"class":370},[97,48833,32790],{"class":103},[97,48835,48836],{"class":99,"line":32907},[97,48837,32795],{"class":191},[97,48839,48840,48842,48844],{"class":99,"line":32913},[97,48841,32800],{"class":103},[97,48843,115],{"class":319},[97,48845,32805],{"class":103},[97,48847,48848],{"class":99,"line":32919},[97,48849,32810],{"class":191},[97,48851,48852,48854,48856],{"class":99,"line":32925},[97,48853,32815],{"class":103},[97,48855,115],{"class":319},[97,48857,32820],{"class":103},[97,48859,48860],{"class":99,"line":32931},[97,48861,32826],{"class":191},[97,48863,48864],{"class":99,"line":32937},[97,48865,32832],{"class":103},[97,48867,48868],{"class":99,"line":32943},[97,48869,32838],{"class":191},[97,48871,48872],{"class":99,"line":32963},[97,48873,32844],{"class":191},[97,48875,48876,48878,48880],{"class":99,"line":32969},[97,48877,32850],{"class":103},[97,48879,115],{"class":319},[97,48881,32855],{"class":103},[97,48883,48884],{"class":99,"line":32985},[97,48885,32861],{"class":191},[97,48887,48888,48890,48892,48894,48896,48898,48900],{"class":99,"line":32991},[97,48889,32867],{"class":103},[97,48891,115],{"class":319},[97,48893,32872],{"class":103},[97,48895,32875],{"class":5407},[97,48897,115],{"class":319},[97,48899,537],{"class":370},[97,48901,329],{"class":103},[97,48903,48904],{"class":99,"line":33005},[97,48905,32887],{"class":191},[97,48907,48908,48910,48912],{"class":99,"line":33011},[97,48909,32893],{"class":103},[97,48911,115],{"class":319},[97,48913,32898],{"class":103},[97,48915,48916],{"class":99,"line":33026},[97,48917,32904],{"class":191},[97,48919,48920],{"class":99,"line":33032},[97,48921,32910],{"class":103},[97,48923,48924],{"class":99,"line":33041},[97,48925,32916],{"class":191},[97,48927,48928],{"class":99,"line":33047},[97,48929,32922],{"class":103},[97,48931,48932],{"class":99,"line":33056},[97,48933,32928],{"class":191},[97,48935,48936],{"class":99,"line":33062},[97,48937,32934],{"class":103},[97,48939,48940],{"class":99,"line":33068},[97,48941,32940],{"class":191},[97,48943,48944,48946,48948,48950,48952,48954,48956],{"class":99,"line":33077},[97,48945,32946],{"class":103},[97,48947,9668],{"class":319},[97,48949,32951],{"class":103},[97,48951,775],{"class":319},[97,48953,32956],{"class":103},[97,48955,511],{"class":370},[97,48957,329],{"class":103},[97,48959,48960],{"class":99,"line":33083},[97,48961,32966],{"class":191},[97,48963,48964,48966,48968,48970,48972],{"class":99,"line":33094},[97,48965,32972],{"class":103},[97,48967,9668],{"class":319},[97,48969,32977],{"class":103},[97,48971,3140],{"class":319},[97,48973,32982],{"class":103},[97,48975,48976],{"class":99,"line":33100},[97,48977,32988],{"class":191},[97,48979,48980,48982,48984,48986,48988],{"class":99,"line":33119},[97,48981,32994],{"class":103},[97,48983,9668],{"class":319},[97,48985,32956],{"class":103},[97,48987,511],{"class":370},[97,48989,329],{"class":103},[97,48991,48992],{"class":99,"line":33125},[97,48993,33008],{"class":191},[97,48995,48996,48998,49000,49002,49004],{"class":99,"line":33136},[97,48997,3594],{"class":319},[97,48999,33016],{"class":103},[97,49001,26233],{"class":319},[97,49003,31796],{"class":370},[97,49005,33023],{"class":103},[97,49007,49008],{"class":99,"line":33142},[97,49009,33029],{"class":191},[97,49011,49012,49014,49016],{"class":99,"line":33162},[97,49013,32800],{"class":103},[97,49015,115],{"class":319},[97,49017,32805],{"class":103},[97,49019,49020],{"class":99,"line":33178},[97,49021,33044],{"class":191},[97,49023,49024,49026,49028],{"class":99,"line":33184},[97,49025,32815],{"class":103},[97,49027,115],{"class":319},[97,49029,32820],{"class":103},[97,49031,49032],{"class":99,"line":33198},[97,49033,33059],{"class":191},[97,49035,49036],{"class":99,"line":33204},[97,49037,33065],{"class":103},[97,49039,49040],{"class":99,"line":33210},[97,49041,36546],{"class":191},[97,49043,49044,49046],{"class":99,"line":33221},[97,49045,33071],{"class":319},[97,49047,33074],{"class":103},[97,49049,49050],{"class":99,"line":33227},[97,49051,33080],{"class":191},[97,49053,49054,49056,49058],{"class":99,"line":33233},[97,49055,36561],{"class":103},[97,49057,115],{"class":319},[97,49059,32855],{"class":103},[97,49061,49062],{"class":99,"line":33243},[97,49063,33097],{"class":191},[97,49065,49066,49068,49070,49072,49074,49076,49078],{"class":99,"line":33249},[97,49067,36574],{"class":103},[97,49069,115],{"class":319},[97,49071,32872],{"class":103},[97,49073,32875],{"class":5407},[97,49075,115],{"class":319},[97,49077,537],{"class":370},[97,49079,329],{"class":103},[97,49081,49082],{"class":99,"line":33260},[97,49083,33122],{"class":191},[97,49085,49086,49088,49090],{"class":99,"line":33266},[97,49087,36595],{"class":103},[97,49089,115],{"class":319},[97,49091,32898],{"class":103},[97,49093,49094],{"class":99,"line":33276},[97,49095,33139],{"class":191},[97,49097,49098,49100,49102,49104,49106,49108,49110],{"class":99,"line":33281},[97,49099,36608],{"class":103},[97,49101,9668],{"class":319},[97,49103,36613],{"class":103},[97,49105,775],{"class":319},[97,49107,32956],{"class":103},[97,49109,511],{"class":370},[97,49111,329],{"class":103},[97,49113,49114,49116,49118,49120,49122],{"class":99,"line":33287},[97,49115,36626],{"class":103},[97,49117,9668],{"class":319},[97,49119,32977],{"class":103},[97,49121,3140],{"class":319},[97,49123,32982],{"class":103},[97,49125,49126],{"class":99,"line":33336},[97,49127,36639],{"class":191},[97,49129,49130,49132,49134,49136,49138],{"class":99,"line":33383},[97,49131,36644],{"class":103},[97,49133,9668],{"class":319},[97,49135,32956],{"class":103},[97,49137,511],{"class":370},[97,49139,329],{"class":103},[97,49141,49142],{"class":99,"line":33388},[97,49143,33201],{"class":191},[97,49145,49146],{"class":99,"line":33394},[97,49147,33207],{"class":191},[97,49149,49150,49152,49154],{"class":99,"line":33413},[97,49151,33213],{"class":103},[97,49153,904],{"class":319},[97,49155,33218],{"class":103},[97,49157,49158],{"class":99,"line":33419},[97,49159,33224],{"class":191},[97,49161,49162],{"class":99,"line":33439},[97,49163,33230],{"class":191},[97,49165,49166,49168,49170],{"class":99,"line":33445},[97,49167,33236],{"class":103},[97,49169,904],{"class":319},[97,49171,33218],{"class":103},[97,49173,49174],{"class":99,"line":33451},[97,49175,33246],{"class":191},[97,49177,49178,49180,49182],{"class":99,"line":33461},[97,49179,33252],{"class":103},[97,49181,904],{"class":319},[97,49183,33257],{"class":103},[97,49185,49186],{"class":99,"line":33466},[97,49187,33263],{"class":191},[97,49189,49190,49192,49194],{"class":99,"line":33472},[97,49191,33269],{"class":103},[97,49193,904],{"class":319},[97,49195,33257],{"class":103},[97,49197,49198],{"class":99,"line":33488},[97,49199,2591],{"emptyLinePlaceholder":249},[97,49201,49202],{"class":99,"line":33533},[97,49203,33284],{"class":191},[97,49205,49206,49208,49210,49212,49214,49216,49218,49220,49222,49224,49226,49228,49230,49232,49234,49236,49238,49240,49242,49244],{"class":99,"line":33539},[97,49207,32641],{"class":370},[97,49209,323],{"class":103},[97,49211,3783],{"class":118},[97,49213,32649],{"class":370},[97,49215,33298],{"class":118},[97,49217,1216],{"class":370},[97,49219,33303],{"class":319},[97,49221,1265],{"class":370},[97,49223,33308],{"class":118},[97,49225,1216],{"class":370},[97,49227,33303],{"class":319},[97,49229,1265],{"class":370},[97,49231,3783],{"class":118},[97,49233,33319],{"class":103},[97,49235,852],{"class":319},[97,49237,537],{"class":370},[97,49239,33326],{"class":103},[97,49241,852],{"class":319},[97,49243,537],{"class":370},[97,49245,33333],{"class":103},[97,49247,49248,49250,49252,49254,49256,49258,49260,49262,49264,49266,49268,49270,49272,49274,49276,49278,49280,49282,49284,49286],{"class":99,"line":33545},[97,49249,32641],{"class":370},[97,49251,323],{"class":103},[97,49253,3783],{"class":118},[97,49255,32649],{"class":370},[97,49257,33347],{"class":118},[97,49259,1216],{"class":370},[97,49261,33303],{"class":319},[97,49263,1265],{"class":370},[97,49265,33356],{"class":118},[97,49267,1216],{"class":370},[97,49269,33303],{"class":319},[97,49271,1265],{"class":370},[97,49273,3783],{"class":118},[97,49275,33367],{"class":103},[97,49277,852],{"class":319},[97,49279,537],{"class":370},[97,49281,33374],{"class":103},[97,49283,852],{"class":319},[97,49285,537],{"class":370},[97,49287,33333],{"class":103},[97,49289,49290],{"class":99,"line":33551},[97,49291,2591],{"emptyLinePlaceholder":249},[97,49293,49294],{"class":99,"line":33562},[97,49295,33391],{"class":191},[97,49297,49298,49300,49302,49304,49306,49308,49310],{"class":99,"line":33568},[97,49299,2688],{"class":319},[97,49301,33399],{"class":103},[97,49303,852],{"class":319},[97,49305,537],{"class":370},[97,49307,1259],{"class":103},[97,49309,1279],{"class":319},[97,49311,33410],{"class":103},[97,49313,49314],{"class":99,"line":33574},[97,49315,33416],{"class":191},[97,49317,49318,49320,49322,49324,49326,49328,49330],{"class":99,"line":33580},[97,49319,33422],{"class":103},[97,49321,362],{"class":370},[97,49323,115],{"class":319},[97,49325,33429],{"class":103},[97,49327,852],{"class":319},[97,49329,537],{"class":370},[97,49331,33436],{"class":103},[97,49333,49334],{"class":99,"line":33598},[97,49335,33442],{"class":191},[97,49337,49338],{"class":99,"line":33612},[97,49339,33448],{"class":191},[97,49341,49342,49344,49346],{"class":99,"line":33621},[97,49343,33454],{"class":103},[97,49345,115],{"class":319},[97,49347,32504],{"class":103},[97,49349,49350],{"class":99,"line":33630},[97,49351,2591],{"emptyLinePlaceholder":249},[97,49353,49354],{"class":99,"line":33639},[97,49355,33469],{"class":191},[97,49357,49358,49360,49362,49364,49366],{"class":99,"line":33648},[97,49359,33475],{"class":103},[97,49361,115],{"class":319},[97,49363,33480],{"class":103},[97,49365,852],{"class":319},[97,49367,33485],{"class":103},[97,49369,49370,49372,49374,49376,49378,49380,49382,49384,49386,49388,49390,49392,49394,49396,49398,49400,49402,49404],{"class":99,"line":33654},[97,49371,32641],{"class":370},[97,49373,323],{"class":103},[97,49375,33495],{"class":118},[97,49377,1216],{"class":370},[97,49379,33500],{"class":319},[97,49381,1265],{"class":370},[97,49383,864],{"class":118},[97,49385,1216],{"class":370},[97,49387,33500],{"class":319},[97,49389,1265],{"class":370},[97,49391,33513],{"class":118},[97,49393,33516],{"class":103},[97,49395,33519],{"class":319},[97,49397,1227],{"class":370},[97,49399,33524],{"class":103},[97,49401,648],{"class":319},[97,49403,1227],{"class":370},[97,49405,30687],{"class":103},[97,49407,49408],{"class":99,"line":33660},[97,49409,36923],{"class":191},[97,49411,49412],{"class":99,"line":33668},[97,49413,36928],{"class":191},[97,49415,49416,49418,49420],{"class":99,"line":33673},[97,49417,36933],{"class":103},[97,49419,33557],{"class":118},[97,49421,329],{"class":103},[97,49423,49424],{"class":99,"line":33679},[97,49425,33577],{"class":191},[97,49427,49428,49430,49432,49434,49436,49438],{"class":99,"line":33690},[97,49429,33583],{"class":103},[97,49431,115],{"class":319},[97,49433,33588],{"class":103},[97,49435,33591],{"class":5407},[97,49437,115],{"class":319},[97,49439,1738],{"class":103},[97,49441,49442,49444,49446,49448],{"class":99,"line":33696},[97,49443,33601],{"class":118},[97,49445,1179],{"class":103},[97,49447,33606],{"class":370},[97,49449,33609],{"class":103},[97,49451,49452,49454],{"class":99,"line":33716},[97,49453,33615],{"class":118},[97,49455,33618],{"class":103},[97,49457,49458,49460],{"class":99,"line":33722},[97,49459,33624],{"class":118},[97,49461,33627],{"class":103},[97,49463,49464,49466],{"class":99,"line":33728},[97,49465,33633],{"class":118},[97,49467,33636],{"class":103},[97,49469,49470,49472],{"class":99,"line":33734},[97,49471,33642],{"class":118},[97,49473,33645],{"class":103},[97,49475,49476],{"class":99,"line":33751},[97,49477,33651],{"class":103},[97,49479,49480],{"class":99,"line":33757},[97,49481,33657],{"class":191},[97,49483,49484,49486],{"class":99,"line":33763},[97,49485,4281],{"class":319},[97,49487,33665],{"class":103},[97,49489,49490],{"class":99,"line":33769},[97,49491,2591],{"emptyLinePlaceholder":249},[97,49493,49494],{"class":99,"line":33775},[97,49495,33676],{"class":191},[97,49497,49498,49500,49502],{"class":99,"line":33781},[97,49499,32137],{"class":319},[97,49501,33684],{"class":111},[97,49503,33687],{"class":103},[97,49505,49506],{"class":99,"line":33808},[97,49507,33693],{"class":191},[97,49509,49510,49512,49514,49516,49518,49520,49522,49524],{"class":99,"line":33832},[97,49511,33699],{"class":103},[97,49513,31883],{"class":5407},[97,49515,115],{"class":319},[97,49517,323],{"class":103},[97,49519,818],{"class":370},[97,49521,698],{"class":103},[97,49523,613],{"class":370},[97,49525,30687],{"class":103},[97,49527,49528],{"class":99,"line":33838},[97,49529,33719],{"class":191},[97,49531,49532],{"class":99,"line":33844},[97,49533,33725],{"class":191},[97,49535,49536],{"class":99,"line":33850},[97,49537,33731],{"class":191},[97,49539,49540,49542,49544,49546,49548,49550,49552],{"class":99,"line":33861},[97,49541,31917],{"class":103},[97,49543,537],{"class":370},[97,49545,698],{"class":103},[97,49547,398],{"class":370},[97,49549,698],{"class":103},[97,49551,537],{"class":370},[97,49553,329],{"class":103},[97,49555,49556],{"class":99,"line":33872},[97,49557,33754],{"class":191},[97,49559,49560],{"class":99,"line":33878},[97,49561,33760],{"class":191},[97,49563,49564],{"class":99,"line":33895},[97,49565,33766],{"class":191},[97,49567,49568],{"class":99,"line":33918},[97,49569,33772],{"class":191},[97,49571,49572],{"class":99,"line":33941},[97,49573,33778],{"class":191},[97,49575,49576,49578,49580,49582,49584,49586,49588,49590,49592],{"class":99,"line":33947},[97,49577,33784],{"class":103},[97,49579,33787],{"class":118},[97,49581,33790],{"class":103},[97,49583,33793],{"class":118},[97,49585,698],{"class":103},[97,49587,33798],{"class":5407},[97,49589,115],{"class":319},[97,49591,33803],{"class":118},[97,49593,329],{"class":103},[97,49595,49596,49598,49600,49602,49604,49606,49608,49610,49612],{"class":99,"line":33952},[97,49597,33784],{"class":103},[97,49599,33787],{"class":118},[97,49601,33815],{"class":103},[97,49603,33818],{"class":118},[97,49605,698],{"class":103},[97,49607,33798],{"class":5407},[97,49609,115],{"class":319},[97,49611,33827],{"class":118},[97,49613,329],{"class":103},[97,49615,49616],{"class":99,"line":33961},[97,49617,33835],{"class":191},[97,49619,49620],{"class":99,"line":33971},[97,49621,33841],{"class":103},[97,49623,49624],{"class":99,"line":33977},[97,49625,33847],{"class":191},[97,49627,49628,49630,49632],{"class":99,"line":33982},[97,49629,33853],{"class":103},[97,49631,33856],{"class":118},[97,49633,329],{"class":103},[97,49635,49636,49638,49640],{"class":99,"line":33988},[97,49637,33864],{"class":103},[97,49639,33867],{"class":118},[97,49641,329],{"class":103},[97,49643,49644],{"class":99,"line":34001},[97,49645,33875],{"class":191},[97,49647,49648,49650,49652,49654,49656,49658,49660],{"class":99,"line":34007},[97,49649,31917],{"class":103},[97,49651,537],{"class":370},[97,49653,698],{"class":103},[97,49655,398],{"class":370},[97,49657,698],{"class":103},[97,49659,398],{"class":370},[97,49661,329],{"class":103},[97,49663,49664,49666,49668,49670,49672,49674,49676,49678,49680],{"class":99,"line":34018},[97,49665,33784],{"class":103},[97,49667,33787],{"class":118},[97,49669,33902],{"class":103},[97,49671,33793],{"class":118},[97,49673,698],{"class":103},[97,49675,33798],{"class":5407},[97,49677,115],{"class":319},[97,49679,33913],{"class":118},[97,49681,329],{"class":103},[97,49683,49684,49686,49688,49690,49692,49694,49696,49698,49700],{"class":99,"line":34029},[97,49685,33784],{"class":103},[97,49687,33787],{"class":118},[97,49689,33925],{"class":103},[97,49691,33818],{"class":118},[97,49693,698],{"class":103},[97,49695,33798],{"class":5407},[97,49697,115],{"class":319},[97,49699,33936],{"class":118},[97,49701,329],{"class":103},[97,49703,49704],{"class":99,"line":34048},[97,49705,33944],{"class":191},[97,49707,49709],{"class":99,"line":49708},219,[97,49710,33841],{"class":103},[97,49712,49714,49716,49718],{"class":99,"line":49713},220,[97,49715,33853],{"class":103},[97,49717,33787],{"class":118},[97,49719,329],{"class":103},[97,49721,49723,49725,49727],{"class":99,"line":49722},221,[97,49724,33864],{"class":103},[97,49726,33966],{"class":118},[97,49728,329],{"class":103},[97,49730,49732],{"class":99,"line":49731},222,[97,49733,33974],{"class":103},[97,49735,49737],{"class":99,"line":49736},223,[97,49738,2591],{"emptyLinePlaceholder":249},[97,49740,49742],{"class":99,"line":49741},224,[97,49743,33985],{"class":191},[97,49745,49747,49749,49751,49753,49755],{"class":99,"line":49746},225,[97,49748,1723],{"class":319},[97,49750,31410],{"class":370},[97,49752,3140],{"class":319},[97,49754,31415],{"class":118},[97,49756,3930],{"class":103},[97,49758,49760],{"class":99,"line":49759},226,[97,49761,34004],{"class":191},[97,49763,49765,49767,49769],{"class":99,"line":49764},227,[97,49766,44736],{"class":103},[97,49768,115],{"class":319},[97,49770,44741],{"class":103},[97,49772,49774,49776,49778],{"class":99,"line":49773},228,[97,49775,34021],{"class":103},[97,49777,115],{"class":319},[97,49779,34026],{"class":103},[97,49781,49783,49785,49787,49789,49791,49793,49795],{"class":99,"line":49782},229,[97,49784,33583],{"class":103},[97,49786,115],{"class":319},[97,49788,44758],{"class":103},[97,49790,34039],{"class":5407},[97,49792,115],{"class":319},[97,49794,1227],{"class":370},[97,49796,329],{"class":103},[97,49798,49800],{"class":99,"line":49799},230,[97,49801,34051],{"class":103},[160,49803,49805],{"id":49804},"_242测试代码","2.4.2.测试代码",[24,49807,49808],{},"使用测试集进行测试与推理",[87,49810,49812],{"className":30568,"code":49811,"language":30570,"meta":92,"style":92},"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",[94,49813,49814,49820,49830,49840,49851,49861,49865,49869,49877,49882,49886,49903,49907,49911,49915,49919,49923,49955,49959,49967,49971,49983,49987,49991,49995,49999,50003,50007,50011,50015,50033,50047,50051,50061,50071,50081,50087,50091,50095,50103,50107,50123,50131,50135,50139,50147,50155,50159,50163,50167,50171,50177,50181,50191,50199,50207,50211,50215,50219,50227,50231,50247,50251,50255,50259,50271,50275,50287,50291,50295,50307,50311,50321,50325,50329,50341,50345,50353,50357,50361,50369,50373,50381,50385,50389,50393,50397,50401,50417,50425,50429,50433,50451,50457,50461,50471,50479,50487,50491,50495,50499,50503,50511,50515,50531,50535,50543,50551],{"__ignoreMap":92},[97,49815,49816,49818],{"class":99,"line":100},[97,49817,30582],{"class":319},[97,49819,30585],{"class":103},[97,49821,49822,49824,49826,49828],{"class":99,"line":195},[97,49823,30582],{"class":319},[97,49825,31605],{"class":103},[97,49827,31573],{"class":319},[97,49829,31610],{"class":103},[97,49831,49832,49834,49836,49838],{"class":99,"line":241},[97,49833,30927],{"class":319},[97,49835,31588],{"class":103},[97,49837,30582],{"class":319},[97,49839,31593],{"class":103},[97,49841,49842,49844,49846,49848],{"class":99,"line":1387},[97,49843,30927],{"class":319},[97,49845,31558],{"class":103},[97,49847,30582],{"class":319},[97,49849,49850],{"class":103}," ImageFolder\n",[97,49852,49853,49855,49857,49859],{"class":99,"line":1393},[97,49854,30927],{"class":319},[97,49856,32104],{"class":103},[97,49858,30582],{"class":319},[97,49860,44830],{"class":103},[97,49862,49863],{"class":99,"line":1407},[97,49864,2591],{"emptyLinePlaceholder":249},[97,49866,49867],{"class":99,"line":1413},[97,49868,34141],{"class":191},[97,49870,49871,49873,49875],{"class":99,"line":1504},[97,49872,32137],{"class":319},[97,49874,34148],{"class":111},[97,49876,32143],{"class":103},[97,49878,49879],{"class":99,"line":1510},[97,49880,49881],{"class":191},"   # 导入自己的数据集，并进行数据处理\n",[97,49883,49884],{"class":99,"line":1522},[97,49885,48151],{"class":191},[97,49887,49888,49890,49892,49894,49896,49898,49901],{"class":99,"line":1804},[97,49889,48156],{"class":370},[97,49891,115],{"class":319},[97,49893,990],{"class":319},[97,49895,571],{"class":118},[97,49897,878],{"class":370},[97,49899,49900],{"class":48167},"\u002Fdata\u002Ftest",[97,49902,25323],{"class":118},[97,49904,49905],{"class":99,"line":1809},[97,49906,2591],{"emptyLinePlaceholder":249},[97,49908,49909],{"class":99,"line":1815},[97,49910,48179],{"class":191},[97,49912,49913],{"class":99,"line":1820},[97,49914,48184],{"class":191},[97,49916,49917],{"class":99,"line":1834},[97,49918,48189],{"class":191},[97,49920,49921],{"class":99,"line":1839},[97,49922,48194],{"class":191},[97,49924,49925,49927,49929,49931,49933,49935,49937,49939,49941,49943,49945,49947,49949,49951,49953],{"class":99,"line":1845},[97,49926,48199],{"class":103},[97,49928,115],{"class":319},[97,49930,48204],{"class":103},[97,49932,48207],{"class":370},[97,49934,698],{"class":103},[97,49936,48212],{"class":370},[97,49938,698],{"class":103},[97,49940,48217],{"class":370},[97,49942,48220],{"class":103},[97,49944,48223],{"class":370},[97,49946,698],{"class":103},[97,49948,48228],{"class":370},[97,49950,698],{"class":103},[97,49952,48233],{"class":370},[97,49954,4848],{"class":103},[97,49956,49957],{"class":99,"line":1866},[97,49958,48240],{"class":191},[97,49960,49961,49963,49965],{"class":99,"line":1871},[97,49962,48245],{"class":103},[97,49964,115],{"class":319},[97,49966,48250],{"class":103},[97,49968,49969],{"class":99,"line":1885},[97,49970,48255],{"class":191},[97,49972,49973,49975,49977,49979,49981],{"class":99,"line":1890},[97,49974,48260],{"class":103},[97,49976,31691],{"class":370},[97,49978,698],{"class":103},[97,49980,31691],{"class":370},[97,49982,42812],{"class":103},[97,49984,49985],{"class":99,"line":1919},[97,49986,48273],{"class":191},[97,49988,49989],{"class":99,"line":1924},[97,49990,48278],{"class":103},[97,49992,49993],{"class":99,"line":1941},[97,49994,48283],{"class":103},[97,49996,49997],{"class":99,"line":1946},[97,49998,48288],{"class":191},[97,50000,50001],{"class":99,"line":1951},[97,50002,48293],{"class":191},[97,50004,50005],{"class":99,"line":1956},[97,50006,2591],{"emptyLinePlaceholder":249},[97,50008,50009],{"class":99,"line":1970},[97,50010,48302],{"class":191},[97,50012,50013],{"class":99,"line":1975},[97,50014,48307],{"class":191},[97,50016,50017,50019,50021,50023,50025,50027,50029,50031],{"class":99,"line":2768},[97,50018,34155],{"class":103},[97,50020,115],{"class":319},[97,50022,48316],{"class":103},[97,50024,48319],{"class":370},[97,50026,698],{"class":103},[97,50028,48324],{"class":5407},[97,50030,115],{"class":319},[97,50032,48329],{"class":103},[97,50034,50035,50037,50039,50041,50043,50045],{"class":99,"line":2782},[97,50036,34212],{"class":103},[97,50038,115],{"class":319},[97,50040,31724],{"class":103},[97,50042,31727],{"class":5407},[97,50044,115],{"class":319},[97,50046,34223],{"class":103},[97,50048,50049],{"class":99,"line":2790},[97,50050,34228],{"class":191},[97,50052,50053,50055,50057,50059],{"class":99,"line":2795},[97,50054,34233],{"class":5407},[97,50056,115],{"class":319},[97,50058,537],{"class":370},[97,50060,31656],{"class":103},[97,50062,50063,50065,50067,50069],{"class":99,"line":2801},[97,50064,34244],{"class":5407},[97,50066,115],{"class":319},[97,50068,31666],{"class":370},[97,50070,31656],{"class":103},[97,50072,50073,50075,50077,50079],{"class":99,"line":2807},[97,50074,34255],{"class":5407},[97,50076,115],{"class":319},[97,50078,511],{"class":370},[97,50080,329],{"class":103},[97,50082,50083,50085],{"class":99,"line":2812},[97,50084,4281],{"class":319},[97,50086,34268],{"class":103},[97,50088,50089],{"class":99,"line":8139},[97,50090,2591],{"emptyLinePlaceholder":249},[97,50092,50093],{"class":99,"line":8163},[97,50094,34277],{"class":191},[97,50096,50097,50099,50101],{"class":99,"line":8168},[97,50098,32137],{"class":319},[97,50100,34284],{"class":111},[97,50102,34287],{"class":103},[97,50104,50105],{"class":99,"line":8174},[97,50106,34292],{"class":191},[97,50108,50109,50111,50113,50115,50117,50119,50121],{"class":99,"line":8201},[97,50110,31427],{"class":103},[97,50112,115],{"class":319},[97,50114,31434],{"class":118},[97,50116,1896],{"class":319},[97,50118,31439],{"class":103},[97,50120,1893],{"class":319},[97,50122,34309],{"class":118},[97,50124,50125,50127,50129],{"class":99,"line":8206},[97,50126,31479],{"class":103},[97,50128,115],{"class":319},[97,50130,32479],{"class":103},[97,50132,50133],{"class":99,"line":8212},[97,50134,2591],{"emptyLinePlaceholder":249},[97,50136,50137],{"class":99,"line":8224},[97,50138,34326],{"class":191},[97,50140,50141,50143,50145],{"class":99,"line":8236},[97,50142,34331],{"class":103},[97,50144,115],{"class":319},[97,50146,32532],{"class":370},[97,50148,50149,50151,50153],{"class":99,"line":8248},[97,50150,34340],{"class":103},[97,50152,115],{"class":319},[97,50154,3276],{"class":370},[97,50156,50157],{"class":99,"line":9907},[97,50158,2591],{"emptyLinePlaceholder":249},[97,50160,50161],{"class":99,"line":9932},[97,50162,34353],{"class":191},[97,50164,50165],{"class":99,"line":9955},[97,50166,34358],{"class":191},[97,50168,50169],{"class":99,"line":9979},[97,50170,34363],{"class":191},[97,50172,50173,50175],{"class":99,"line":9984},[97,50174,34368],{"class":319},[97,50176,33074],{"class":103},[97,50178,50179],{"class":99,"line":9989},[97,50180,34375],{"class":191},[97,50182,50183,50185,50187,50189],{"class":99,"line":9994},[97,50184,3594],{"class":319},[97,50186,34382],{"class":103},[97,50188,26233],{"class":319},[97,50190,34387],{"class":103},[97,50192,50193,50195,50197],{"class":99,"line":10003},[97,50194,34392],{"class":103},[97,50196,115],{"class":319},[97,50198,34397],{"class":103},[97,50200,50201,50203,50205],{"class":99,"line":10008},[97,50202,34402],{"class":103},[97,50204,115],{"class":319},[97,50206,34407],{"class":103},[97,50208,50209],{"class":99,"line":10014},[97,50210,34412],{"class":191},[97,50212,50213],{"class":99,"line":10035},[97,50214,33065],{"class":103},[97,50216,50217],{"class":99,"line":10041},[97,50218,34421],{"class":191},[97,50220,50221,50223,50225],{"class":99,"line":10055},[97,50222,32850],{"class":103},[97,50224,115],{"class":319},[97,50226,34430],{"class":103},[97,50228,50229],{"class":99,"line":10061},[97,50230,34435],{"class":191},[97,50232,50233,50235,50237,50239,50241,50243,50245],{"class":99,"line":10088},[97,50234,32867],{"class":103},[97,50236,115],{"class":319},[97,50238,32872],{"class":103},[97,50240,32875],{"class":5407},[97,50242,115],{"class":319},[97,50244,537],{"class":370},[97,50246,329],{"class":103},[97,50248,50249],{"class":99,"line":10097},[97,50250,34456],{"class":191},[97,50252,50253],{"class":99,"line":10103},[97,50254,34461],{"class":191},[97,50256,50257],{"class":99,"line":10111},[97,50258,34466],{"class":191},[97,50260,50261,50263,50265,50267,50269],{"class":99,"line":10116},[97,50262,34471],{"class":103},[97,50264,9668],{"class":319},[97,50266,32977],{"class":103},[97,50268,3140],{"class":319},[97,50270,34480],{"class":103},[97,50272,50273],{"class":99,"line":16794},[97,50274,34485],{"class":191},[97,50276,50277,50279,50281,50283,50285],{"class":99,"line":16800},[97,50278,34490],{"class":103},[97,50280,9668],{"class":319},[97,50282,34495],{"class":103},[97,50284,511],{"class":370},[97,50286,329],{"class":103},[97,50288,50289],{"class":99,"line":16823},[97,50290,2591],{"emptyLinePlaceholder":249},[97,50292,50293],{"class":99,"line":16829},[97,50294,34508],{"class":191},[97,50296,50297,50299,50301,50303,50305],{"class":99,"line":16852},[97,50298,34513],{"class":103},[97,50300,115],{"class":319},[97,50302,34518],{"class":103},[97,50304,904],{"class":319},[97,50306,34523],{"class":103},[97,50308,50309],{"class":99,"line":16866},[97,50310,34528],{"class":191},[97,50312,50313,50315,50317,50319],{"class":99,"line":16886},[97,50314,32641],{"class":370},[97,50316,323],{"class":103},[97,50318,34537],{"class":118},[97,50320,34540],{"class":103},[97,50322,50323],{"class":99,"line":16892},[97,50324,2591],{"emptyLinePlaceholder":249},[97,50326,50327],{"class":99,"line":16903},[97,50328,34549],{"class":191},[97,50330,50331,50333,50335,50337,50339],{"class":99,"line":16926},[97,50332,1723],{"class":319},[97,50334,31410],{"class":370},[97,50336,3140],{"class":319},[97,50338,31415],{"class":118},[97,50340,3930],{"class":103},[97,50342,50343],{"class":99,"line":16948},[97,50344,34566],{"class":191},[97,50346,50347,50349,50351],{"class":99,"line":16953},[97,50348,31479],{"class":103},[97,50350,115],{"class":319},[97,50352,44741],{"class":103},[97,50354,50355],{"class":99,"line":16959},[97,50356,34579],{"class":191},[97,50358,50359],{"class":99,"line":16973},[97,50360,34584],{"class":191},[97,50362,50363,50365,50367],{"class":99,"line":16986},[97,50364,34589],{"class":103},[97,50366,34592],{"class":118},[97,50368,30687],{"class":103},[97,50370,50371],{"class":99,"line":16991},[97,50372,34599],{"class":191},[97,50374,50375,50377,50379],{"class":99,"line":17005},[97,50376,34212],{"class":103},[97,50378,115],{"class":319},[97,50380,34608],{"class":103},[97,50382,50383],{"class":99,"line":17010},[97,50384,34613],{"class":191},[97,50386,50387],{"class":99,"line":17016},[97,50388,34618],{"class":103},[97,50390,50391],{"class":99,"line":17021},[97,50392,2591],{"emptyLinePlaceholder":249},[97,50394,50395],{"class":99,"line":17035},[97,50396,34627],{"class":191},[97,50398,50399],{"class":99,"line":17040},[97,50400,34632],{"class":191},[97,50402,50403,50405,50407,50409,50411,50413,50415],{"class":99,"line":17045},[97,50404,31427],{"class":103},[97,50406,115],{"class":319},[97,50408,31434],{"class":118},[97,50410,1896],{"class":319},[97,50412,31439],{"class":103},[97,50414,1893],{"class":319},[97,50416,34309],{"class":118},[97,50418,50419,50421,50423],{"class":99,"line":17059},[97,50420,31479],{"class":103},[97,50422,115],{"class":319},[97,50424,32479],{"class":103},[97,50426,50427],{"class":99,"line":17071},[97,50428,34661],{"class":191},[97,50430,50431],{"class":99,"line":17076},[97,50432,34666],{"class":191},[97,50434,50435,50437,50439,50441,50444,50446,50449],{"class":99,"line":17089},[97,50436,34671],{"class":103},[97,50438,115],{"class":319},[97,50440,1210],{"class":103},[97,50442,50443],{"class":118},"'猫'",[97,50445,698],{"class":103},[97,50447,50448],{"class":118},"'狗'",[97,50450,33436],{"class":103},[97,50452,50453,50455],{"class":99,"line":17094},[97,50454,34368],{"class":319},[97,50456,33074],{"class":103},[97,50458,50459],{"class":99,"line":17099},[97,50460,34736],{"class":191},[97,50462,50463,50465,50467,50469],{"class":99,"line":17104},[97,50464,3594],{"class":319},[97,50466,34743],{"class":103},[97,50468,26233],{"class":319},[97,50470,34387],{"class":103},[97,50472,50473,50475,50477],{"class":99,"line":17117},[97,50474,32800],{"class":103},[97,50476,115],{"class":319},[97,50478,32805],{"class":103},[97,50480,50481,50483,50485],{"class":99,"line":17122},[97,50482,32815],{"class":103},[97,50484,115],{"class":319},[97,50486,32820],{"class":103},[97,50488,50489],{"class":99,"line":32823},[97,50490,2591],{"emptyLinePlaceholder":249},[97,50492,50493],{"class":99,"line":32829},[97,50494,34772],{"class":191},[97,50496,50497],{"class":99,"line":32835},[97,50498,33065],{"class":103},[97,50500,50501],{"class":99,"line":32841},[97,50502,34781],{"class":191},[97,50504,50505,50507,50509],{"class":99,"line":32847},[97,50506,32850],{"class":103},[97,50508,115],{"class":319},[97,50510,32855],{"class":103},[97,50512,50513],{"class":99,"line":32858},[97,50514,34794],{"class":191},[97,50516,50517,50519,50521,50523,50525,50527,50529],{"class":99,"line":32864},[97,50518,32867],{"class":103},[97,50520,115],{"class":319},[97,50522,32872],{"class":103},[97,50524,32875],{"class":5407},[97,50526,115],{"class":319},[97,50528,537],{"class":370},[97,50530,329],{"class":103},[97,50532,50533],{"class":99,"line":32884},[97,50534,34815],{"class":191},[97,50536,50537,50539,50541],{"class":99,"line":32890},[97,50538,34820],{"class":103},[97,50540,115],{"class":319},[97,50542,34825],{"class":103},[97,50544,50545,50547,50549],{"class":99,"line":32901},[97,50546,34830],{"class":103},[97,50548,115],{"class":319},[97,50550,34835],{"class":103},[97,50552,50553,50555,50557,50559,50561,50563,50565,50567],{"class":99,"line":32907},[97,50554,34840],{"class":370},[97,50556,323],{"class":103},[97,50558,34845],{"class":118},[97,50560,34848],{"class":103},[97,50562,34851],{"class":118},[97,50564,698],{"class":103},[97,50566,34856],{"class":118},[97,50568,34859],{"class":103},[231,50570,50571],{},"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":92,"searchDepth":195,"depth":195,"links":50573},[50574,50575,50576,50577],{"id":30781,"depth":241,"text":30782},{"id":38029,"depth":241,"text":38030},{"id":41462,"depth":241,"text":41463},{"id":45471,"depth":241,"text":45472},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30773,"description":246},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50584,"title":50585,"body":50586,"description":246,"extension":247,"meta":50593,"navigation":249,"path":50594,"seo":50595,"stem":50596,"__hash__":50597},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50587,"toc":50591},[50588],[10,50589,50585],{"id":50590},"_3yolo模型学习",{"title":92,"searchDepth":195,"depth":195,"links":50592},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50585,"description":246},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50599,"title":50600,"body":50601,"description":50608,"extension":247,"meta":50609,"navigation":249,"path":50611,"seo":50612,"stem":50613,"__hash__":50614},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50602,"toc":50606},[50603],[24,50604,50605],{},"yolo模型还未补充",{"title":92,"searchDepth":195,"depth":195,"links":50607},[],"深度学习学习",{"category":50610},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50600,"description":50608},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50616,"title":50617,"body":50618,"description":246,"extension":247,"meta":50643,"navigation":249,"path":50644,"seo":50645,"stem":50646,"__hash__":50647},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50619,"toc":50641},[50620,50623,50626,50631,50638],[10,50621,50617],{"id":50622},"_1工具",[24,50624,50625],{},"提示错误插件：有问题会提前报错",[24,50627,50628],{},[19,50629],{"alt":92,"src":50630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[24,50632,50633],{},[558,50634,50637],{"href":50635,"rel":50636},"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",[24054],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[24,50639,50640],{},"alt键加上下箭头可以实现语句的移动",{"title":92,"searchDepth":195,"depth":195,"links":50642},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50617,"description":246},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50649,"title":50650,"body":50651,"description":246,"extension":247,"meta":53509,"navigation":249,"path":53510,"seo":53511,"stem":53512,"__hash__":53513},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50652,"toc":53460},[50653,50656,50660,50664,50669,50672,50677,50681,50688,50693,50700,50705,50712,50717,50721,50726,50729,50733,50738,50742,50747,50750,50753,50756,50759,50762,50765,50768,50771,50776,50781,50786,50790,50793,50796,50800,50805,50808,50816,50821,50838,50846,50851,50856,50861,50866,50871,50874,50879,50884,50888,50897,50902,50907,50911,50916,50919,50923,50928,50936,50941,50946,50949,50954,50959,50964,50967,50970,50973,50978,50983,50986,50991,50994,50999,51002,51005,51008,51013,51016,51019,51034,51039,51044,51049,51052,51055,51058,51072,51075,51080,51085,51088,51091,51094,51097,51100,51103,51106,51110,51114,51119,51123,51126,51131,51136,51139,51144,51147,51151,51156,51159,51162,51165,51168,51171,51174,51177,51180,51183,51187,51192,51197,51202,51205,51208,51212,51217,51220,51224,51227,51230,51235,51238,51241,51245,51249,51252,51257,51262,51265,51294,51299,51304,51309,51314,51318,51323,51327,51332,51335,51339,51343,51348,51352,51357,51362,51366,51371,51374,51376,51379,51384,51388,51393,51397,51401,51406,51411,51416,51421,51425,51430,51435,51440,51443,51446,51451,51454,51459,51464,51469,51474,51478,52279,52283,52626,52631,52634,52637,52640,52643,52646,52649,52652,52655,52657,52660,52662,52665,52669,52674,52677,52680,52683,52687,52692,52697,52717,52720,52724,52729,52734,52751,52755,52784,52788,52810,52812,52851,52859,52865,52869,52872,52875,52880,52885,52888,52891,52894,52899,52904,52907,52910,52913,52916,52919,52922,52925,52928,52931,52934,52937,52939,52942,52945,52948,52951,52954,52957,52960,52963,52967,52972,52975,52980,52983,52986,52989,52992,52995,52998,53001,53003,53006,53009,53012,53015,53018,53021,53025,53028,53037,53040,53045,53048,53053,53056,53059,53062,53065,53068,53071,53074,53078,53082,53085,53088,53093,53098,53103,53107,53112,53117,53120,53123,53126,53129,53132,53137,53140,53145,53147,53152,53155,53159,53164,53167,53170,53175,53179,53182,53187,53190,53193,53222,53227,53230,53233,53236,53239,53242,53246,53249,53335,53339,53342,53347,53352,53359,53362,53365,53368,53371,53374,53379,53384,53387,53390,53393,53396,53399,53402,53405,53408,53411,53413,53416,53420,53425,53430,53435,53438,53443,53448,53451,53454,53457],[10,50654,50650],{"id":50655},"_2基础语法",[14,50657,50659],{"id":50658},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[48,50661,50663],{"id":50662},"_211-js组成","2.1.1 js组成",[138,50665,50666],{},[70,50667,50668],{},"js是编程语言，html和css不是编程语言，是标记语言",[24,50670,50671],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[138,50673,50674],{"start":195},[70,50675,50676],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[48,50678,50680],{"id":50679},"_212-js书写位置","2.1.2 js书写位置",[138,50682,50683],{},[70,50684,50685],{},[469,50686,50687],{},"内部 JavaScript",[24,50689,50690],{},[19,50691],{"alt":92,"src":50692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[138,50694,50695],{"start":195},[70,50696,50697],{},[469,50698,50699],{},"外部 JavaScript",[24,50701,50702],{},[19,50703],{"alt":92,"src":50704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[138,50706,50707],{"start":241},[70,50708,50709],{},[469,50710,50711],{},"内联 JavaScript",[24,50713,50714],{},[19,50715],{"alt":92,"src":50716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[48,50718,50720],{"id":50719},"_213-javascript注释","2.1.3 JavaScript注释",[24,50722,50723],{},[19,50724],{"alt":92,"src":50725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[24,50727,50728],{},"alt+shift+a一定要记住！",[48,50730,50732],{"id":50731},"_214-javascript结束符","2.1.4 JavaScript结束符",[24,50734,50735],{},[19,50736],{"alt":92,"src":50737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[48,50739,50741],{"id":50740},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[138,50743,50744],{},[70,50745,50746],{},"输出语法：",[24,50748,50749],{},"①document.write('要出的内容')",[24,50751,50752],{},"向body内输出内容；",[24,50754,50755],{},"如果输出的内容写的是标签，也会被解析cheng",[24,50757,50758],{},"②alert('要出的内容')",[24,50760,50761],{},"页面弹出警告对话框",[24,50763,50764],{},"③console.log('控制台打印')",[24,50766,50767],{},"控制台输出语法，程序员调试使用",[24,50769,50770],{},"输入log就行，自动生成：",[24,50772,50773],{},[19,50774],{"alt":92,"src":50775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[138,50777,50778],{"start":195},[70,50779,50780],{},"输入语法：",[24,50782,50783],{},[19,50784],{"alt":92,"src":50785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[48,50787,50789],{"id":50788},"_2116-字面量","21.1.6 字面量",[24,50791,50792],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[24,50794,50795],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50797,50799],{"id":50798},"_22-变量","2.2 变量",[138,50801,50802],{},[70,50803,50804],{},"变量声明",[24,50806,50807],{},"let 变量名",[67,50809,50810,50813],{},[70,50811,50812],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[70,50814,50815],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[138,50817,50818],{"start":195},[70,50819,50820],{},"变量赋值",[87,50822,50826],{"className":50823,"code":50824,"language":50825,"meta":92,"style":92},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[94,50827,50828,50833],{"__ignoreMap":92},[97,50829,50830],{"class":99,"line":100},[97,50831,50832],{"class":103},"let age\n",[97,50834,50835],{"class":99,"line":195},[97,50836,50837],{"class":103},"age=18\n",[138,50839,50840,50843],{"start":241},[70,50841,50842],{},"连这些（变量的初始化）：let age=18",[70,50844,50845],{},"更新变量",[24,50847,50848],{},[19,50849],{"alt":92,"src":50850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[138,50852,50853],{"start":1393},[70,50854,50855],{},"声明多个变量",[24,50857,50858],{},[19,50859],{"alt":92,"src":50860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[138,50862,50863],{"start":1407},[70,50864,50865],{},"变量命名规则与规范",[24,50867,50868],{},[19,50869],{"alt":92,"src":50870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[24,50872,50873],{},"遵守小驼峰！",[138,50875,50876],{"start":1413},[70,50877,50878],{},"变量拓展-let和var的区别",[24,50880,50881],{},[19,50882],{"alt":92,"src":50883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50885,50887],{"id":50886},"_23-数组","2.3 数组",[87,50889,50891],{"className":50823,"code":50890,"language":50825,"meta":92,"style":92},"let arr = []\n",[94,50892,50893],{"__ignoreMap":92},[97,50894,50895],{"class":99,"line":100},[97,50896,50890],{"class":103},[24,50898,50899],{},[19,50900],{"alt":92,"src":50901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[24,50903,50904],{},[19,50905],{"alt":92,"src":50906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50908,50910],{"id":50909},"_24-常量","2.4 常量",[24,50912,50913],{},[19,50914],{"alt":92,"src":50915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[24,50917,50918],{},"const — 类似于 let ，但是变量的值无法被修改",[14,50920,50922],{"id":50921},"_25-数据类型","2.5 数据类型",[24,50924,50925],{},[19,50926],{"alt":92,"src":50927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[138,50929,50930,50933],{},[70,50931,50932],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[70,50934,50935],{},"算数运算符：",[24,50937,50938],{},[19,50939],{"alt":92,"src":50940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[138,50942,50943],{"start":241},[70,50944,50945],{},"数字类型（Number）",[24,50947,50948],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[24,50950,50951],{},[19,50952],{"alt":92,"src":50953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[138,50955,50956],{"start":1387},[70,50957,50958],{},"字符串类型（string）",[24,50960,50961],{},[19,50962],{"alt":92,"src":50963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[24,50965,50966],{},"反引号也是可以使用的",[24,50968,50969],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[24,50971,50972],{},"例如：document.write(\"我今年\"+age+\"岁\")",[138,50974,50975],{"start":1393},[70,50976,50977],{},"模板字符串",[24,50979,50980],{},[19,50981],{"alt":92,"src":50982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[24,50984,50985],{},"类似于python的字符串格式化",[138,50987,50988],{"start":1407},[70,50989,50990],{},"布尔类型",[24,50992,50993],{},"true 和 false",[138,50995,50996],{"start":1413},[70,50997,50998],{},"未定义类型（underfined）",[24,51000,51001],{},"表示没有赋值",[24,51003,51004],{},"未定义类型是比较特殊的类型，只有一个值undefined",[24,51006,51007],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[138,51009,51010],{"start":1504},[70,51011,51012],{},"null（空类型）",[24,51014,51015],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[24,51017,51018],{},"赋值了，但是内容为空",[87,51020,51022],{"className":50823,"code":51021,"language":50825,"meta":92,"style":92},"typeof null\n输出的是'object'，是一个对象数据类型\n",[94,51023,51024,51029],{"__ignoreMap":92},[97,51025,51026],{"class":99,"line":100},[97,51027,51028],{"class":103},"typeof null\n",[97,51030,51031],{"class":99,"line":195},[97,51032,51033],{"class":103},"输出的是'object'，是一个对象数据类型\n",[138,51035,51036],{"start":1510},[70,51037,51038],{},"控制台检测数据类型",[24,51040,51041],{},[19,51042],{"alt":92,"src":51043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[138,51045,51046],{"start":1522},[70,51047,51048],{},"类型转换",[24,51050,51051],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[24,51053,51054],{},"转换方式：隐式转换和显示转换",[24,51056,51057],{},"①隐式转换",[67,51059,51060,51063,51066,51069],{},[70,51061,51062],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[70,51064,51065],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[70,51067,51068],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[70,51070,51071],{},"任何数据和字符串相加结果都是字符串",[24,51073,51074],{},"②显示转换",[24,51076,51077],{},[19,51078],{"alt":92,"src":51079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[24,51081,51082],{},[19,51083],{"alt":92,"src":51084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[24,51086,51087],{},"在输入的时候要用好隐式转换，简单写起来",[24,51089,51090],{},"let num = +prompt(’请输入数字：‘)",[24,51092,51093],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[24,51095,51096],{},"console.log(parseInt('12.333px'))",[24,51098,51099],{},"输出为：12",[24,51101,51102],{},"console.log(parseInt('a'a'a12.333px'))",[24,51104,51105],{},"输出：NaN",[14,51107,51109],{"id":51108},"_26-运算符","2.6 运算符",[48,51111,51113],{"id":51112},"_261-赋值运算符","2.6.1 赋值运算符",[24,51115,51116],{},[19,51117],{"alt":92,"src":51118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[48,51120,51122],{"id":51121},"_262-一元运算符","2.6.2 一元运算符",[24,51124,51125],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[24,51127,51128],{},[19,51129],{"alt":92,"src":51130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[24,51132,51133],{},[19,51134],{"alt":92,"src":51135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[24,51137,51138],{},"两者的区别：",[24,51140,51141],{},[19,51142],{"alt":92,"src":51143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[24,51145,51146],{},"前置先自加；后置后加，代码执行完之后再加",[48,51148,51150],{"id":51149},"_263-比较运算符","2.6.3 比较运算符",[24,51152,51153],{},[19,51154],{"alt":92,"src":51155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[24,51157,51158],{},"比较运算符也有隐式转换",[24,51160,51161],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[24,51163,51164],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[24,51166,51167],{},"要使用三等，开发的时候",[24,51169,51170],{},"NaN不等于任何人，包括它自己",[24,51172,51173],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[24,51175,51176],{},"7\u002F10=0.7",[24,51178,51179],{},"最后：0.5+0.2=0.7",[24,51181,51182],{},"字符串比较，比较的是字符对应的ASCII码",[48,51184,51186],{"id":51185},"_264-逻辑运算符","2.6.4 逻辑运算符",[24,51188,51189],{},[19,51190],{"alt":92,"src":51191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[24,51193,51194],{},[19,51195],{"alt":92,"src":51196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[24,51198,51199],{},[19,51200],{"alt":92,"src":51201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[24,51203,51204],{},"上述题目选D",[24,51206,51207],{},"与真2假1；或真1假2",[48,51209,51211],{"id":51210},"_265-运算符优先级","2.6.5 运算符优先级",[24,51213,51214],{},[19,51215],{"alt":92,"src":51216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[24,51218,51219],{},"先算逻辑与，后算逻辑或",[14,51221,51223],{"id":51222},"_27-语句","2.7 语句",[24,51225,51226],{},"表达式：是可以被求值的代码，会有结果给我们",[24,51228,51229],{},"语句：语句是可以被执行的代码，例如prompt()",[24,51231,51232],{},[19,51233],{"alt":92,"src":51234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[24,51236,51237],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[24,51239,51240],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[48,51242,51244],{"id":51243},"_271-分支语句","2.7.1 分支语句",[160,51246,51248],{"id":51247},"_2711-if分支语句","2.7.1.1 if分支语句",[24,51250,51251],{},"if语句单行简单的话，可以不写{}，写在一行就行",[138,51253,51254],{},[70,51255,51256],{},"单分支语句",[24,51258,51259],{},[19,51260],{"alt":92,"src":51261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[24,51263,51264],{},"除了0，所有数字都为真",[87,51266,51268],{"className":50823,"code":51267,"language":50825,"meta":92,"style":92},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[94,51269,51270,51275,51280,51285,51289],{"__ignoreMap":92},[97,51271,51272],{"class":99,"line":100},[97,51273,51274],{"class":103},"if（0) {\n",[97,51276,51277],{"class":99,"line":195},[97,51278,51279],{"class":103},"    let a=1\n",[97,51281,51282],{"class":99,"line":241},[97,51283,51284],{"class":103},"    alert(typeof a)\n",[97,51286,51287],{"class":99,"line":1387},[97,51288,1757],{"class":103},[97,51290,51291],{"class":99,"line":1393},[97,51292,51293],{"class":103},"不输出，括号为假\n",[138,51295,51296],{"start":195},[70,51297,51298],{},"双分支语句",[24,51300,51301],{},[19,51302],{"alt":92,"src":51303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[138,51305,51306],{"start":241},[70,51307,51308],{},"多分支语句",[24,51310,51311],{},[19,51312],{"alt":92,"src":51313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[160,51315,51317],{"id":51316},"_2712-三元运算符","2.7.1.2 三元运算符",[24,51319,51320],{},[19,51321],{"alt":92,"src":51322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[160,51324,51326],{"id":51325},"_2713-switch语句","2.7.1.3 switch语句",[24,51328,51329],{},[19,51330],{"alt":92,"src":51331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[24,51333,51334],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[48,51336,51338],{"id":51337},"_272-循环语句","2.7.2 循环语句",[160,51340,51342],{"id":51341},"_2721-断点演示","2.7.2.1 断点演示",[24,51344,51345],{},[19,51346],{"alt":92,"src":51347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[160,51349,51351],{"id":51350},"_2722-while循环","2.7.2.2 while循环",[24,51353,51354],{},[19,51355],{"alt":92,"src":51356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[24,51358,51359],{},[19,51360],{"alt":92,"src":51361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[160,51363,51365],{"id":51364},"_2723-for循环","2.7.2.3 for循环",[24,51367,51368],{},[19,51369],{"alt":92,"src":51370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[24,51372,51373],{},"for(;;) {",[24,51375,1265],{},[24,51377,51378],{},"表示无限循环",[24,51380,51381],{},[19,51382],{"alt":92,"src":51383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[160,51385,51387],{"id":51386},"_2724-循环的退出","2.7.2.4 循环的退出",[24,51389,51390],{},[19,51391],{"alt":92,"src":51392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51394,51396],{"id":51395},"_28-数组","2.8 数组",[48,51398,51400],{"id":51399},"_281-基础认识","2.8.1 基础认识",[24,51402,51403],{},[19,51404],{"alt":92,"src":51405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[24,51407,51408],{},[19,51409],{"alt":92,"src":51410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[24,51412,51413],{},[19,51414],{"alt":92,"src":51415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[24,51417,51418],{},[19,51419],{"alt":92,"src":51420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[48,51422,51424],{"id":51423},"_282-操作数组","2.8.2 操作数组",[24,51426,51427],{},[19,51428],{"alt":92,"src":51429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[138,51431,51432],{},[70,51433,51434],{},"添加元素",[24,51436,51437],{},[19,51438],{"alt":92,"src":51439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[24,51441,51442],{},"console.log(arr.push('green'))",[24,51444,51445],{},"输出结果：为新数组的长度",[24,51447,51448],{},[19,51449],{"alt":92,"src":51450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[24,51452,51453],{},"push用的非常多，一定要记住",[138,51455,51456],{},[70,51457,51458],{},"删除元素",[24,51460,51461],{},[19,51462],{"alt":92,"src":51463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[24,51465,51466],{},[19,51467],{"alt":92,"src":51468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[24,51470,51471],{},[19,51472],{"alt":92,"src":51473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[48,51475,51477],{"id":51476},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[87,51479,51481],{"className":50823,"code":51480,"language":50825,"meta":92,"style":92},"\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",[94,51482,51483,51496,51512,51516,51525,51542,51565,51585,51599,51607,51614,51626,51637,51641,51645,51652,51664,51679,51692,51711,51728,51743,51755,51767,51779,51783,51787,51798,51808,51820,51832,51844,51855,51859,51863,51875,51879,51893,51897,51901,51912,51926,51938,51952,51956,51965,51974,51978,51987,51991,52000,52005,52010,52023,52051,52056,52061,52086,52091,52095,52100,52105,52120,52124,52129,52159,52171,52187,52203,52217,52222,52229,52233,52238,52251,52259,52267,52271],{"__ignoreMap":92},[97,51484,51485,51488,51491,51494],{"class":99,"line":100},[97,51486,51487],{"class":103},"\u003C!",[97,51489,51490],{"class":107},"DOCTYPE",[97,51492,51493],{"class":111}," html",[97,51495,130],{"class":103},[97,51497,51498,51500,51502,51505,51507,51510],{"class":99,"line":195},[97,51499,104],{"class":103},[97,51501,50825],{"class":107},[97,51503,51504],{"class":111}," lang",[97,51506,115],{"class":103},[97,51508,51509],{"class":118},"\"en\"",[97,51511,130],{"class":103},[97,51513,51514],{"class":99,"line":241},[97,51515,2591],{"emptyLinePlaceholder":249},[97,51517,51518,51520,51523],{"class":99,"line":1387},[97,51519,104],{"class":103},[97,51521,51522],{"class":107},"head",[97,51524,130],{"class":103},[97,51526,51527,51530,51532,51535,51537,51540],{"class":99,"line":1393},[97,51528,51529],{"class":103},"    \u003C",[97,51531,108],{"class":107},[97,51533,51534],{"class":111}," charset",[97,51536,115],{"class":103},[97,51538,51539],{"class":118},"\"UTF-8\"",[97,51541,130],{"class":103},[97,51543,51544,51546,51548,51551,51553,51556,51558,51560,51563],{"class":99,"line":1407},[97,51545,51529],{"class":103},[97,51547,108],{"class":107},[97,51549,51550],{"class":111}," http-equiv",[97,51552,115],{"class":103},[97,51554,51555],{"class":118},"\"X-UA-Compatible\"",[97,51557,122],{"class":111},[97,51559,115],{"class":103},[97,51561,51562],{"class":118},"\"IE=edge\"",[97,51564,130],{"class":103},[97,51566,51567,51569,51571,51573,51575,51577,51579,51581,51583],{"class":99,"line":1413},[97,51568,51529],{"class":103},[97,51570,108],{"class":107},[97,51572,112],{"class":111},[97,51574,115],{"class":103},[97,51576,119],{"class":118},[97,51578,122],{"class":111},[97,51580,115],{"class":103},[97,51582,127],{"class":118},[97,51584,130],{"class":103},[97,51586,51587,51589,51592,51595,51597],{"class":99,"line":1504},[97,51588,51529],{"class":103},[97,51590,51591],{"class":107},"title",[97,51593,51594],{"class":103},">Document\u003C\u002F",[97,51596,51591],{"class":107},[97,51598,130],{"class":103},[97,51600,51601,51603,51605],{"class":99,"line":1510},[97,51602,51529],{"class":103},[97,51604,231],{"class":107},[97,51606,130],{"class":103},[97,51608,51609,51612],{"class":99,"line":1522},[97,51610,51611],{"class":107},"        *",[97,51613,15762],{"class":103},[97,51615,51616,51619,51622,51624],{"class":99,"line":1804},[97,51617,51618],{"class":370},"            margin",[97,51620,51621],{"class":103},": ",[97,51623,511],{"class":370},[97,51625,1483],{"class":103},[97,51627,51628,51631,51633,51635],{"class":99,"line":1809},[97,51629,51630],{"class":370},"            padding",[97,51632,51621],{"class":103},[97,51634,511],{"class":370},[97,51636,1483],{"class":103},[97,51638,51639],{"class":99,"line":1815},[97,51640,2720],{"class":103},[97,51642,51643],{"class":99,"line":1820},[97,51644,2591],{"emptyLinePlaceholder":249},[97,51646,51647,51650],{"class":99,"line":1834},[97,51648,51649],{"class":111},"        .box",[97,51651,15762],{"class":103},[97,51653,51654,51657,51659,51662],{"class":99,"line":1839},[97,51655,51656],{"class":370},"            display",[97,51658,51621],{"class":103},[97,51660,51661],{"class":370},"flex",[97,51663,1483],{"class":103},[97,51665,51666,51669,51671,51674,51677],{"class":99,"line":1845},[97,51667,51668],{"class":370},"            width",[97,51670,51621],{"class":103},[97,51672,51673],{"class":370},"700",[97,51675,51676],{"class":319},"px",[97,51678,1483],{"class":103},[97,51680,51681,51684,51686,51688,51690],{"class":99,"line":1866},[97,51682,51683],{"class":370},"            height",[97,51685,51621],{"class":103},[97,51687,4164],{"class":370},[97,51689,51676],{"class":319},[97,51691,1483],{"class":103},[97,51693,51694,51697,51699,51701,51703,51706,51709],{"class":99,"line":1871},[97,51695,51696],{"class":370},"            border-left",[97,51698,51621],{"class":103},[97,51700,537],{"class":370},[97,51702,51676],{"class":319},[97,51704,51705],{"class":370}," solid",[97,51707,51708],{"class":370}," pink",[97,51710,1483],{"class":103},[97,51712,51713,51716,51718,51720,51722,51724,51726],{"class":99,"line":1885},[97,51714,51715],{"class":370},"            border-bottom",[97,51717,51621],{"class":103},[97,51719,537],{"class":370},[97,51721,51676],{"class":319},[97,51723,51705],{"class":370},[97,51725,51708],{"class":370},[97,51727,1483],{"class":103},[97,51729,51730,51732,51734,51736,51738,51741],{"class":99,"line":1890},[97,51731,51618],{"class":370},[97,51733,51621],{"class":103},[97,51735,976],{"class":370},[97,51737,51676],{"class":319},[97,51739,51740],{"class":370}," auto",[97,51742,1483],{"class":103},[97,51744,51745,51748,51750,51753],{"class":99,"line":1919},[97,51746,51747],{"class":370},"            justify-content",[97,51749,51621],{"class":103},[97,51751,51752],{"class":370},"space-around",[97,51754,1483],{"class":103},[97,51756,51757,51760,51762,51765],{"class":99,"line":1924},[97,51758,51759],{"class":370},"            align-items",[97,51761,51621],{"class":103},[97,51763,51764],{"class":370},"flex-end",[97,51766,1483],{"class":103},[97,51768,51769,51772,51774,51777],{"class":99,"line":1941},[97,51770,51771],{"class":370},"            text-align",[97,51773,51621],{"class":103},[97,51775,51776],{"class":370},"center",[97,51778,1483],{"class":103},[97,51780,51781],{"class":99,"line":1946},[97,51782,2720],{"class":103},[97,51784,51785],{"class":99,"line":1951},[97,51786,2591],{"emptyLinePlaceholder":249},[97,51788,51789,51791,51793,51796],{"class":99,"line":1956},[97,51790,51649],{"class":111},[97,51792,1279],{"class":319},[97,51794,51795],{"class":107},"div",[97,51797,15762],{"class":103},[97,51799,51800,51802,51804,51806],{"class":99,"line":1970},[97,51801,51656],{"class":370},[97,51803,51621],{"class":103},[97,51805,51661],{"class":370},[97,51807,1483],{"class":103},[97,51809,51810,51812,51814,51816,51818],{"class":99,"line":1975},[97,51811,51668],{"class":370},[97,51813,51621],{"class":103},[97,51815,976],{"class":370},[97,51817,51676],{"class":319},[97,51819,1483],{"class":103},[97,51821,51822,51825,51827,51830],{"class":99,"line":2768},[97,51823,51824],{"class":370},"            background-color",[97,51826,51621],{"class":103},[97,51828,51829],{"class":370},"pink",[97,51831,1483],{"class":103},[97,51833,51834,51837,51839,51842],{"class":99,"line":2782},[97,51835,51836],{"class":370},"            flex-direction",[97,51838,51621],{"class":103},[97,51840,51841],{"class":370},"column",[97,51843,1483],{"class":103},[97,51845,51846,51848,51850,51853],{"class":99,"line":2790},[97,51847,51747],{"class":370},[97,51849,51621],{"class":103},[97,51851,51852],{"class":370},"space-between",[97,51854,1483],{"class":103},[97,51856,51857],{"class":99,"line":2795},[97,51858,2720],{"class":103},[97,51860,51861],{"class":99,"line":2801},[97,51862,2591],{"emptyLinePlaceholder":249},[97,51864,51865,51867,51870,51873],{"class":99,"line":2807},[97,51866,51649],{"class":111},[97,51868,51869],{"class":107}," div",[97,51871,51872],{"class":107}," span",[97,51874,15762],{"class":103},[97,51876,51877],{"class":99,"line":2812},[97,51878,2591],{"emptyLinePlaceholder":249},[97,51880,51881,51884,51886,51889,51891],{"class":99,"line":8139},[97,51882,51883],{"class":370},"            margin-top",[97,51885,51621],{"class":103},[97,51887,51888],{"class":370},"-20",[97,51890,51676],{"class":319},[97,51892,1483],{"class":103},[97,51894,51895],{"class":99,"line":8163},[97,51896,2720],{"class":103},[97,51898,51899],{"class":99,"line":8168},[97,51900,2591],{"emptyLinePlaceholder":249},[97,51902,51903,51905,51907,51910],{"class":99,"line":8174},[97,51904,51649],{"class":111},[97,51906,51869],{"class":107},[97,51908,51909],{"class":107}," h4",[97,51911,15762],{"class":103},[97,51913,51914,51917,51919,51922,51924],{"class":99,"line":8201},[97,51915,51916],{"class":370},"            margin-bottom",[97,51918,51621],{"class":103},[97,51920,51921],{"class":370},"-35",[97,51923,51676],{"class":319},[97,51925,1483],{"class":103},[97,51927,51928,51930,51932,51934,51936],{"class":99,"line":8206},[97,51929,51668],{"class":370},[97,51931,51621],{"class":103},[97,51933,676],{"class":370},[97,51935,51676],{"class":319},[97,51937,1483],{"class":103},[97,51939,51940,51943,51945,51948,51950],{"class":99,"line":8212},[97,51941,51942],{"class":370},"            margin-left",[97,51944,51621],{"class":103},[97,51946,51947],{"class":370},"-10",[97,51949,51676],{"class":319},[97,51951,1483],{"class":103},[97,51953,51954],{"class":99,"line":8224},[97,51955,2720],{"class":103},[97,51957,51958,51961,51963],{"class":99,"line":8236},[97,51959,51960],{"class":103},"    \u003C\u002F",[97,51962,231],{"class":107},[97,51964,130],{"class":103},[97,51966,51967,51970,51972],{"class":99,"line":8248},[97,51968,51969],{"class":103},"\u003C\u002F",[97,51971,51522],{"class":107},[97,51973,130],{"class":103},[97,51975,51976],{"class":99,"line":9907},[97,51977,2591],{"emptyLinePlaceholder":249},[97,51979,51980,51982,51985],{"class":99,"line":9932},[97,51981,104],{"class":103},[97,51983,51984],{"class":107},"body",[97,51986,130],{"class":103},[97,51988,51989],{"class":99,"line":9955},[97,51990,2591],{"emptyLinePlaceholder":249},[97,51992,51993,51995,51998],{"class":99,"line":9979},[97,51994,51529],{"class":103},[97,51996,51997],{"class":107},"script",[97,51999,130],{"class":103},[97,52001,52002],{"class":99,"line":9984},[97,52003,52004],{"class":191},"        \u002F\u002F 1. 四次弹框效果\n",[97,52006,52007],{"class":99,"line":9989},[97,52008,52009],{"class":191},"        \u002F\u002F 声明一个新的数组\n",[97,52011,52012,52015,52018,52020],{"class":99,"line":9994},[97,52013,52014],{"class":319},"        let",[97,52016,52017],{"class":103}," arr ",[97,52019,115],{"class":319},[97,52021,52022],{"class":103}," []\n",[97,52024,52025,52027,52029,52032,52034,52036,52038,52040,52042,52045,52047,52049],{"class":99,"line":10003},[97,52026,3594],{"class":319},[97,52028,1850],{"class":103},[97,52030,52031],{"class":319},"let",[97,52033,9629],{"class":103},[97,52035,115],{"class":319},[97,52037,25308],{"class":370},[97,52039,9636],{"class":103},[97,52041,1780],{"class":319},[97,52043,52044],{"class":370}," 4",[97,52046,3405],{"class":103},[97,52048,2483],{"class":319},[97,52050,12633],{"class":103},[97,52052,52053],{"class":99,"line":10008},[97,52054,52055],{"class":191},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[97,52057,52058],{"class":99,"line":10014},[97,52059,52060],{"class":191},"            \u002F\u002F arr.push(num)\n",[97,52062,52063,52066,52069,52071,52074,52076,52079,52081,52084],{"class":99,"line":10035},[97,52064,52065],{"class":103},"            arr.",[97,52067,52068],{"class":111},"push",[97,52070,323],{"class":103},[97,52072,52073],{"class":111},"prompt",[97,52075,323],{"class":103},[97,52077,52078],{"class":118},"`请输入第${",[97,52080,761],{"class":103},[97,52082,52083],{"class":118},"}季度的数据:`",[97,52085,30687],{"class":103},[97,52087,52088],{"class":99,"line":10041},[97,52089,52090],{"class":191},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[97,52092,52093],{"class":99,"line":10055},[97,52094,2720],{"class":103},[97,52096,52097],{"class":99,"line":10061},[97,52098,52099],{"class":191},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[97,52101,52102],{"class":99,"line":10088},[97,52103,52104],{"class":191},"        \u002F\u002F 盒子开头\n",[97,52106,52107,52110,52113,52115,52118],{"class":99,"line":10097},[97,52108,52109],{"class":103},"        document.",[97,52111,52112],{"class":111},"write",[97,52114,323],{"class":103},[97,52116,52117],{"class":118},"` \u003Cdiv class=\"box\">`",[97,52119,329],{"class":103},[97,52121,52122],{"class":99,"line":10103},[97,52123,2591],{"emptyLinePlaceholder":249},[97,52125,52126],{"class":99,"line":10111},[97,52127,52128],{"class":191},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[97,52130,52131,52133,52135,52137,52139,52141,52143,52145,52147,52150,52153,52155,52157],{"class":99,"line":10116},[97,52132,3594],{"class":319},[97,52134,1850],{"class":103},[97,52136,52031],{"class":319},[97,52138,9629],{"class":103},[97,52140,115],{"class":319},[97,52142,4284],{"class":370},[97,52144,9636],{"class":103},[97,52146,104],{"class":319},[97,52148,52149],{"class":103}," arr.",[97,52151,52152],{"class":370},"length",[97,52154,3405],{"class":103},[97,52156,2483],{"class":319},[97,52158,12633],{"class":103},[97,52160,52161,52164,52166,52168],{"class":99,"line":16794},[97,52162,52163],{"class":103},"            document.",[97,52165,52112],{"class":111},[97,52167,323],{"class":103},[97,52169,52170],{"class":118},"`\n",[97,52172,52173,52176,52178,52180,52182,52184],{"class":99,"line":16800},[97,52174,52175],{"class":118},"              \u003Cdiv style=\"height: ${",[97,52177,4071],{"class":103},[97,52179,1210],{"class":118},[97,52181,761],{"class":103},[97,52183,1259],{"class":118},[97,52185,52186],{"class":118},"}px;\">\n",[97,52188,52189,52192,52194,52196,52198,52200],{"class":99,"line":16823},[97,52190,52191],{"class":118},"                \u003Cspan>${",[97,52193,4071],{"class":103},[97,52195,1210],{"class":118},[97,52197,761],{"class":103},[97,52199,1259],{"class":118},[97,52201,52202],{"class":118},"}\u003C\u002Fspan>\n",[97,52204,52205,52208,52210,52212,52214],{"class":99,"line":16829},[97,52206,52207],{"class":118},"                \u003Ch4>第${",[97,52209,761],{"class":103},[97,52211,45756],{"class":319},[97,52213,25308],{"class":370},[97,52215,52216],{"class":118},"}季度\u003C\u002Fh4>\n",[97,52218,52219],{"class":99,"line":16852},[97,52220,52221],{"class":118},"              \u003C\u002Fdiv>          \n",[97,52223,52224,52227],{"class":99,"line":16866},[97,52225,52226],{"class":118},"            `",[97,52228,329],{"class":103},[97,52230,52231],{"class":99,"line":16886},[97,52232,2720],{"class":103},[97,52234,52235],{"class":99,"line":16892},[97,52236,52237],{"class":191},"        \u002F\u002F 盒子结尾\n",[97,52239,52240,52242,52244,52246,52249],{"class":99,"line":16903},[97,52241,52109],{"class":103},[97,52243,52112],{"class":111},[97,52245,323],{"class":103},[97,52247,52248],{"class":118},"` \u003C\u002Fdiv>`",[97,52250,329],{"class":103},[97,52252,52253,52255,52257],{"class":99,"line":16926},[97,52254,51960],{"class":103},[97,52256,51997],{"class":107},[97,52258,130],{"class":103},[97,52260,52261,52263,52265],{"class":99,"line":16948},[97,52262,51969],{"class":103},[97,52264,51984],{"class":107},[97,52266,130],{"class":103},[97,52268,52269],{"class":99,"line":16953},[97,52270,2591],{"emptyLinePlaceholder":249},[97,52272,52273,52275,52277],{"class":99,"line":16959},[97,52274,51969],{"class":103},[97,52276,50825],{"class":107},[97,52278,130],{"class":103},[48,52280,52282],{"id":52281},"_284-冒泡排序","2.8.4 冒泡排序",[87,52284,52286],{"className":50823,"code":52285,"language":50825,"meta":92,"style":92},"\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",[94,52287,52288,52298,52312,52316,52324,52339,52359,52371,52379,52383,52391,52399,52431,52464,52501,52506,52525,52530,52543,52558,52574,52578,52583,52587,52597,52606,52614,52618],{"__ignoreMap":92},[97,52289,52290,52292,52294,52296],{"class":99,"line":100},[97,52291,51487],{"class":103},[97,52293,51490],{"class":107},[97,52295,51493],{"class":111},[97,52297,130],{"class":103},[97,52299,52300,52302,52304,52306,52308,52310],{"class":99,"line":195},[97,52301,104],{"class":103},[97,52303,50825],{"class":107},[97,52305,51504],{"class":111},[97,52307,115],{"class":103},[97,52309,51509],{"class":118},[97,52311,130],{"class":103},[97,52313,52314],{"class":99,"line":241},[97,52315,2591],{"emptyLinePlaceholder":249},[97,52317,52318,52320,52322],{"class":99,"line":1387},[97,52319,104],{"class":103},[97,52321,51522],{"class":107},[97,52323,130],{"class":103},[97,52325,52326,52329,52331,52333,52335,52337],{"class":99,"line":1393},[97,52327,52328],{"class":103},"  \u003C",[97,52330,108],{"class":107},[97,52332,51534],{"class":111},[97,52334,115],{"class":103},[97,52336,51539],{"class":118},[97,52338,130],{"class":103},[97,52340,52341,52343,52345,52347,52349,52351,52353,52355,52357],{"class":99,"line":1407},[97,52342,52328],{"class":103},[97,52344,108],{"class":107},[97,52346,112],{"class":111},[97,52348,115],{"class":103},[97,52350,119],{"class":118},[97,52352,122],{"class":111},[97,52354,115],{"class":103},[97,52356,127],{"class":118},[97,52358,130],{"class":103},[97,52360,52361,52363,52365,52367,52369],{"class":99,"line":1413},[97,52362,52328],{"class":103},[97,52364,51591],{"class":107},[97,52366,51594],{"class":103},[97,52368,51591],{"class":107},[97,52370,130],{"class":103},[97,52372,52373,52375,52377],{"class":99,"line":1504},[97,52374,51969],{"class":103},[97,52376,51522],{"class":107},[97,52378,130],{"class":103},[97,52380,52381],{"class":99,"line":1510},[97,52382,2591],{"emptyLinePlaceholder":249},[97,52384,52385,52387,52389],{"class":99,"line":1522},[97,52386,104],{"class":103},[97,52388,51984],{"class":107},[97,52390,130],{"class":103},[97,52392,52393,52395,52397],{"class":99,"line":1804},[97,52394,52328],{"class":103},[97,52396,51997],{"class":107},[97,52398,130],{"class":103},[97,52400,52401,52404,52406,52408,52411,52413,52415,52417,52419,52421,52423,52425,52427,52429],{"class":99,"line":1809},[97,52402,52403],{"class":319},"    let",[97,52405,52017],{"class":103},[97,52407,115],{"class":319},[97,52409,52410],{"class":103}," [",[97,52412,639],{"class":370},[97,52414,12626],{"class":103},[97,52416,613],{"class":370},[97,52418,12626],{"class":103},[97,52420,392],{"class":370},[97,52422,12626],{"class":103},[97,52424,398],{"class":370},[97,52426,12626],{"class":103},[97,52428,537],{"class":370},[97,52430,33436],{"class":103},[97,52432,52433,52435,52437,52439,52441,52443,52445,52447,52449,52451,52453,52456,52458,52460,52462],{"class":99,"line":1815},[97,52434,3392],{"class":319},[97,52436,1850],{"class":103},[97,52438,52031],{"class":319},[97,52440,9629],{"class":103},[97,52442,115],{"class":319},[97,52444,4284],{"class":370},[97,52446,9636],{"class":103},[97,52448,104],{"class":319},[97,52450,52149],{"class":103},[97,52452,52152],{"class":370},[97,52454,52455],{"class":319}," -",[97,52457,25308],{"class":370},[97,52459,3405],{"class":103},[97,52461,2483],{"class":319},[97,52463,12633],{"class":103},[97,52465,52466,52469,52471,52473,52475,52477,52479,52481,52483,52485,52487,52489,52491,52493,52495,52497,52499],{"class":99,"line":1820},[97,52467,52468],{"class":319},"      for",[97,52470,1850],{"class":103},[97,52472,52031],{"class":319},[97,52474,9691],{"class":103},[97,52476,115],{"class":319},[97,52478,4284],{"class":370},[97,52480,9698],{"class":103},[97,52482,104],{"class":319},[97,52484,52149],{"class":103},[97,52486,52152],{"class":370},[97,52488,52455],{"class":319},[97,52490,9629],{"class":103},[97,52492,852],{"class":319},[97,52494,25308],{"class":370},[97,52496,9705],{"class":103},[97,52498,2483],{"class":319},[97,52500,12633],{"class":103},[97,52502,52503],{"class":99,"line":1834},[97,52504,52505],{"class":191},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[97,52507,52508,52510,52513,52515,52518,52520,52522],{"class":99,"line":1839},[97,52509,2688],{"class":319},[97,52511,52512],{"class":103}," (arr[j] ",[97,52514,1279],{"class":319},[97,52516,52517],{"class":103}," arr[j ",[97,52519,801],{"class":319},[97,52521,25308],{"class":370},[97,52523,52524],{"class":103},"]) {\n",[97,52526,52527],{"class":99,"line":1845},[97,52528,52529],{"class":191},"          \u002F\u002F 交换两个变量\n",[97,52531,52532,52535,52538,52540],{"class":99,"line":1866},[97,52533,52534],{"class":319},"          let",[97,52536,52537],{"class":103}," tmp ",[97,52539,115],{"class":319},[97,52541,52542],{"class":103}," arr[j]\n",[97,52544,52545,52548,52550,52552,52554,52556],{"class":99,"line":1871},[97,52546,52547],{"class":103},"          arr[j] ",[97,52549,115],{"class":319},[97,52551,52517],{"class":103},[97,52553,801],{"class":319},[97,52555,25308],{"class":370},[97,52557,33436],{"class":103},[97,52559,52560,52563,52565,52567,52569,52571],{"class":99,"line":1885},[97,52561,52562],{"class":103},"          arr[j ",[97,52564,801],{"class":319},[97,52566,25308],{"class":370},[97,52568,4634],{"class":103},[97,52570,115],{"class":319},[97,52572,52573],{"class":103}," tmp\n",[97,52575,52576],{"class":99,"line":1890},[97,52577,2720],{"class":103},[97,52579,52580],{"class":99,"line":1919},[97,52581,52582],{"class":103},"      }\n",[97,52584,52585],{"class":99,"line":1924},[97,52586,2378],{"class":103},[97,52588,52589,52592,52594],{"class":99,"line":1941},[97,52590,52591],{"class":103},"    document.",[97,52593,52112],{"class":111},[97,52595,52596],{"class":103},"(arr)\n",[97,52598,52599,52602,52604],{"class":99,"line":1946},[97,52600,52601],{"class":103},"  \u003C\u002F",[97,52603,51997],{"class":107},[97,52605,130],{"class":103},[97,52607,52608,52610,52612],{"class":99,"line":1951},[97,52609,51969],{"class":103},[97,52611,51984],{"class":107},[97,52613,130],{"class":103},[97,52615,52616],{"class":99,"line":1956},[97,52617,2591],{"emptyLinePlaceholder":249},[97,52619,52620,52622,52624],{"class":99,"line":1970},[97,52621,51969],{"class":103},[97,52623,50825],{"class":107},[97,52625,130],{"class":103},[24,52627,52628],{},[19,52629],{"alt":92,"src":52630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[24,52632,52633],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[24,52635,52636],{},"let arr = [4, 2, 5, 1, 3]",[24,52638,52639],{},"\u002F\u002F 1.升序排列写法",[24,52641,52642],{},"arr.sort(function (a, b) {",[24,52644,52645],{},"return a - b",[24,52647,52648],{},"})",[24,52650,52651],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[24,52653,52654],{},"\u002F\u002F 降序排列写法",[24,52656,52642],{},[24,52658,52659],{},"return b - a",[24,52661,52648],{},[24,52663,52664],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52666,52668],{"id":52667},"_29-函数","2.9 函数",[24,52670,52671],{},[19,52672],{"alt":92,"src":52673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[24,52675,52676],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[24,52678,52679],{},"函数的声明用function",[24,52681,52682],{},"函数里边可以嵌套函数",[48,52684,52686],{"id":52685},"_291-函数传参","2.9.1 函数传参",[24,52688,52689],{},[19,52690],{"alt":92,"src":52691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[24,52693,52694],{},[19,52695],{"alt":92,"src":52696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[67,52698,52699,52702,52705,52708,52711,52714],{},[70,52700,52701],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[70,52703,52704],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[70,52706,52707],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[70,52709,52710],{},"开发中尽量保持形参和实参个数一致",[70,52712,52713],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[70,52715,52716],{},"形参只在函数中有用，所以不需要进行声明这个变量",[24,52718,52719],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[48,52721,52723],{"id":52722},"_292-函数的返回值","2.9.2 函数的返回值",[24,52725,52726],{},[19,52727],{"alt":92,"src":52728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[24,52730,52731],{},[19,52732],{"alt":92,"src":52733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[67,52735,52736,52739,52742,52745,52748],{},[70,52737,52738],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[70,52740,52741],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[70,52743,52744],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[70,52746,52747],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[70,52749,52750],{},"断点调试:进入函数内部看执行过程F11",[48,52752,52754],{"id":52753},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[87,52756,52758],{"className":50823,"code":52757,"language":50825,"meta":92,"style":92},"    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",[94,52759,52760,52765,52770,52774,52779],{"__ignoreMap":92},[97,52761,52762],{"class":99,"line":100},[97,52763,52764],{"class":103},"    function fn(a, b) {\n",[97,52766,52767],{"class":99,"line":195},[97,52768,52769],{"class":103},"      console.log(a + b);\n",[97,52771,52772],{"class":99,"line":241},[97,52773,2378],{"class":103},[97,52775,52776],{"class":99,"line":1387},[97,52777,52778],{"class":103},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[97,52780,52781],{"class":99,"line":1393},[97,52782,52783],{"class":103},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[48,52785,52787],{"id":52786},"_294-作用域","2.9.4 作用域",[67,52789,52790,52796,52801,52804,52807],{},[70,52791,52792,52793],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[469,52794,52795],{},"作用域",[70,52797,52798],{},[469,52799,52800],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[70,52802,52803],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[70,52805,52806],{},"函数内部可以直接所使用全局变量",[70,52808,52809],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[24,52811,14824],{},[87,52813,52815],{"className":50823,"code":52814,"language":50825,"meta":92,"style":92},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[94,52816,52817,52822,52827,52831,52836,52841,52846],{"__ignoreMap":92},[97,52818,52819],{"class":99,"line":100},[97,52820,52821],{"class":103},"    function fun() {\n",[97,52823,52824],{"class":99,"line":195},[97,52825,52826],{"class":103},"      num = 10\n",[97,52828,52829],{"class":99,"line":241},[97,52830,2378],{"class":103},[97,52832,52833],{"class":99,"line":1387},[97,52834,52835],{"class":103},"    fun()\n",[97,52837,52838],{"class":99,"line":1393},[97,52839,52840],{"class":103},"    console.log(num)\n",[97,52842,52843],{"class":99,"line":1407},[97,52844,52845],{"class":103},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[97,52847,52848],{"class":99,"line":1413},[97,52849,52850],{"class":103},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[67,52852,52853,52856],{},[70,52854,52855],{},"函数内部的形参可以看做是局部变量",[70,52857,52858],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[24,52860,52861,52862],{},"变量访问原则： ",[469,52863,52864],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[48,52866,52868],{"id":52867},"_295-匿名函数","2.9.5 匿名函数",[24,52870,52871],{},"函数可以分为具名函数和匿名函数",[24,52873,52874],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[138,52876,52877],{},[70,52878,52879],{},"函数表达式",[24,52881,52882],{},[19,52883],{"alt":92,"src":52884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[24,52886,52887],{},"里边也可以写参数",[24,52889,52890],{},"具名函数调用位置可以随意调整；",[24,52892,52893],{},"匿名函数函数表达式形式只能在声明后才可以使用",[138,52895,52896],{"start":195},[70,52897,52898],{},"立即执行函数",[24,52900,52901],{},[19,52902],{"alt":92,"src":52903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[24,52905,52906],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[24,52908,52909],{},"写法：两个小括号，然后在第一个小括号中写function",[24,52911,52912],{},"(function () {})();",[24,52914,52915],{},"不要落下最后的;",[24,52917,52918],{},"立即执行函数必须要加;",[24,52920,52921],{},"分号写前写后都没问题",[24,52923,52924],{},"写前：",[24,52926,52927],{},"(function() {})()",[24,52929,52930],{},";(function () {})();",[24,52932,52933],{},"写后:",[24,52935,52936],{},"(function() {})();",[24,52938,52912],{},[24,52940,52941],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[24,52943,52944],{},"还有一种写法：",[24,52946,52947],{},"(function(){}());",[24,52949,52950],{},"或者:",[24,52952,52953],{},"!function(){}();",[24,52955,52956],{},"立即执行函数有时候也是可以加名字的：",[24,52958,52959],{},"(function flexible(window,document) {}(window,document));",[24,52961,52962],{},"省一些调用方法",[48,52964,52966],{"id":52965},"_296-逻辑中断","2.9.6 逻辑中断!!!",[24,52968,52969],{},[19,52970],{"alt":92,"src":52971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[24,52973,52974],{},"这样就不用非得给x,y初始化了",[24,52976,52977],{},[19,52978],{"alt":92,"src":52979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[24,52981,52982],{},"代码执行时先看左边",[24,52984,52985],{},"例如：console.log(false && 3+5)",[24,52987,52988],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[24,52990,52991],{},"&&都是真时，就返回最后一个真值",[24,52993,52994],{},"console.log(11 && 22)",[24,52996,52997],{},"输出22",[24,52999,53000],{},"逻辑与：遇真则真",[24,53002,14824],{},[24,53004,53005],{},"let age=1",[24,53007,53008],{},"console.log(11 || age++)",[24,53010,53011],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[24,53013,53014],{},"console.log(11 || 22)",[24,53016,53017],{},"||逻辑或遇到真就直接输出，输出结果为11",[24,53019,53020],{},"||如果都是假的话，就取最后一个假的值了",[48,53022,53024],{"id":53023},"_297-转换为boolean型","2.9.7 转换为Boolean型",[24,53026,53027],{},"显示转换：",[24,53029,53030,53033,53034],{},[469,53031,53032],{},"记忆","： ",[469,53035,53036],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[24,53038,53039],{},"空字符串为假，其他字符串全为真",[24,53041,53042],{},[19,53043],{"alt":92,"src":53044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[24,53046,53047],{},"隐式转换：",[24,53049,53050],{},[19,53051],{"alt":92,"src":53052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[24,53054,53055],{},"隐式转换:",[24,53057,53058],{},"null+3=3",[24,53060,53061],{},"undefined+3=NaN",[24,53063,53064],{},"null==undefined 输出true,他两个都当0看",[24,53066,53067],{},"null===undefined 输出false",[24,53069,53070],{},"undefined做任何操作都是NaN",[24,53072,53073],{},"NaN不等于NaN，NaN表示计算错误",[14,53075,53077],{"id":53076},"_210-对象","2.10 对象",[48,53079,53081],{"id":53080},"_2101-对象的介绍","2.10.1 对象的介绍",[24,53083,53084],{},"对象也是一种数据类型，里边的数据是无序的",[24,53086,53087],{},"对象由属性和方法组成",[24,53089,53090],{},[19,53091],{"alt":92,"src":53092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[24,53094,53095],{},[19,53096],{"alt":92,"src":53097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[24,53099,53100],{},[19,53101],{"alt":92,"src":53102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[48,53104,53106],{"id":53105},"_2102-对象属性","2.10.2 对象属性",[24,53108,53109],{},[19,53110],{"alt":92,"src":53111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[138,53113,53114],{},[70,53115,53116],{},"查询对象",[24,53118,53119],{},"对象名.属性 goods.uname",[24,53121,53122],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[24,53124,53125],{},"不带字符串的属性名也可以使用 对象名['属性名']",[24,53127,53128],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[24,53130,53131],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[138,53133,53134],{"start":195},[70,53135,53136],{},"重新赋值",[24,53138,53139],{},"对象名.属性=新值",[138,53141,53142],{"start":241},[70,53143,53144],{},"增加新数据",[24,53146,53139],{},[138,53148,53149],{"start":1387},[70,53150,53151],{},"删除对象中的属性",[24,53153,53154],{},"delete 对象名.属性",[48,53156,53158],{"id":53157},"_2103-对象方法","2.10.3 对象方法",[24,53160,53161],{},[19,53162],{"alt":92,"src":53163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[24,53165,53166],{},"后边跟的是匿名函数",[24,53168,53169],{},"对象外面的叫函数；对象内部的叫方法",[24,53171,53172],{},[19,53173],{"alt":92,"src":53174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[48,53176,53178],{"id":53177},"_2104-遍历对象","2.10.4 遍历对象",[24,53180,53181],{},"理解为加括号的python字典遍历",[24,53183,53184],{},[19,53185],{"alt":92,"src":53186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[24,53188,53189],{},"k是字符串类型",[24,53191,53192],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[87,53194,53196],{"className":50823,"code":53195,"language":50825,"meta":92,"style":92},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[94,53197,53198,53203,53208,53213,53218],{"__ignoreMap":92},[97,53199,53200],{"class":99,"line":100},[97,53201,53202],{"class":103},"   let arr = [1, 2, 3]\n",[97,53204,53205],{"class":99,"line":195},[97,53206,53207],{"class":103},"    for (let k in arr) {\n",[97,53209,53210],{"class":99,"line":241},[97,53211,53212],{"class":103},"      console.log(k)\n",[97,53214,53215],{"class":99,"line":1387},[97,53216,53217],{"class":103},"      console.log(arr[k])\n",[97,53219,53220],{"class":99,"line":1393},[97,53221,2378],{"class":103},[24,53223,53224],{},[19,53225],{"alt":92,"src":53226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[24,53228,53229],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[24,53231,53232],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[24,53234,53235],{},"for in 得到的k是属性名",[51997,53237,53238],{},"\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",[24,53240,53241],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[48,53243,53245],{"id":53244},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[24,53247,53248],{},"数组中放对象信息",[87,53250,53254],{"className":53251,"code":53252,"language":53253,"meta":92,"style":92},"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",[94,53255,53256,53264,53269,53274,53279,53284,53289,53294,53299,53304,53309,53314,53319,53323,53327],{"__ignoreMap":92},[97,53257,53258,53260,53262],{"class":99,"line":100},[97,53259,104],{"class":103},[97,53261,51997],{"class":107},[97,53263,130],{"class":103},[97,53265,53266],{"class":99,"line":195},[97,53267,53268],{"class":103},"    let students = [\n",[97,53270,53271],{"class":99,"line":241},[97,53272,53273],{"class":103},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[97,53275,53276],{"class":99,"line":1387},[97,53277,53278],{"class":103},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[97,53280,53281],{"class":99,"line":1393},[97,53282,53283],{"class":103},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[97,53285,53286],{"class":99,"line":1407},[97,53287,53288],{"class":103},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[97,53290,53291],{"class":99,"line":1413},[97,53292,53293],{"class":103},"    ]\n",[97,53295,53296],{"class":99,"line":1504},[97,53297,53298],{"class":103},"    for (let i = 0; i \u003C students.length; i++) {\n",[97,53300,53301],{"class":99,"line":1510},[97,53302,53303],{"class":103},"      for (let k in students[i]) {\n",[97,53305,53306],{"class":99,"line":1522},[97,53307,53308],{"class":103},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[97,53310,53311],{"class":99,"line":1804},[97,53312,53313],{"class":103},"        \u002F\u002F输出每个人的名字：\n",[97,53315,53316],{"class":99,"line":1809},[97,53317,53318],{"class":103},"        \u002F\u002Fconsole.log(students[i].name)\n",[97,53320,53321],{"class":99,"line":1815},[97,53322,52582],{"class":103},[97,53324,53325],{"class":99,"line":1820},[97,53326,2378],{"class":103},[97,53328,53329,53331,53333],{"class":99,"line":1834},[97,53330,52601],{"class":103},[97,53332,51997],{"class":107},[97,53334,130],{"class":103},[48,53336,53338],{"id":53337},"_2106-内置对象","2.10.6 内置对象",[24,53340,53341],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[138,53343,53344],{},[70,53345,53346],{},"数学对象Math",[24,53348,53349],{},[19,53350],{"alt":92,"src":53351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[24,53353,53354],{},[558,53355,53358],{"href":53356,"rel":53357},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24054],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[24,53360,53361],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[24,53363,53364],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[24,53366,53367],{},"数组不可以使用Math中的max,min来求最大值与最小值",[24,53369,53370],{},"null是一个空对象，可以认为：null类似于let obj={}",[24,53372,53373],{},"null属于对象数据类型",[138,53375,53376],{"start":195},[70,53377,53378],{},"生成任意范围随机数",[24,53380,53381],{},[19,53382],{"alt":92,"src":53383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[24,53385,53386],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[24,53388,53389],{},"乘以几就取不到几",[24,53391,53392],{},"取数组中的随机元素：",[24,53394,53395],{},"let arr = ['red', 'green', 'blue']",[24,53397,53398],{},"let random = Math.floor(Math.random() * arr.length)",[24,53400,53401],{},"console.log(arr[random])",[24,53403,53404],{},"这个函数得到的是全闭区间",[24,53406,53407],{},"function getRandom(N, M) {",[24,53409,53410],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[24,53412,1265],{},[24,53414,53415],{},"console.log(getRandom(4, 8))",[48,53417,53419],{"id":53418},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[24,53421,53422],{},[19,53423],{"alt":92,"src":53424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[24,53426,53427],{},[19,53428],{"alt":92,"src":53429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[24,53431,53432],{},[19,53433],{"alt":92,"src":53434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[24,53436,53437],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[24,53439,53440],{},[19,53441],{"alt":92,"src":53442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[24,53444,53445],{},[19,53446],{"alt":92,"src":53447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[24,53449,53450],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[24,53452,53453],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[24,53455,53456],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[231,53458,53459],{},"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":92,"searchDepth":195,"depth":195,"links":53461},[53462,53470,53471,53472,53473,53474,53481,53485,53491,53500],{"id":50658,"depth":195,"text":50659,"children":53463},[53464,53465,53466,53467,53468,53469],{"id":50662,"depth":241,"text":50663},{"id":50679,"depth":241,"text":50680},{"id":50719,"depth":241,"text":50720},{"id":50731,"depth":241,"text":50732},{"id":50740,"depth":241,"text":50741},{"id":50788,"depth":241,"text":50789},{"id":50798,"depth":195,"text":50799},{"id":50886,"depth":195,"text":50887},{"id":50909,"depth":195,"text":50910},{"id":50921,"depth":195,"text":50922},{"id":51108,"depth":195,"text":51109,"children":53475},[53476,53477,53478,53479,53480],{"id":51112,"depth":241,"text":51113},{"id":51121,"depth":241,"text":51122},{"id":51149,"depth":241,"text":51150},{"id":51185,"depth":241,"text":51186},{"id":51210,"depth":241,"text":51211},{"id":51222,"depth":195,"text":51223,"children":53482},[53483,53484],{"id":51243,"depth":241,"text":51244},{"id":51337,"depth":241,"text":51338},{"id":51395,"depth":195,"text":51396,"children":53486},[53487,53488,53489,53490],{"id":51399,"depth":241,"text":51400},{"id":51423,"depth":241,"text":51424},{"id":51476,"depth":241,"text":51477},{"id":52281,"depth":241,"text":52282},{"id":52667,"depth":195,"text":52668,"children":53492},[53493,53494,53495,53496,53497,53498,53499],{"id":52685,"depth":241,"text":52686},{"id":52722,"depth":241,"text":52723},{"id":52753,"depth":241,"text":52754},{"id":52786,"depth":241,"text":52787},{"id":52867,"depth":241,"text":52868},{"id":52965,"depth":241,"text":52966},{"id":53023,"depth":241,"text":53024},{"id":53076,"depth":195,"text":53077,"children":53501},[53502,53503,53504,53505,53506,53507,53508],{"id":53080,"depth":241,"text":53081},{"id":53105,"depth":241,"text":53106},{"id":53157,"depth":241,"text":53158},{"id":53177,"depth":241,"text":53178},{"id":53244,"depth":241,"text":53245},{"id":53337,"depth":241,"text":53338},{"id":53418,"depth":241,"text":53419},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50650,"description":246},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53515,"title":53516,"body":53517,"description":246,"extension":247,"meta":76857,"navigation":249,"path":76858,"seo":76859,"stem":76860,"__hash__":76861},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53518,"toc":76797},[53519,53522,53525,53528,53533,53536,53539,53542,53546,53550,53556,53561,53569,53576,53579,53583,53588,53593,53598,53601,53604,53615,53618,53622,53625,53628,53633,53638,53643,53646,53649,53741,53744,53749,53752,53757,53760,53763,53768,53771,53776,53780,53783,53797,53801,53806,53809,53812,53816,53821,53824,53828,53832,53837,53841,53846,53849,53852,53855,53858,53861,53864,53869,53874,53902,53905,53908,53911,53916,53919,53922,53925,53928,53932,53961,53965,53970,53975,53978,53981,53984,53989,54104,54109,54114,54275,54280,54283,54287,54292,54297,54300,54303,54306,54309,54312,54315,54318,54321,54324,54327,54330,54333,54336,54339,54341,54344,54347,54350,54355,54359,54756,54759,54765,54769,54774,56056,56061,56064,56067,56070,56075,57271,57275,57281,57286,57289,57294,57299,57303,57307,57312,57315,57320,57323,57326,57330,58238,58241,58245,58466,58469,58472,58475,58701,58704,58928,58931,58935,58940,58943,58946,59174,59177,59210,59213,59217,59222,59226,59229,59232,59235,59238,59241,59244,59247,59252,60532,60536,60539,61632,61636,61639,61642,61645,61648,61652,61655,61658,61660,61668,63149,63153,63156,63159,63162,63371,63374,63378,63382,63387,63392,63395,63398,63403,63407,63412,63415,63524,63528,63533,63538,63541,63544,63548,63553,63558,63563,63566,63569,63580,63583,63588,63593,63596,63599,63672,63676,63681,63684,63686,63697,63701,63706,65032,65035,65038,65041,65043,65046,65049,65052,65055,65058,65061,65064,65067,65070,65073,65076,65079,65081,65083,65086,65090,66184,66187,66190,66206,66220,66223,66228,66234,66239,66243,66247,66252,66256,66261,66703,66708,66711,66715,66720,66723,66726,66730,66735,66739,66744,66749,66753,66758,66763,66766,66771,66776,66780,66785,66790,66894,66897,66901,66906,67272,67275,67278,67281,67284,67287,67290,67293,67296,68592,68596,68601,68606,68609,68612,68615,68618,68620,68625,68630,68633,68637,68642,68647,68652,68655,68658,68661,68664,68667,68672,68675,68679,68684,68689,68693,68698,68701,68706,68709,68712,68715,68718,68721,68726,68729,68732,68735,68738,68742,68747,68750,68754,68759,68762,68765,68769,68798,68801,68805,68809,68814,68818,68823,68826,68829,68832,68835,68838,68841,68844,68847,68850,68853,68856,68859,68862,68865,68869,68874,68879,68882,68886,68890,68895,68898,68902,68905,68908,68913,68918,68923,68928,68933,68936,68939,68944,68949,68953,68958,68961,68966,68969,68972,68975,68978,68983,68986,68995,68999,69004,69007,69010,69014,69017,69022,69026,69029,69035,69041,69045,69071,69074,70635,70638,71134,71137,71142,71147,71152,71156,71161,71166,71171,71175,71180,71183,71186,71189,71192,71196,71199,71204,71207,71212,71216,71221,71224,71229,71234,71239,71242,71245,71250,71255,71258,71261,71265,71268,71273,71276,71281,71284,71289,71294,71299,71302,71307,71372,71375,71386,71390,71395,71567,71571,71576,71579,71582,71585,71589,71600,71604,71607,71612,71617,71620,71623,71626,71629,71632,71634,71637,71640,71643,71648,71651,71656,71659,71663,71666,71669,71683,71687,71690,71745,71750,71753,71756,71761,71764,71768,71773,71903,71907,71912,71917,71998,72003,72007,72010,72015,72020,72026,72029,72032,72035,72039,72044,72047,72058,72062,72079,75126,75130,75133,75136,75139,75160,75164,75167,75175,75178,75183,75186,75189,75194,75199,75203,75224,75228,75233,75236,75239,75242,75245,75249,75254,75257,75261,75266,75269,75274,75277,75282,75285,75290,76493,76497,76502,76505,76510,76794],[10,53520,53516],{"id":53521},"_3web-apis",[24,53523,53524],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[24,53526,53527],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[24,53529,53530],{},[19,53531],{"alt":92,"src":53532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[24,53534,53535],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[24,53537,53538],{},"建议数组和对象使用 const 来声明",[24,53540,53541],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53543,53545],{"id":53544},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[48,53547,53549],{"id":53548},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[24,53551,53552,53555],{},[94,53553,53554],{},"document"," = HTML 文件解析后的对象化表示；",[24,53557,53558,53560],{},[94,53559,53554],{}," ≠ HTML 文件本身",[24,53562,53563,53568],{},[469,53564,53565],{},[94,53566,53567],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[24,53570,53571,53575],{},[469,53572,53573],{},[94,53574,53554],{}," ：容器里的内容，代表当前加载的网页（DOM）",[24,53577,53578],{},"document实际上为window.document的简写",[48,53580,53582],{"id":53581},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[24,53584,53585],{},[19,53586],{"alt":92,"src":53587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[24,53589,53590],{},[19,53591],{"alt":92,"src":53592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[24,53594,53595],{},[19,53596],{"alt":92,"src":53597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[24,53599,53600],{},"console.dir()",[24,53602,53603],{},"dir用来打印对象",[67,53605,53606,53609,53612],{},[70,53607,53608],{},"任何一个标签，都是一个对象",[70,53610,53611],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[70,53613,53614],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[24,53616,53617],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[48,53619,53621],{"id":53620},"_312-获取dom对象","3.1.2 获取DoM对象",[24,53623,53624],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[24,53626,53627],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[24,53629,53630],{},[469,53631,53632],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[138,53634,53635],{},[70,53636,53637],{},"利用CSS选择器来获取标签元素",[24,53639,53640],{},[19,53641],{"alt":92,"src":53642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[24,53644,53645],{},"里边的选择器必须必须加引号！！！",[24,53647,53648],{},"只选择第一个元素",[87,53650,53652],{"className":53251,"code":53651,"language":53253,"meta":92,"style":92},"\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",[94,53653,53654,53662,53683,53702,53710,53715,53720,53725,53733],{"__ignoreMap":92},[97,53655,53656,53658,53660],{"class":99,"line":100},[97,53657,104],{"class":103},[97,53659,51984],{"class":107},[97,53661,130],{"class":103},[97,53663,53664,53666,53668,53671,53673,53676,53679,53681],{"class":99,"line":195},[97,53665,52328],{"class":103},[97,53667,51795],{"class":107},[97,53669,53670],{"class":111}," class",[97,53672,115],{"class":103},[97,53674,53675],{"class":118},"\"box\"",[97,53677,53678],{"class":103},">123\u003C\u002F",[97,53680,51795],{"class":107},[97,53682,130],{"class":103},[97,53684,53685,53687,53689,53691,53693,53695,53698,53700],{"class":99,"line":241},[97,53686,52328],{"class":103},[97,53688,51795],{"class":107},[97,53690,53670],{"class":111},[97,53692,115],{"class":103},[97,53694,53675],{"class":118},[97,53696,53697],{"class":103},">456\u003C\u002F",[97,53699,51795],{"class":107},[97,53701,130],{"class":103},[97,53703,53704,53706,53708],{"class":99,"line":1387},[97,53705,52328],{"class":103},[97,53707,51997],{"class":107},[97,53709,130],{"class":103},[97,53711,53712],{"class":99,"line":1393},[97,53713,53714],{"class":103},"    \u002F\u002F 1.获取匹配的第一个元素\n",[97,53716,53717],{"class":99,"line":1407},[97,53718,53719],{"class":103},"    const box = document.querySelector('div')\n",[97,53721,53722],{"class":99,"line":1413},[97,53723,53724],{"class":103},"    console.dir(box)\n",[97,53726,53727,53729,53731],{"class":99,"line":1504},[97,53728,52601],{"class":103},[97,53730,51997],{"class":107},[97,53732,130],{"class":103},[97,53734,53735,53737,53739],{"class":99,"line":1510},[97,53736,51969],{"class":103},[97,53738,51984],{"class":107},[97,53740,130],{"class":103},[24,53742,53743],{},"只选123，不选456",[24,53745,53746],{},[19,53747],{"alt":92,"src":53748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[24,53750,53751],{},"返回的是一个数组的集合，不能对其进行直接修改",[24,53753,53754],{},[19,53755],{"alt":92,"src":53756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[24,53758,53759],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[24,53761,53762],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[138,53764,53765],{"start":195},[70,53766,53767],{},"其他方法来获取标签元素",[24,53769,53770],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[24,53772,53773],{},[19,53774],{"alt":92,"src":53775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[48,53777,53779],{"id":53778},"_313-操作元素的内容","3.1.3 操作元素的内容",[24,53781,53782],{},"设置修改DOM元素内容有两种方式：",[67,53784,53785,53788,53791,53794],{},[70,53786,53787],{},"元素.innerText=''",[70,53789,53790],{},"元素.innerHTML=''",[70,53792,53793],{},"不写字符串输出数字也是可以的",[70,53795,53796],{},"元素.innerHtml=1",[160,53798,53800],{"id":53799},"_3131-innertext","3.1.3.1 innerText",[24,53802,53803],{},[19,53804],{"alt":92,"src":53805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[24,53807,53808],{},"思路：实现了修改盒子中的内容！",[24,53810,53811],{},"它只显示纯文本，不解析标签",[160,53813,53815],{"id":53814},"_3132-innerhtml","3.1.3.2 innerHTML",[24,53817,53818],{},[19,53819],{"alt":92,"src":53820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[24,53822,53823],{},"相比于innerText，他的强大之处在于可以解析标签",[48,53825,53827],{"id":53826},"_314-操作元素属性","3.1.4 操作元素属性",[160,53829,53831],{"id":53830},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[24,53833,53834],{},[19,53835],{"alt":92,"src":53836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[160,53838,53840],{"id":53839},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[24,53842,53843],{},[19,53844],{"alt":92,"src":53845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[24,53847,53848],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[24,53850,53851],{},"div.style.backgroundColor = 'hotpink'",[24,53853,53854],{},"如果按照css的写法，-表示减，就会出错",[24,53856,53857],{},"body元素不需要再获取，直接用就行！！！！！！",[24,53859,53860],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[24,53862,53863],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[24,53865,53866],{},[19,53867],{"alt":92,"src":53868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[24,53870,53871],{},[19,53872],{"alt":92,"src":53873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[138,53875,53876,53879,53882,53885,53888,53891],{},[70,53877,53878],{},"className这个方式就是修改很多样式的时候来使用的！",[70,53880,53881],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[70,53883,53884],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[70,53886,53887],{},"className为属性名，如果还用class的话就导致与关键字冲突",[70,53889,53890],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[70,53892,53893,53894,53899],{},"解析标签的时候就变为了",[51795,53895],{"className":53896},[53897,53898],"nav","box",[53900,53901],"br",{},[24,53903,53904],{},"例子：",[51795,53906],{"className":53907},[53897],[51997,53909,53910],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[24,53912,53913],{},[19,53914],{"alt":92,"src":53915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[24,53917,53918],{},"追加和删除类名用classList",[24,53920,53921],{},"常用于类似于开关的操作",[24,53923,53924],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[24,53926,53927],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[160,53929,53931],{"id":53930},"_3143-牢记点","3.1.4.3 牢记点",[138,53933,53934,53937,53940,53943,53946,53949,53952,53955,53958],{},[70,53935,53936],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[70,53938,53939],{},"使用style属性操作css时不要忘记引号",[70,53941,53942],{},"使用className或者classList时也不要忘记引号",[70,53944,53945],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[70,53947,53948],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[70,53950,53951],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[70,53953,53954],{},"若： let arr=['1','2',3] arr[0]=1",[70,53956,53957],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[70,53959,53960],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[48,53962,53964],{"id":53963},"_315-操作表单元素","3.1.5 操作表单元素",[138,53966,53967],{},[70,53968,53969],{},"天生的属性",[24,53971,53972],{},[19,53973],{"alt":92,"src":53974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[24,53976,53977],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[24,53979,53980],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[24,53982,53983],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[24,53985,53986],{},[19,53987],{"alt":92,"src":53988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[87,53990,53992],{"className":50823,"code":53991,"language":50825,"meta":92,"style":92},"在复选框中如果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",[94,53993,53994,53999,54031,54036,54041,54046,54051,54055,54060,54065,54082,54094,54099],{"__ignoreMap":92},[97,53995,53996],{"class":99,"line":100},[97,53997,53998],{"class":103},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[97,54000,54001,54003,54006,54009,54011,54014,54016,54018,54020,54022,54024,54026,54029],{"class":99,"line":195},[97,54002,104],{"class":103},[97,54004,54005],{"class":107},"input",[97,54007,54008],{"class":111}," type",[97,54010,115],{"class":103},[97,54012,54013],{"class":118},"\"checkbox\"",[97,54015,112],{"class":111},[97,54017,115],{"class":103},[97,54019,7843],{"class":118},[97,54021,15149],{"class":111},[97,54023,115],{"class":103},[97,54025,7843],{"class":118},[97,54027,54028],{"class":111}," checked",[97,54030,130],{"class":103},[97,54032,54033],{"class":99,"line":241},[97,54034,54035],{"class":103},"不选的话：\n",[97,54037,54038],{"class":99,"line":1387},[97,54039,54040],{"class":103},"const input = document.querySelector('input')\n",[97,54042,54043],{"class":99,"line":1393},[97,54044,54045],{"class":103},"input.checked=false\n",[97,54047,54048],{"class":99,"line":1407},[97,54049,54050],{"class":103},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[97,54052,54053],{"class":99,"line":1413},[97,54054,2591],{"emptyLinePlaceholder":249},[97,54056,54057],{"class":99,"line":1504},[97,54058,54059],{"class":103},"禁用按钮：\n",[97,54061,54062],{"class":99,"line":1510},[97,54063,54064],{"class":103},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[97,54066,54067,54069,54072,54075,54078,54080],{"class":99,"line":1522},[97,54068,104],{"class":103},[97,54070,54071],{"class":107},"button",[97,54073,54074],{"class":111}," disabled",[97,54076,54077],{"class":103},">点击\u003C\u002F",[97,54079,54071],{"class":107},[97,54081,130],{"class":103},[97,54083,54084,54086,54088,54090,54092],{"class":99,"line":1804},[97,54085,104],{"class":103},[97,54087,54071],{"class":107},[97,54089,54077],{"class":103},[97,54091,54071],{"class":107},[97,54093,130],{"class":103},[97,54095,54096],{"class":99,"line":1809},[97,54097,54098],{"class":103},"const bt = document.querySelector('button')\n",[97,54100,54101],{"class":99,"line":1815},[97,54102,54103],{"class":103},"bt.disabled = false\n",[138,54105,54106],{"start":195},[70,54107,54108],{},"自定义属性",[24,54110,54111],{},[19,54112],{"alt":92,"src":54113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[87,54115,54117],{"className":53251,"code":54116,"language":53253,"meta":92,"style":92},"\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",[94,54118,54119,54127,54155,54174,54193,54212,54231,54239,54244,54249,54254,54259,54267],{"__ignoreMap":92},[97,54120,54121,54123,54125],{"class":99,"line":100},[97,54122,104],{"class":103},[97,54124,51984],{"class":107},[97,54126,130],{"class":103},[97,54128,54129,54131,54133,54136,54138,54140,54143,54145,54148,54151,54153],{"class":99,"line":195},[97,54130,52328],{"class":103},[97,54132,51795],{"class":107},[97,54134,54135],{"class":111}," data-id",[97,54137,115],{"class":103},[97,54139,3869],{"class":118},[97,54141,54142],{"class":111}," data-spm",[97,54144,115],{"class":103},[97,54146,54147],{"class":118},"\"我不知道\"",[97,54149,54150],{"class":103},">1\u003C\u002F",[97,54152,51795],{"class":107},[97,54154,130],{"class":103},[97,54156,54157,54159,54161,54163,54165,54167,54170,54172],{"class":99,"line":241},[97,54158,52328],{"class":103},[97,54160,51795],{"class":107},[97,54162,54135],{"class":111},[97,54164,115],{"class":103},[97,54166,3892],{"class":118},[97,54168,54169],{"class":103},">2\u003C\u002F",[97,54171,51795],{"class":107},[97,54173,130],{"class":103},[97,54175,54176,54178,54180,54182,54184,54186,54189,54191],{"class":99,"line":1387},[97,54177,52328],{"class":103},[97,54179,51795],{"class":107},[97,54181,54135],{"class":111},[97,54183,115],{"class":103},[97,54185,3905],{"class":118},[97,54187,54188],{"class":103},">3\u003C\u002F",[97,54190,51795],{"class":107},[97,54192,130],{"class":103},[97,54194,54195,54197,54199,54201,54203,54205,54208,54210],{"class":99,"line":1393},[97,54196,52328],{"class":103},[97,54198,51795],{"class":107},[97,54200,54135],{"class":111},[97,54202,115],{"class":103},[97,54204,3918],{"class":118},[97,54206,54207],{"class":103},">4\u003C\u002F",[97,54209,51795],{"class":107},[97,54211,130],{"class":103},[97,54213,54214,54216,54218,54220,54222,54224,54227,54229],{"class":99,"line":1407},[97,54215,52328],{"class":103},[97,54217,51795],{"class":107},[97,54219,54135],{"class":111},[97,54221,115],{"class":103},[97,54223,3939],{"class":118},[97,54225,54226],{"class":103},">5\u003C\u002F",[97,54228,51795],{"class":107},[97,54230,130],{"class":103},[97,54232,54233,54235,54237],{"class":99,"line":1413},[97,54234,52328],{"class":103},[97,54236,51997],{"class":107},[97,54238,130],{"class":103},[97,54240,54241],{"class":99,"line":1504},[97,54242,54243],{"class":103},"    const one = document.querySelector('div')\n",[97,54245,54246],{"class":99,"line":1510},[97,54247,54248],{"class":103},"    console.log(one.dataset)\n",[97,54250,54251],{"class":99,"line":1522},[97,54252,54253],{"class":103},"    console.log(one.dataset.id)\n",[97,54255,54256],{"class":99,"line":1804},[97,54257,54258],{"class":103},"    console.log(one.dataset.spm)\n",[97,54260,54261,54263,54265],{"class":99,"line":1809},[97,54262,52601],{"class":103},[97,54264,51997],{"class":107},[97,54266,130],{"class":103},[97,54268,54269,54271,54273],{"class":99,"line":1815},[97,54270,51969],{"class":103},[97,54272,51984],{"class":107},[97,54274,130],{"class":103},[24,54276,54277],{},[19,54278],{"alt":92,"src":54279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[24,54281,54282],{},"document.querySelector选择的是第一个对象（元素）",[48,54284,54286],{"id":54285},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[24,54288,54289],{},[19,54290],{"alt":92,"src":54291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[24,54293,54294],{},[19,54295],{"alt":92,"src":54296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[24,54298,54299],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51997,54301,54302],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[24,54304,54305],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51997,54307,54308],{},"\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",[24,54310,54311],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[24,54313,54314],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[24,54316,54317],{},"单位为毫秒！！！",[24,54319,54320],{},"可以搭配匿名函数来用！！！",[24,54322,54323],{},"setInterval(function () {",[24,54325,54326],{},"alert('两秒执行一次')",[24,54328,54329],{},"}, 2000)",[24,54331,54332],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[24,54334,54335],{},"function fn() {",[24,54337,54338],{},"document.write(1)",[24,54340,1265],{},[24,54342,54343],{},"setInterval(fn, 1000)",[24,54345,54346],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[24,54348,54349],{},"setInterval('fn()', 1000)",[24,54351,54352],{},[19,54353],{"alt":92,"src":54354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[160,54356,54358],{"id":54357},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[87,54360,54362],{"className":50823,"code":54361,"language":50825,"meta":92,"style":92},"\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",[94,54363,54364,54374,54388,54392,54400,54414,54434,54446,54454,54458,54466,54503,54508,54513,54518,54526,54534,54556,54564,54569,54591,54596,54601,54612,54617,54637,54645,54660,54675,54686,54691,54701,54711,54715,54724,54728,54736,54744,54748],{"__ignoreMap":92},[97,54365,54366,54368,54370,54372],{"class":99,"line":100},[97,54367,51487],{"class":103},[97,54369,51490],{"class":107},[97,54371,51493],{"class":111},[97,54373,130],{"class":103},[97,54375,54376,54378,54380,54382,54384,54386],{"class":99,"line":195},[97,54377,104],{"class":103},[97,54379,50825],{"class":107},[97,54381,51504],{"class":111},[97,54383,115],{"class":103},[97,54385,51509],{"class":118},[97,54387,130],{"class":103},[97,54389,54390],{"class":99,"line":241},[97,54391,2591],{"emptyLinePlaceholder":249},[97,54393,54394,54396,54398],{"class":99,"line":1387},[97,54395,104],{"class":103},[97,54397,51522],{"class":107},[97,54399,130],{"class":103},[97,54401,54402,54404,54406,54408,54410,54412],{"class":99,"line":1393},[97,54403,52328],{"class":103},[97,54405,108],{"class":107},[97,54407,51534],{"class":111},[97,54409,115],{"class":103},[97,54411,51539],{"class":118},[97,54413,130],{"class":103},[97,54415,54416,54418,54420,54422,54424,54426,54428,54430,54432],{"class":99,"line":1407},[97,54417,52328],{"class":103},[97,54419,108],{"class":107},[97,54421,112],{"class":111},[97,54423,115],{"class":103},[97,54425,119],{"class":118},[97,54427,122],{"class":111},[97,54429,115],{"class":103},[97,54431,127],{"class":118},[97,54433,130],{"class":103},[97,54435,54436,54438,54440,54442,54444],{"class":99,"line":1413},[97,54437,52328],{"class":103},[97,54439,51591],{"class":107},[97,54441,51594],{"class":103},[97,54443,51591],{"class":107},[97,54445,130],{"class":103},[97,54447,54448,54450,54452],{"class":99,"line":1504},[97,54449,51969],{"class":103},[97,54451,51522],{"class":107},[97,54453,130],{"class":103},[97,54455,54456],{"class":99,"line":1510},[97,54457,2591],{"emptyLinePlaceholder":249},[97,54459,54460,54462,54464],{"class":99,"line":1522},[97,54461,104],{"class":103},[97,54463,51984],{"class":107},[97,54465,130],{"class":103},[97,54467,54468,54470,54473,54475,54477,54479,54481,54483,54485,54488,54490,54493,54496,54498,54501],{"class":99,"line":1804},[97,54469,52328],{"class":103},[97,54471,54472],{"class":107},"textarea",[97,54474,112],{"class":111},[97,54476,115],{"class":103},[97,54478,7843],{"class":118},[97,54480,15149],{"class":111},[97,54482,115],{"class":103},[97,54484,7843],{"class":118},[97,54486,54487],{"class":111}," cols",[97,54489,115],{"class":103},[97,54491,54492],{"class":118},"\"30\"",[97,54494,54495],{"class":111}," rows",[97,54497,115],{"class":103},[97,54499,54500],{"class":118},"\"10\"",[97,54502,130],{"class":103},[97,54504,54505],{"class":99,"line":1809},[97,54506,54507],{"class":103},"        用户注册协议\n",[97,54509,54510],{"class":99,"line":1815},[97,54511,54512],{"class":103},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[97,54514,54515],{"class":99,"line":1820},[97,54516,54517],{"class":103},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[97,54519,54520,54522,54524],{"class":99,"line":1834},[97,54521,51960],{"class":103},[97,54523,54472],{"class":107},[97,54525,130],{"class":103},[97,54527,54528,54530,54532],{"class":99,"line":1839},[97,54529,52328],{"class":103},[97,54531,53900],{"class":107},[97,54533,130],{"class":103},[97,54535,54536,54538,54540,54542,54544,54547,54549,54552,54554],{"class":99,"line":1845},[97,54537,52328],{"class":103},[97,54539,54071],{"class":107},[97,54541,53670],{"class":111},[97,54543,115],{"class":103},[97,54545,54546],{"class":118},"\"btn\"",[97,54548,54074],{"class":111},[97,54550,54551],{"class":103},">我已经阅读用户协议(5)\u003C\u002F",[97,54553,54071],{"class":107},[97,54555,130],{"class":103},[97,54557,54558,54560,54562],{"class":99,"line":1866},[97,54559,52328],{"class":103},[97,54561,51997],{"class":107},[97,54563,130],{"class":103},[97,54565,54566],{"class":99,"line":1871},[97,54567,54568],{"class":191},"    \u002F\u002F 1. 获取元素\n",[97,54570,54571,54573,54576,54578,54581,54584,54586,54589],{"class":99,"line":1885},[97,54572,11412],{"class":319},[97,54574,54575],{"class":370}," btn",[97,54577,13755],{"class":319},[97,54579,54580],{"class":103}," document.",[97,54582,54583],{"class":111},"querySelector",[97,54585,323],{"class":103},[97,54587,54588],{"class":118},"'.btn'",[97,54590,329],{"class":103},[97,54592,54593],{"class":99,"line":1890},[97,54594,54595],{"class":191},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[97,54597,54598],{"class":99,"line":1919},[97,54599,54600],{"class":191},"    \u002F\u002F 2. 倒计时\n",[97,54602,54603,54605,54607,54609],{"class":99,"line":1924},[97,54604,52403],{"class":319},[97,54606,9629],{"class":103},[97,54608,115],{"class":319},[97,54610,54611],{"class":370}," 5\n",[97,54613,54614],{"class":99,"line":1941},[97,54615,54616],{"class":191},"    \u002F\u002F 2.1 开启定时器\n",[97,54618,54619,54621,54624,54626,54629,54631,54634],{"class":99,"line":1946},[97,54620,52403],{"class":319},[97,54622,54623],{"class":103}," n ",[97,54625,115],{"class":319},[97,54627,54628],{"class":111}," setInterval",[97,54630,323],{"class":103},[97,54632,54633],{"class":319},"function",[97,54635,54636],{"class":103}," () {\n",[97,54638,54639,54642],{"class":99,"line":1951},[97,54640,54641],{"class":103},"      i",[97,54643,54644],{"class":319},"--\n",[97,54646,54647,54650,54652,54655,54657],{"class":99,"line":1956},[97,54648,54649],{"class":103},"      btn.innerHTML ",[97,54651,115],{"class":319},[97,54653,54654],{"class":118}," `我已经阅读用户协议(${",[97,54656,761],{"class":103},[97,54658,54659],{"class":118},"})`\n",[97,54661,54662,54665,54668,54671,54673],{"class":99,"line":1970},[97,54663,54664],{"class":319},"      if",[97,54666,54667],{"class":103}," (i ",[97,54669,54670],{"class":319},"===",[97,54672,4284],{"class":370},[97,54674,12633],{"class":103},[97,54676,54677,54680,54683],{"class":99,"line":1975},[97,54678,54679],{"class":111},"        clearInterval",[97,54681,54682],{"class":103},"(n)  ",[97,54684,54685],{"class":191},"\u002F\u002F 关闭定时器\n",[97,54687,54688],{"class":99,"line":2768},[97,54689,54690],{"class":191},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[97,54692,54693,54696,54698],{"class":99,"line":2782},[97,54694,54695],{"class":103},"        btn.disabled ",[97,54697,115],{"class":319},[97,54699,54700],{"class":370}," false\n",[97,54702,54703,54706,54708],{"class":99,"line":2790},[97,54704,54705],{"class":103},"        btn.innerHTML ",[97,54707,115],{"class":319},[97,54709,54710],{"class":118}," '同意'\n",[97,54712,54713],{"class":99,"line":2795},[97,54714,52582],{"class":103},[97,54716,54717,54720,54722],{"class":99,"line":2801},[97,54718,54719],{"class":103},"    }, ",[97,54721,6601],{"class":370},[97,54723,329],{"class":103},[97,54725,54726],{"class":99,"line":2807},[97,54727,2591],{"emptyLinePlaceholder":249},[97,54729,54730,54732,54734],{"class":99,"line":2812},[97,54731,52601],{"class":103},[97,54733,51997],{"class":107},[97,54735,130],{"class":103},[97,54737,54738,54740,54742],{"class":99,"line":8139},[97,54739,51969],{"class":103},[97,54741,51984],{"class":107},[97,54743,130],{"class":103},[97,54745,54746],{"class":99,"line":8163},[97,54747,2591],{"emptyLinePlaceholder":249},[97,54749,54750,54752,54754],{"class":99,"line":8168},[97,54751,51969],{"class":103},[97,54753,50825],{"class":107},[97,54755,130],{"class":103},[24,54757,54758],{},"不要一直想着用死循环,避免死循环",[24,54760,54761,54764],{},[94,54762,54763],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[160,54766,54768],{"id":54767},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[138,54770,54771],{},[70,54772,54773],{},"法1",[87,54775,54777],{"className":50823,"code":54776,"language":50825,"meta":92,"style":92},"\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",[94,54778,54779,54789,54803,54807,54815,54829,54849,54861,54869,54875,54886,54897,54901,54905,54912,54924,54928,54932,54939,54951,54965,54978,54992,54996,55000,55007,55018,55029,55040,55052,55064,55076,55080,55084,55092,55102,55115,55127,55140,55144,55148,55155,55165,55177,55189,55200,55211,55221,55233,55245,55249,55253,55262,55274,55286,55314,55327,55331,55335,55342,55353,55357,55365,55373,55377,55385,55399,55414,55438,55446,55461,55474,55482,55503,55515,55527,55539,55551,55563,55575,55587,55596,55604,55612,55620,55632,55655,55674,55693,55712,55731,55750,55769,55789,55793,55813,55832,55852,55873,55884,55901,55911,55921,55931,55936,55941,55946,55951,55976,55989,55993,56016,56020,56028,56036,56044,56048],{"__ignoreMap":92},[97,54780,54781,54783,54785,54787],{"class":99,"line":100},[97,54782,51487],{"class":103},[97,54784,51490],{"class":107},[97,54786,51493],{"class":111},[97,54788,130],{"class":103},[97,54790,54791,54793,54795,54797,54799,54801],{"class":99,"line":195},[97,54792,104],{"class":103},[97,54794,50825],{"class":107},[97,54796,51504],{"class":111},[97,54798,115],{"class":103},[97,54800,51509],{"class":118},[97,54802,130],{"class":103},[97,54804,54805],{"class":99,"line":241},[97,54806,2591],{"emptyLinePlaceholder":249},[97,54808,54809,54811,54813],{"class":99,"line":1387},[97,54810,104],{"class":103},[97,54812,51522],{"class":107},[97,54814,130],{"class":103},[97,54816,54817,54819,54821,54823,54825,54827],{"class":99,"line":1393},[97,54818,52328],{"class":103},[97,54820,108],{"class":107},[97,54822,51534],{"class":111},[97,54824,115],{"class":103},[97,54826,51539],{"class":118},[97,54828,130],{"class":103},[97,54830,54831,54833,54835,54837,54839,54841,54843,54845,54847],{"class":99,"line":1407},[97,54832,52328],{"class":103},[97,54834,108],{"class":107},[97,54836,112],{"class":111},[97,54838,115],{"class":103},[97,54840,119],{"class":118},[97,54842,122],{"class":111},[97,54844,115],{"class":103},[97,54846,127],{"class":118},[97,54848,130],{"class":103},[97,54850,54851,54853,54855,54857,54859],{"class":99,"line":1413},[97,54852,52328],{"class":103},[97,54854,51591],{"class":107},[97,54856,51594],{"class":103},[97,54858,51591],{"class":107},[97,54860,130],{"class":103},[97,54862,54863,54865,54867],{"class":99,"line":1504},[97,54864,52328],{"class":103},[97,54866,231],{"class":107},[97,54868,130],{"class":103},[97,54870,54871,54873],{"class":99,"line":1510},[97,54872,6594],{"class":107},[97,54874,15762],{"class":103},[97,54876,54877,54880,54882,54884],{"class":99,"line":1522},[97,54878,54879],{"class":370},"      padding",[97,54881,51621],{"class":103},[97,54883,511],{"class":370},[97,54885,1483],{"class":103},[97,54887,54888,54891,54893,54895],{"class":99,"line":1804},[97,54889,54890],{"class":370},"      margin",[97,54892,51621],{"class":103},[97,54894,511],{"class":370},[97,54896,1483],{"class":103},[97,54898,54899],{"class":99,"line":1809},[97,54900,2378],{"class":103},[97,54902,54903],{"class":99,"line":1815},[97,54904,2591],{"emptyLinePlaceholder":249},[97,54906,54907,54910],{"class":99,"line":1820},[97,54908,54909],{"class":107},"    li",[97,54911,15762],{"class":103},[97,54913,54914,54917,54919,54922],{"class":99,"line":1834},[97,54915,54916],{"class":370},"      list-style",[97,54918,51621],{"class":103},[97,54920,54921],{"class":370},"none",[97,54923,1483],{"class":103},[97,54925,54926],{"class":99,"line":1839},[97,54927,2378],{"class":103},[97,54929,54930],{"class":99,"line":1845},[97,54931,2591],{"emptyLinePlaceholder":249},[97,54933,54934,54937],{"class":99,"line":1866},[97,54935,54936],{"class":111},"    .box",[97,54938,15762],{"class":103},[97,54940,54941,54944,54946,54949],{"class":99,"line":1871},[97,54942,54943],{"class":370},"      position",[97,54945,51621],{"class":103},[97,54947,54948],{"class":370},"relative",[97,54950,1483],{"class":103},[97,54952,54953,54956,54958,54961,54963],{"class":99,"line":1885},[97,54954,54955],{"class":370},"      width",[97,54957,51621],{"class":103},[97,54959,54960],{"class":370},"976",[97,54962,51676],{"class":319},[97,54964,1483],{"class":103},[97,54966,54967,54970,54972,54974,54976],{"class":99,"line":1890},[97,54968,54969],{"class":370},"      height",[97,54971,51621],{"class":103},[97,54973,1731],{"class":370},[97,54975,51676],{"class":319},[97,54977,1483],{"class":103},[97,54979,54980,54982,54984,54986,54988,54990],{"class":99,"line":1919},[97,54981,54890],{"class":370},[97,54983,51621],{"class":103},[97,54985,631],{"class":370},[97,54987,51676],{"class":319},[97,54989,51740],{"class":370},[97,54991,1483],{"class":103},[97,54993,54994],{"class":99,"line":1924},[97,54995,2378],{"class":103},[97,54997,54998],{"class":99,"line":1941},[97,54999,2591],{"emptyLinePlaceholder":249},[97,55001,55002,55005],{"class":99,"line":1946},[97,55003,55004],{"class":111},"    .slider-footer",[97,55006,15762],{"class":103},[97,55008,55009,55011,55013,55016],{"class":99,"line":1951},[97,55010,54943],{"class":370},[97,55012,51621],{"class":103},[97,55014,55015],{"class":370},"absolute",[97,55017,1483],{"class":103},[97,55019,55020,55023,55025,55027],{"class":99,"line":1956},[97,55021,55022],{"class":370},"      left",[97,55024,51621],{"class":103},[97,55026,511],{"class":370},[97,55028,1483],{"class":103},[97,55030,55031,55034,55036,55038],{"class":99,"line":1970},[97,55032,55033],{"class":370},"      bottom",[97,55035,51621],{"class":103},[97,55037,511],{"class":370},[97,55039,1483],{"class":103},[97,55041,55042,55044,55046,55048,55050],{"class":99,"line":1975},[97,55043,54955],{"class":370},[97,55045,51621],{"class":103},[97,55047,631],{"class":370},[97,55049,648],{"class":319},[97,55051,1483],{"class":103},[97,55053,55054,55056,55058,55060,55062],{"class":99,"line":2768},[97,55055,54969],{"class":370},[97,55057,51621],{"class":103},[97,55059,895],{"class":370},[97,55061,648],{"class":319},[97,55063,1483],{"class":103},[97,55065,55066,55069,55071,55074],{"class":99,"line":2782},[97,55067,55068],{"class":370},"      background-color",[97,55070,51621],{"class":103},[97,55072,55073],{"class":370},"skyblue",[97,55075,1483],{"class":103},[97,55077,55078],{"class":99,"line":2790},[97,55079,2378],{"class":103},[97,55081,55082],{"class":99,"line":2795},[97,55083,2591],{"emptyLinePlaceholder":249},[97,55085,55086,55088,55090],{"class":99,"line":2801},[97,55087,55004],{"class":111},[97,55089,7016],{"class":107},[97,55091,15762],{"class":103},[97,55093,55094,55096,55098,55100],{"class":99,"line":2807},[97,55095,54943],{"class":370},[97,55097,51621],{"class":103},[97,55099,55015],{"class":370},[97,55101,1483],{"class":103},[97,55103,55104,55107,55109,55111,55113],{"class":99,"line":2812},[97,55105,55106],{"class":370},"      font-size",[97,55108,51621],{"class":103},[97,55110,1221],{"class":370},[97,55112,51676],{"class":319},[97,55114,1483],{"class":103},[97,55116,55117,55119,55121,55123,55125],{"class":99,"line":8139},[97,55118,55022],{"class":370},[97,55120,51621],{"class":103},[97,55122,1020],{"class":370},[97,55124,51676],{"class":319},[97,55126,1483],{"class":103},[97,55128,55129,55132,55134,55136,55138],{"class":99,"line":8163},[97,55130,55131],{"class":370},"      top",[97,55133,51621],{"class":103},[97,55135,639],{"class":370},[97,55137,51676],{"class":319},[97,55139,1483],{"class":103},[97,55141,55142],{"class":99,"line":8168},[97,55143,2378],{"class":103},[97,55145,55146],{"class":99,"line":8174},[97,55147,2591],{"emptyLinePlaceholder":249},[97,55149,55150,55153],{"class":99,"line":8201},[97,55151,55152],{"class":107},"    ul",[97,55154,15762],{"class":103},[97,55156,55157,55159,55161,55163],{"class":99,"line":8206},[97,55158,54943],{"class":370},[97,55160,51621],{"class":103},[97,55162,55015],{"class":370},[97,55164,1483],{"class":103},[97,55166,55167,55169,55171,55173,55175],{"class":99,"line":8212},[97,55168,55131],{"class":370},[97,55170,51621],{"class":103},[97,55172,1101],{"class":370},[97,55174,51676],{"class":319},[97,55176,1483],{"class":103},[97,55178,55179,55181,55183,55185,55187],{"class":99,"line":8224},[97,55180,55022],{"class":370},[97,55182,51621],{"class":103},[97,55184,1020],{"class":370},[97,55186,51676],{"class":319},[97,55188,1483],{"class":103},[97,55190,55191,55194,55196,55198],{"class":99,"line":8236},[97,55192,55193],{"class":370},"      display",[97,55195,51621],{"class":103},[97,55197,51661],{"class":370},[97,55199,1483],{"class":103},[97,55201,55202,55205,55207,55209],{"class":99,"line":8248},[97,55203,55204],{"class":370},"      justify-content",[97,55206,51621],{"class":103},[97,55208,51852],{"class":370},[97,55210,1483],{"class":103},[97,55212,55213,55215,55217,55219],{"class":99,"line":9907},[97,55214,54943],{"class":370},[97,55216,51621],{"class":103},[97,55218,55015],{"class":370},[97,55220,1483],{"class":103},[97,55222,55223,55225,55227,55229,55231],{"class":99,"line":9932},[97,55224,54955],{"class":370},[97,55226,51621],{"class":103},[97,55228,4183],{"class":370},[97,55230,51676],{"class":319},[97,55232,1483],{"class":103},[97,55234,55235,55237,55239,55241,55243],{"class":99,"line":9955},[97,55236,54969],{"class":370},[97,55238,51621],{"class":103},[97,55240,1020],{"class":370},[97,55242,51676],{"class":319},[97,55244,1483],{"class":103},[97,55246,55247],{"class":99,"line":9979},[97,55248,2378],{"class":103},[97,55250,55251],{"class":99,"line":9984},[97,55252,2591],{"emptyLinePlaceholder":249},[97,55254,55255,55257,55260],{"class":99,"line":9989},[97,55256,55152],{"class":107},[97,55258,55259],{"class":107}," li",[97,55261,15762],{"class":103},[97,55263,55264,55266,55268,55270,55272],{"class":99,"line":9994},[97,55265,54955],{"class":370},[97,55267,51621],{"class":103},[97,55269,1020],{"class":370},[97,55271,51676],{"class":319},[97,55273,1483],{"class":103},[97,55275,55276,55278,55280,55282,55284],{"class":99,"line":10003},[97,55277,54969],{"class":370},[97,55279,51621],{"class":103},[97,55281,1020],{"class":370},[97,55283,51676],{"class":319},[97,55285,1483],{"class":103},[97,55287,55288,55290,55292,55295,55297,55299,55301,55303,55305,55307,55309,55312],{"class":99,"line":10008},[97,55289,55068],{"class":370},[97,55291,51621],{"class":103},[97,55293,55294],{"class":370},"rgba",[97,55296,323],{"class":103},[97,55298,511],{"class":370},[97,55300,12626],{"class":103},[97,55302,511],{"class":370},[97,55304,12626],{"class":103},[97,55306,511],{"class":370},[97,55308,12626],{"class":103},[97,55310,55311],{"class":370},".4",[97,55313,2910],{"class":103},[97,55315,55316,55319,55321,55323,55325],{"class":99,"line":10014},[97,55317,55318],{"class":370},"      border-radius",[97,55320,51621],{"class":103},[97,55322,766],{"class":370},[97,55324,51676],{"class":319},[97,55326,1483],{"class":103},[97,55328,55329],{"class":99,"line":10035},[97,55330,2378],{"class":103},[97,55332,55333],{"class":99,"line":10041},[97,55334,2591],{"emptyLinePlaceholder":249},[97,55336,55337,55340],{"class":99,"line":10055},[97,55338,55339],{"class":111},"    .activate",[97,55341,15762],{"class":103},[97,55343,55344,55346,55348,55351],{"class":99,"line":10061},[97,55345,55068],{"class":370},[97,55347,51621],{"class":103},[97,55349,55350],{"class":370},"#f7f7f7",[97,55352,1483],{"class":103},[97,55354,55355],{"class":99,"line":10088},[97,55356,2378],{"class":103},[97,55358,55359,55361,55363],{"class":99,"line":10097},[97,55360,52601],{"class":103},[97,55362,231],{"class":107},[97,55364,130],{"class":103},[97,55366,55367,55369,55371],{"class":99,"line":10103},[97,55368,51969],{"class":103},[97,55370,51522],{"class":107},[97,55372,130],{"class":103},[97,55374,55375],{"class":99,"line":10111},[97,55376,2591],{"emptyLinePlaceholder":249},[97,55378,55379,55381,55383],{"class":99,"line":10116},[97,55380,104],{"class":103},[97,55382,51984],{"class":107},[97,55384,130],{"class":103},[97,55386,55387,55389,55391,55393,55395,55397],{"class":99,"line":16794},[97,55388,52328],{"class":103},[97,55390,51795],{"class":107},[97,55392,53670],{"class":111},[97,55394,115],{"class":103},[97,55396,53675],{"class":118},[97,55398,130],{"class":103},[97,55400,55401,55403,55405,55407,55409,55412],{"class":99,"line":16800},[97,55402,51529],{"class":103},[97,55404,51795],{"class":107},[97,55406,53670],{"class":111},[97,55408,115],{"class":103},[97,55410,55411],{"class":118},"\"slider-wrapper\"",[97,55413,130],{"class":103},[97,55415,55416,55419,55421,55424,55426,55429,55432,55434,55436],{"class":99,"line":16823},[97,55417,55418],{"class":103},"      \u003C",[97,55420,19],{"class":107},[97,55422,55423],{"class":111}," src",[97,55425,115],{"class":103},[97,55427,55428],{"class":118},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[97,55430,55431],{"class":111}," alt",[97,55433,115],{"class":103},[97,55435,7843],{"class":118},[97,55437,130],{"class":103},[97,55439,55440,55442,55444],{"class":99,"line":16829},[97,55441,51960],{"class":103},[97,55443,51795],{"class":107},[97,55445,130],{"class":103},[97,55447,55448,55450,55452,55454,55456,55459],{"class":99,"line":16852},[97,55449,51529],{"class":103},[97,55451,51795],{"class":107},[97,55453,53670],{"class":111},[97,55455,115],{"class":103},[97,55457,55458],{"class":118},"\"slider-footer\"",[97,55460,130],{"class":103},[97,55462,55463,55465,55467,55470,55472],{"class":99,"line":16866},[97,55464,55418],{"class":103},[97,55466,24],{"class":107},[97,55468,55469],{"class":103},">对人类来说会不会太超前了?\u003C\u002F",[97,55471,24],{"class":107},[97,55473,130],{"class":103},[97,55475,55476,55478,55480],{"class":99,"line":16886},[97,55477,55418],{"class":103},[97,55479,67],{"class":107},[97,55481,130],{"class":103},[97,55483,55484,55487,55489,55491,55493,55496,55499,55501],{"class":99,"line":16892},[97,55485,55486],{"class":103},"        \u003C",[97,55488,70],{"class":107},[97,55490,53670],{"class":111},[97,55492,115],{"class":103},[97,55494,55495],{"class":118},"\"activate\"",[97,55497,55498],{"class":103},">\u003C\u002F",[97,55500,70],{"class":107},[97,55502,130],{"class":103},[97,55504,55505,55507,55509,55511,55513],{"class":99,"line":16903},[97,55506,55486],{"class":103},[97,55508,70],{"class":107},[97,55510,55498],{"class":103},[97,55512,70],{"class":107},[97,55514,130],{"class":103},[97,55516,55517,55519,55521,55523,55525],{"class":99,"line":16926},[97,55518,55486],{"class":103},[97,55520,70],{"class":107},[97,55522,55498],{"class":103},[97,55524,70],{"class":107},[97,55526,130],{"class":103},[97,55528,55529,55531,55533,55535,55537],{"class":99,"line":16948},[97,55530,55486],{"class":103},[97,55532,70],{"class":107},[97,55534,55498],{"class":103},[97,55536,70],{"class":107},[97,55538,130],{"class":103},[97,55540,55541,55543,55545,55547,55549],{"class":99,"line":16953},[97,55542,55486],{"class":103},[97,55544,70],{"class":107},[97,55546,55498],{"class":103},[97,55548,70],{"class":107},[97,55550,130],{"class":103},[97,55552,55553,55555,55557,55559,55561],{"class":99,"line":16959},[97,55554,55486],{"class":103},[97,55556,70],{"class":107},[97,55558,55498],{"class":103},[97,55560,70],{"class":107},[97,55562,130],{"class":103},[97,55564,55565,55567,55569,55571,55573],{"class":99,"line":16973},[97,55566,55486],{"class":103},[97,55568,70],{"class":107},[97,55570,55498],{"class":103},[97,55572,70],{"class":107},[97,55574,130],{"class":103},[97,55576,55577,55579,55581,55583,55585],{"class":99,"line":16986},[97,55578,55486],{"class":103},[97,55580,70],{"class":107},[97,55582,55498],{"class":103},[97,55584,70],{"class":107},[97,55586,130],{"class":103},[97,55588,55589,55592,55594],{"class":99,"line":16991},[97,55590,55591],{"class":103},"      \u003C\u002F",[97,55593,67],{"class":107},[97,55595,130],{"class":103},[97,55597,55598,55600,55602],{"class":99,"line":17005},[97,55599,51960],{"class":103},[97,55601,51795],{"class":107},[97,55603,130],{"class":103},[97,55605,55606,55608,55610],{"class":99,"line":17010},[97,55607,52601],{"class":103},[97,55609,51795],{"class":107},[97,55611,130],{"class":103},[97,55613,55614,55616,55618],{"class":99,"line":17016},[97,55615,52328],{"class":103},[97,55617,51997],{"class":107},[97,55619,130],{"class":103},[97,55621,55622,55624,55627,55629],{"class":99,"line":17021},[97,55623,11412],{"class":319},[97,55625,55626],{"class":370}," arrImage",[97,55628,13755],{"class":319},[97,55630,55631],{"class":103}," [\n",[97,55633,55634,55637,55640,55643,55646,55649,55652],{"class":99,"line":17035},[97,55635,55636],{"class":103},"      { url: ",[97,55638,55639],{"class":118},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[97,55641,55642],{"class":103},", title: ",[97,55644,55645],{"class":118},"'对人类来说会不会太超前了?'",[97,55647,55648],{"class":103},", color: ",[97,55650,55651],{"class":118},"'rgba(100,67,68)'",[97,55653,55654],{"class":103}," },\n",[97,55656,55657,55659,55662,55664,55667,55669,55672],{"class":99,"line":17040},[97,55658,55636],{"class":103},[97,55660,55661],{"class":118},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[97,55663,55642],{"class":103},[97,55665,55666],{"class":118},"'开启剑与雪的黑暗传说!'",[97,55668,55648],{"class":103},[97,55670,55671],{"class":118},"'rgba(43,35,26)'",[97,55673,55654],{"class":103},[97,55675,55676,55678,55681,55683,55686,55688,55691],{"class":99,"line":17045},[97,55677,55636],{"class":103},[97,55679,55680],{"class":118},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[97,55682,55642],{"class":103},[97,55684,55685],{"class":118},"'真正的jo厨出现了!'",[97,55687,55648],{"class":103},[97,55689,55690],{"class":118},"'rgba(36,31,33)'",[97,55692,55654],{"class":103},[97,55694,55695,55697,55700,55702,55705,55707,55710],{"class":99,"line":17059},[97,55696,55636],{"class":103},[97,55698,55699],{"class":118},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[97,55701,55642],{"class":103},[97,55703,55704],{"class":118},"'李玉刚:让世界通过b站看到东方大国文化'",[97,55706,55648],{"class":103},[97,55708,55709],{"class":118},"'rgba(139,98,66)'",[97,55711,55654],{"class":103},[97,55713,55714,55716,55719,55721,55724,55726,55729],{"class":99,"line":17071},[97,55715,55636],{"class":103},[97,55717,55718],{"class":118},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[97,55720,55642],{"class":103},[97,55722,55723],{"class":118},"'快来分享你的寒假日常吧'",[97,55725,55648],{"class":103},[97,55727,55728],{"class":118},"'rgba(67,90,92)'",[97,55730,55654],{"class":103},[97,55732,55733,55735,55738,55740,55743,55745,55748],{"class":99,"line":17076},[97,55734,55636],{"class":103},[97,55736,55737],{"class":118},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[97,55739,55642],{"class":103},[97,55741,55742],{"class":118},"'哔哩哔哩小年YEAR'",[97,55744,55648],{"class":103},[97,55746,55747],{"class":118},"'rgba(166,131,143)'",[97,55749,55654],{"class":103},[97,55751,55752,55754,55757,55759,55762,55764,55767],{"class":99,"line":17089},[97,55753,55636],{"class":103},[97,55755,55756],{"class":118},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[97,55758,55642],{"class":103},[97,55760,55761],{"class":118},"'一站式解决你的电脑配置问题'",[97,55763,55648],{"class":103},[97,55765,55766],{"class":118},"'rgba(53,29,25)'",[97,55768,55654],{"class":103},[97,55770,55771,55773,55776,55778,55781,55783,55786],{"class":99,"line":17094},[97,55772,55636],{"class":103},[97,55774,55775],{"class":118},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[97,55777,55642],{"class":103},[97,55779,55780],{"class":118},"'谁不想和小猫咪贴贴呢?'",[97,55782,55648],{"class":103},[97,55784,55785],{"class":118},"'rgba(99,72,114)'",[97,55787,55788],{"class":103}," }\n",[97,55790,55791],{"class":99,"line":17099},[97,55792,53293],{"class":103},[97,55794,55795,55797,55800,55802,55804,55806,55808,55811],{"class":99,"line":17104},[97,55796,11412],{"class":319},[97,55798,55799],{"class":370}," img",[97,55801,13755],{"class":319},[97,55803,54580],{"class":103},[97,55805,54583],{"class":111},[97,55807,323],{"class":103},[97,55809,55810],{"class":118},"'.slider-wrapper img'",[97,55812,329],{"class":103},[97,55814,55815,55817,55819,55821,55823,55825,55827,55830],{"class":99,"line":17117},[97,55816,11412],{"class":319},[97,55818,7016],{"class":370},[97,55820,13755],{"class":319},[97,55822,54580],{"class":103},[97,55824,54583],{"class":111},[97,55826,323],{"class":103},[97,55828,55829],{"class":118},"'.slider-footer p'",[97,55831,329],{"class":103},[97,55833,55834,55836,55839,55841,55843,55845,55847,55850],{"class":99,"line":17122},[97,55835,11412],{"class":319},[97,55837,55838],{"class":370}," color",[97,55840,13755],{"class":319},[97,55842,54580],{"class":103},[97,55844,54583],{"class":111},[97,55846,323],{"class":103},[97,55848,55849],{"class":118},"'.slider-footer'",[97,55851,329],{"class":103},[97,55853,55854,55856,55859,55861,55863,55866,55868,55871],{"class":99,"line":32823},[97,55855,11412],{"class":319},[97,55857,55858],{"class":370}," lis",[97,55860,13755],{"class":319},[97,55862,54580],{"class":103},[97,55864,55865],{"class":111},"querySelectorAll",[97,55867,323],{"class":103},[97,55869,55870],{"class":118},"'.slider-footer ul li'",[97,55872,329],{"class":103},[97,55874,55875,55877,55879,55881],{"class":99,"line":32829},[97,55876,52403],{"class":319},[97,55878,9629],{"class":103},[97,55880,115],{"class":319},[97,55882,55883],{"class":370}," 1\n",[97,55885,55886,55888,55891,55893,55895,55897,55899],{"class":99,"line":32835},[97,55887,52403],{"class":319},[97,55889,55890],{"class":103}," timer ",[97,55892,115],{"class":319},[97,55894,54628],{"class":111},[97,55896,323],{"class":103},[97,55898,54633],{"class":319},[97,55900,54636],{"class":103},[97,55902,55903,55906,55908],{"class":99,"line":32841},[97,55904,55905],{"class":103},"      img.src ",[97,55907,115],{"class":319},[97,55909,55910],{"class":103}," arrImage[i].url\n",[97,55912,55913,55916,55918],{"class":99,"line":32847},[97,55914,55915],{"class":103},"      p.innerHTML ",[97,55917,115],{"class":319},[97,55919,55920],{"class":103}," arrImage[i].title\n",[97,55922,55923,55926,55928],{"class":99,"line":32858},[97,55924,55925],{"class":103},"      color.style.backgroundColor ",[97,55927,115],{"class":319},[97,55929,55930],{"class":103}," arrImage[i].color\n",[97,55932,55933],{"class":99,"line":32864},[97,55934,55935],{"class":191},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[97,55937,55938],{"class":99,"line":32884},[97,55939,55940],{"class":191},"      \u002F\u002F li.classList.add('activate')\n",[97,55942,55943],{"class":99,"line":32890},[97,55944,55945],{"class":191},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[97,55947,55948],{"class":99,"line":32901},[97,55949,55950],{"class":191},"      \u002F\u002F lis[i].classList.remove('activate')\n",[97,55952,55953,55956,55958,55960,55963,55966,55969,55971,55974],{"class":99,"line":32907},[97,55954,55955],{"class":103},"      document.",[97,55957,54583],{"class":111},[97,55959,323],{"class":103},[97,55961,55962],{"class":118},"'.activate'",[97,55964,55965],{"class":103},")?.classList.",[97,55967,55968],{"class":111},"toggle",[97,55970,323],{"class":103},[97,55972,55973],{"class":118},"'activate'",[97,55975,329],{"class":103},[97,55977,55978,55981,55983,55985,55987],{"class":99,"line":32913},[97,55979,55980],{"class":103},"      lis[i].classList.",[97,55982,5525],{"class":111},[97,55984,323],{"class":103},[97,55986,55973],{"class":118},[97,55988,329],{"class":103},[97,55990,55991],{"class":99,"line":32919},[97,55992,2591],{"emptyLinePlaceholder":249},[97,55994,55995,55998,56000,56002,56004,56006,56008,56010,56013],{"class":99,"line":32925},[97,55996,55997],{"class":103},"      i ",[97,55999,115],{"class":319},[97,56001,54667],{"class":103},[97,56003,801],{"class":319},[97,56005,25308],{"class":370},[97,56007,13905],{"class":103},[97,56009,648],{"class":319},[97,56011,56012],{"class":103}," arrImage.",[97,56014,56015],{"class":370},"length\n",[97,56017,56018],{"class":99,"line":32931},[97,56019,2591],{"emptyLinePlaceholder":249},[97,56021,56022,56024,56026],{"class":99,"line":32937},[97,56023,54719],{"class":103},[97,56025,6601],{"class":370},[97,56027,329],{"class":103},[97,56029,56030,56032,56034],{"class":99,"line":32943},[97,56031,52601],{"class":103},[97,56033,51997],{"class":107},[97,56035,130],{"class":103},[97,56037,56038,56040,56042],{"class":99,"line":32963},[97,56039,51969],{"class":103},[97,56041,51984],{"class":107},[97,56043,130],{"class":103},[97,56045,56046],{"class":99,"line":32969},[97,56047,2591],{"emptyLinePlaceholder":249},[97,56049,56050,56052,56054],{"class":99,"line":32985},[97,56051,51969],{"class":103},[97,56053,50825],{"class":107},[97,56055,130],{"class":103},[24,56057,56058],{},[19,56059],{"alt":92,"src":56060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[24,56062,56063],{},"?.就是短路保护,确保输出正常进行",[24,56065,56066],{},"不要忘记取余%,有时候可以用",[24,56068,56069],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[138,56071,56072],{"start":195},[70,56073,56074],{},"法2",[87,56076,56078],{"className":50823,"code":56077,"language":50825,"meta":92,"style":92},"\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",[94,56079,56080,56090,56104,56108,56116,56130,56150,56162,56170,56176,56186,56196,56200,56204,56210,56220,56224,56228,56234,56244,56256,56268,56282,56286,56290,56296,56306,56316,56326,56338,56350,56360,56364,56368,56376,56386,56398,56410,56422,56426,56430,56436,56446,56458,56470,56480,56490,56500,56512,56524,56528,56532,56540,56552,56564,56590,56602,56606,56610,56616,56626,56630,56638,56646,56650,56658,56672,56686,56706,56714,56728,56740,56748,56766,56778,56790,56802,56814,56826,56838,56850,56858,56866,56874,56882,56893,56909,56925,56941,56957,56973,56989,57005,57021,57025,57030,57048,57066,57076,57081,57086,57097,57103,57118,57127,57131,57136,57145,57150,57159,57164,57169,57174,57197,57227,57231,57239,57243,57251,57259,57263],{"__ignoreMap":92},[97,56081,56082,56084,56086,56088],{"class":99,"line":100},[97,56083,51487],{"class":103},[97,56085,51490],{"class":107},[97,56087,51493],{"class":111},[97,56089,130],{"class":103},[97,56091,56092,56094,56096,56098,56100,56102],{"class":99,"line":195},[97,56093,104],{"class":103},[97,56095,50825],{"class":107},[97,56097,51504],{"class":111},[97,56099,115],{"class":103},[97,56101,51509],{"class":118},[97,56103,130],{"class":103},[97,56105,56106],{"class":99,"line":241},[97,56107,2591],{"emptyLinePlaceholder":249},[97,56109,56110,56112,56114],{"class":99,"line":1387},[97,56111,104],{"class":103},[97,56113,51522],{"class":107},[97,56115,130],{"class":103},[97,56117,56118,56120,56122,56124,56126,56128],{"class":99,"line":1393},[97,56119,52328],{"class":103},[97,56121,108],{"class":107},[97,56123,51534],{"class":111},[97,56125,115],{"class":103},[97,56127,51539],{"class":118},[97,56129,130],{"class":103},[97,56131,56132,56134,56136,56138,56140,56142,56144,56146,56148],{"class":99,"line":1407},[97,56133,52328],{"class":103},[97,56135,108],{"class":107},[97,56137,112],{"class":111},[97,56139,115],{"class":103},[97,56141,119],{"class":118},[97,56143,122],{"class":111},[97,56145,115],{"class":103},[97,56147,127],{"class":118},[97,56149,130],{"class":103},[97,56151,56152,56154,56156,56158,56160],{"class":99,"line":1413},[97,56153,52328],{"class":103},[97,56155,51591],{"class":107},[97,56157,51594],{"class":103},[97,56159,51591],{"class":107},[97,56161,130],{"class":103},[97,56163,56164,56166,56168],{"class":99,"line":1504},[97,56165,52328],{"class":103},[97,56167,231],{"class":107},[97,56169,130],{"class":103},[97,56171,56172,56174],{"class":99,"line":1510},[97,56173,6594],{"class":107},[97,56175,15762],{"class":103},[97,56177,56178,56180,56182,56184],{"class":99,"line":1522},[97,56179,54879],{"class":370},[97,56181,51621],{"class":103},[97,56183,511],{"class":370},[97,56185,1483],{"class":103},[97,56187,56188,56190,56192,56194],{"class":99,"line":1804},[97,56189,54890],{"class":370},[97,56191,51621],{"class":103},[97,56193,511],{"class":370},[97,56195,1483],{"class":103},[97,56197,56198],{"class":99,"line":1809},[97,56199,2378],{"class":103},[97,56201,56202],{"class":99,"line":1815},[97,56203,2591],{"emptyLinePlaceholder":249},[97,56205,56206,56208],{"class":99,"line":1820},[97,56207,54909],{"class":107},[97,56209,15762],{"class":103},[97,56211,56212,56214,56216,56218],{"class":99,"line":1834},[97,56213,54916],{"class":370},[97,56215,51621],{"class":103},[97,56217,54921],{"class":370},[97,56219,1483],{"class":103},[97,56221,56222],{"class":99,"line":1839},[97,56223,2378],{"class":103},[97,56225,56226],{"class":99,"line":1845},[97,56227,2591],{"emptyLinePlaceholder":249},[97,56229,56230,56232],{"class":99,"line":1866},[97,56231,54936],{"class":111},[97,56233,15762],{"class":103},[97,56235,56236,56238,56240,56242],{"class":99,"line":1871},[97,56237,54943],{"class":370},[97,56239,51621],{"class":103},[97,56241,54948],{"class":370},[97,56243,1483],{"class":103},[97,56245,56246,56248,56250,56252,56254],{"class":99,"line":1885},[97,56247,54955],{"class":370},[97,56249,51621],{"class":103},[97,56251,54960],{"class":370},[97,56253,51676],{"class":319},[97,56255,1483],{"class":103},[97,56257,56258,56260,56262,56264,56266],{"class":99,"line":1890},[97,56259,54969],{"class":370},[97,56261,51621],{"class":103},[97,56263,1731],{"class":370},[97,56265,51676],{"class":319},[97,56267,1483],{"class":103},[97,56269,56270,56272,56274,56276,56278,56280],{"class":99,"line":1919},[97,56271,54890],{"class":370},[97,56273,51621],{"class":103},[97,56275,631],{"class":370},[97,56277,51676],{"class":319},[97,56279,51740],{"class":370},[97,56281,1483],{"class":103},[97,56283,56284],{"class":99,"line":1924},[97,56285,2378],{"class":103},[97,56287,56288],{"class":99,"line":1941},[97,56289,2591],{"emptyLinePlaceholder":249},[97,56291,56292,56294],{"class":99,"line":1946},[97,56293,55004],{"class":111},[97,56295,15762],{"class":103},[97,56297,56298,56300,56302,56304],{"class":99,"line":1951},[97,56299,54943],{"class":370},[97,56301,51621],{"class":103},[97,56303,55015],{"class":370},[97,56305,1483],{"class":103},[97,56307,56308,56310,56312,56314],{"class":99,"line":1956},[97,56309,55022],{"class":370},[97,56311,51621],{"class":103},[97,56313,511],{"class":370},[97,56315,1483],{"class":103},[97,56317,56318,56320,56322,56324],{"class":99,"line":1970},[97,56319,55033],{"class":370},[97,56321,51621],{"class":103},[97,56323,511],{"class":370},[97,56325,1483],{"class":103},[97,56327,56328,56330,56332,56334,56336],{"class":99,"line":1975},[97,56329,54955],{"class":370},[97,56331,51621],{"class":103},[97,56333,631],{"class":370},[97,56335,648],{"class":319},[97,56337,1483],{"class":103},[97,56339,56340,56342,56344,56346,56348],{"class":99,"line":2768},[97,56341,54969],{"class":370},[97,56343,51621],{"class":103},[97,56345,895],{"class":370},[97,56347,648],{"class":319},[97,56349,1483],{"class":103},[97,56351,56352,56354,56356,56358],{"class":99,"line":2782},[97,56353,55068],{"class":370},[97,56355,51621],{"class":103},[97,56357,55073],{"class":370},[97,56359,1483],{"class":103},[97,56361,56362],{"class":99,"line":2790},[97,56363,2378],{"class":103},[97,56365,56366],{"class":99,"line":2795},[97,56367,2591],{"emptyLinePlaceholder":249},[97,56369,56370,56372,56374],{"class":99,"line":2801},[97,56371,55004],{"class":111},[97,56373,7016],{"class":107},[97,56375,15762],{"class":103},[97,56377,56378,56380,56382,56384],{"class":99,"line":2807},[97,56379,54943],{"class":370},[97,56381,51621],{"class":103},[97,56383,55015],{"class":370},[97,56385,1483],{"class":103},[97,56387,56388,56390,56392,56394,56396],{"class":99,"line":2812},[97,56389,55106],{"class":370},[97,56391,51621],{"class":103},[97,56393,1221],{"class":370},[97,56395,51676],{"class":319},[97,56397,1483],{"class":103},[97,56399,56400,56402,56404,56406,56408],{"class":99,"line":8139},[97,56401,55022],{"class":370},[97,56403,51621],{"class":103},[97,56405,1020],{"class":370},[97,56407,51676],{"class":319},[97,56409,1483],{"class":103},[97,56411,56412,56414,56416,56418,56420],{"class":99,"line":8163},[97,56413,55131],{"class":370},[97,56415,51621],{"class":103},[97,56417,639],{"class":370},[97,56419,51676],{"class":319},[97,56421,1483],{"class":103},[97,56423,56424],{"class":99,"line":8168},[97,56425,2378],{"class":103},[97,56427,56428],{"class":99,"line":8174},[97,56429,2591],{"emptyLinePlaceholder":249},[97,56431,56432,56434],{"class":99,"line":8201},[97,56433,55152],{"class":107},[97,56435,15762],{"class":103},[97,56437,56438,56440,56442,56444],{"class":99,"line":8206},[97,56439,54943],{"class":370},[97,56441,51621],{"class":103},[97,56443,55015],{"class":370},[97,56445,1483],{"class":103},[97,56447,56448,56450,56452,56454,56456],{"class":99,"line":8212},[97,56449,55131],{"class":370},[97,56451,51621],{"class":103},[97,56453,1101],{"class":370},[97,56455,51676],{"class":319},[97,56457,1483],{"class":103},[97,56459,56460,56462,56464,56466,56468],{"class":99,"line":8224},[97,56461,55022],{"class":370},[97,56463,51621],{"class":103},[97,56465,1020],{"class":370},[97,56467,51676],{"class":319},[97,56469,1483],{"class":103},[97,56471,56472,56474,56476,56478],{"class":99,"line":8236},[97,56473,55193],{"class":370},[97,56475,51621],{"class":103},[97,56477,51661],{"class":370},[97,56479,1483],{"class":103},[97,56481,56482,56484,56486,56488],{"class":99,"line":8248},[97,56483,55204],{"class":370},[97,56485,51621],{"class":103},[97,56487,51852],{"class":370},[97,56489,1483],{"class":103},[97,56491,56492,56494,56496,56498],{"class":99,"line":9907},[97,56493,54943],{"class":370},[97,56495,51621],{"class":103},[97,56497,55015],{"class":370},[97,56499,1483],{"class":103},[97,56501,56502,56504,56506,56508,56510],{"class":99,"line":9932},[97,56503,54955],{"class":370},[97,56505,51621],{"class":103},[97,56507,4183],{"class":370},[97,56509,51676],{"class":319},[97,56511,1483],{"class":103},[97,56513,56514,56516,56518,56520,56522],{"class":99,"line":9955},[97,56515,54969],{"class":370},[97,56517,51621],{"class":103},[97,56519,1020],{"class":370},[97,56521,51676],{"class":319},[97,56523,1483],{"class":103},[97,56525,56526],{"class":99,"line":9979},[97,56527,2378],{"class":103},[97,56529,56530],{"class":99,"line":9984},[97,56531,2591],{"emptyLinePlaceholder":249},[97,56533,56534,56536,56538],{"class":99,"line":9989},[97,56535,55152],{"class":107},[97,56537,55259],{"class":107},[97,56539,15762],{"class":103},[97,56541,56542,56544,56546,56548,56550],{"class":99,"line":9994},[97,56543,54955],{"class":370},[97,56545,51621],{"class":103},[97,56547,1020],{"class":370},[97,56549,51676],{"class":319},[97,56551,1483],{"class":103},[97,56553,56554,56556,56558,56560,56562],{"class":99,"line":10003},[97,56555,54969],{"class":370},[97,56557,51621],{"class":103},[97,56559,1020],{"class":370},[97,56561,51676],{"class":319},[97,56563,1483],{"class":103},[97,56565,56566,56568,56570,56572,56574,56576,56578,56580,56582,56584,56586,56588],{"class":99,"line":10008},[97,56567,55068],{"class":370},[97,56569,51621],{"class":103},[97,56571,55294],{"class":370},[97,56573,323],{"class":103},[97,56575,511],{"class":370},[97,56577,12626],{"class":103},[97,56579,511],{"class":370},[97,56581,12626],{"class":103},[97,56583,511],{"class":370},[97,56585,12626],{"class":103},[97,56587,55311],{"class":370},[97,56589,2910],{"class":103},[97,56591,56592,56594,56596,56598,56600],{"class":99,"line":10014},[97,56593,55318],{"class":370},[97,56595,51621],{"class":103},[97,56597,766],{"class":370},[97,56599,51676],{"class":319},[97,56601,1483],{"class":103},[97,56603,56604],{"class":99,"line":10035},[97,56605,2378],{"class":103},[97,56607,56608],{"class":99,"line":10041},[97,56609,2591],{"emptyLinePlaceholder":249},[97,56611,56612,56614],{"class":99,"line":10055},[97,56613,55339],{"class":111},[97,56615,15762],{"class":103},[97,56617,56618,56620,56622,56624],{"class":99,"line":10061},[97,56619,55068],{"class":370},[97,56621,51621],{"class":103},[97,56623,55350],{"class":370},[97,56625,1483],{"class":103},[97,56627,56628],{"class":99,"line":10088},[97,56629,2378],{"class":103},[97,56631,56632,56634,56636],{"class":99,"line":10097},[97,56633,52601],{"class":103},[97,56635,231],{"class":107},[97,56637,130],{"class":103},[97,56639,56640,56642,56644],{"class":99,"line":10103},[97,56641,51969],{"class":103},[97,56643,51522],{"class":107},[97,56645,130],{"class":103},[97,56647,56648],{"class":99,"line":10111},[97,56649,2591],{"emptyLinePlaceholder":249},[97,56651,56652,56654,56656],{"class":99,"line":10116},[97,56653,104],{"class":103},[97,56655,51984],{"class":107},[97,56657,130],{"class":103},[97,56659,56660,56662,56664,56666,56668,56670],{"class":99,"line":16794},[97,56661,52328],{"class":103},[97,56663,51795],{"class":107},[97,56665,53670],{"class":111},[97,56667,115],{"class":103},[97,56669,53675],{"class":118},[97,56671,130],{"class":103},[97,56673,56674,56676,56678,56680,56682,56684],{"class":99,"line":16800},[97,56675,51529],{"class":103},[97,56677,51795],{"class":107},[97,56679,53670],{"class":111},[97,56681,115],{"class":103},[97,56683,55411],{"class":118},[97,56685,130],{"class":103},[97,56687,56688,56690,56692,56694,56696,56698,56700,56702,56704],{"class":99,"line":16823},[97,56689,55418],{"class":103},[97,56691,19],{"class":107},[97,56693,55423],{"class":111},[97,56695,115],{"class":103},[97,56697,55428],{"class":118},[97,56699,55431],{"class":111},[97,56701,115],{"class":103},[97,56703,7843],{"class":118},[97,56705,130],{"class":103},[97,56707,56708,56710,56712],{"class":99,"line":16829},[97,56709,51960],{"class":103},[97,56711,51795],{"class":107},[97,56713,130],{"class":103},[97,56715,56716,56718,56720,56722,56724,56726],{"class":99,"line":16852},[97,56717,51529],{"class":103},[97,56719,51795],{"class":107},[97,56721,53670],{"class":111},[97,56723,115],{"class":103},[97,56725,55458],{"class":118},[97,56727,130],{"class":103},[97,56729,56730,56732,56734,56736,56738],{"class":99,"line":16866},[97,56731,55418],{"class":103},[97,56733,24],{"class":107},[97,56735,55469],{"class":103},[97,56737,24],{"class":107},[97,56739,130],{"class":103},[97,56741,56742,56744,56746],{"class":99,"line":16886},[97,56743,55418],{"class":103},[97,56745,67],{"class":107},[97,56747,130],{"class":103},[97,56749,56750,56752,56754,56756,56758,56760,56762,56764],{"class":99,"line":16892},[97,56751,55486],{"class":103},[97,56753,70],{"class":107},[97,56755,53670],{"class":111},[97,56757,115],{"class":103},[97,56759,55495],{"class":118},[97,56761,55498],{"class":103},[97,56763,70],{"class":107},[97,56765,130],{"class":103},[97,56767,56768,56770,56772,56774,56776],{"class":99,"line":16903},[97,56769,55486],{"class":103},[97,56771,70],{"class":107},[97,56773,55498],{"class":103},[97,56775,70],{"class":107},[97,56777,130],{"class":103},[97,56779,56780,56782,56784,56786,56788],{"class":99,"line":16926},[97,56781,55486],{"class":103},[97,56783,70],{"class":107},[97,56785,55498],{"class":103},[97,56787,70],{"class":107},[97,56789,130],{"class":103},[97,56791,56792,56794,56796,56798,56800],{"class":99,"line":16948},[97,56793,55486],{"class":103},[97,56795,70],{"class":107},[97,56797,55498],{"class":103},[97,56799,70],{"class":107},[97,56801,130],{"class":103},[97,56803,56804,56806,56808,56810,56812],{"class":99,"line":16953},[97,56805,55486],{"class":103},[97,56807,70],{"class":107},[97,56809,55498],{"class":103},[97,56811,70],{"class":107},[97,56813,130],{"class":103},[97,56815,56816,56818,56820,56822,56824],{"class":99,"line":16959},[97,56817,55486],{"class":103},[97,56819,70],{"class":107},[97,56821,55498],{"class":103},[97,56823,70],{"class":107},[97,56825,130],{"class":103},[97,56827,56828,56830,56832,56834,56836],{"class":99,"line":16973},[97,56829,55486],{"class":103},[97,56831,70],{"class":107},[97,56833,55498],{"class":103},[97,56835,70],{"class":107},[97,56837,130],{"class":103},[97,56839,56840,56842,56844,56846,56848],{"class":99,"line":16986},[97,56841,55486],{"class":103},[97,56843,70],{"class":107},[97,56845,55498],{"class":103},[97,56847,70],{"class":107},[97,56849,130],{"class":103},[97,56851,56852,56854,56856],{"class":99,"line":16991},[97,56853,55591],{"class":103},[97,56855,67],{"class":107},[97,56857,130],{"class":103},[97,56859,56860,56862,56864],{"class":99,"line":17005},[97,56861,51960],{"class":103},[97,56863,51795],{"class":107},[97,56865,130],{"class":103},[97,56867,56868,56870,56872],{"class":99,"line":17010},[97,56869,52601],{"class":103},[97,56871,51795],{"class":107},[97,56873,130],{"class":103},[97,56875,56876,56878,56880],{"class":99,"line":17016},[97,56877,52328],{"class":103},[97,56879,51997],{"class":107},[97,56881,130],{"class":103},[97,56883,56884,56886,56889,56891],{"class":99,"line":17021},[97,56885,11412],{"class":319},[97,56887,56888],{"class":370}," sliderData",[97,56890,13755],{"class":319},[97,56892,55631],{"class":103},[97,56894,56895,56897,56899,56901,56903,56905,56907],{"class":99,"line":17035},[97,56896,55636],{"class":103},[97,56898,55639],{"class":118},[97,56900,55642],{"class":103},[97,56902,55645],{"class":118},[97,56904,55648],{"class":103},[97,56906,55651],{"class":118},[97,56908,55654],{"class":103},[97,56910,56911,56913,56915,56917,56919,56921,56923],{"class":99,"line":17040},[97,56912,55636],{"class":103},[97,56914,55661],{"class":118},[97,56916,55642],{"class":103},[97,56918,55666],{"class":118},[97,56920,55648],{"class":103},[97,56922,55671],{"class":118},[97,56924,55654],{"class":103},[97,56926,56927,56929,56931,56933,56935,56937,56939],{"class":99,"line":17045},[97,56928,55636],{"class":103},[97,56930,55680],{"class":118},[97,56932,55642],{"class":103},[97,56934,55685],{"class":118},[97,56936,55648],{"class":103},[97,56938,55690],{"class":118},[97,56940,55654],{"class":103},[97,56942,56943,56945,56947,56949,56951,56953,56955],{"class":99,"line":17059},[97,56944,55636],{"class":103},[97,56946,55699],{"class":118},[97,56948,55642],{"class":103},[97,56950,55704],{"class":118},[97,56952,55648],{"class":103},[97,56954,55709],{"class":118},[97,56956,55654],{"class":103},[97,56958,56959,56961,56963,56965,56967,56969,56971],{"class":99,"line":17071},[97,56960,55636],{"class":103},[97,56962,55718],{"class":118},[97,56964,55642],{"class":103},[97,56966,55723],{"class":118},[97,56968,55648],{"class":103},[97,56970,55728],{"class":118},[97,56972,55654],{"class":103},[97,56974,56975,56977,56979,56981,56983,56985,56987],{"class":99,"line":17076},[97,56976,55636],{"class":103},[97,56978,55737],{"class":118},[97,56980,55642],{"class":103},[97,56982,55742],{"class":118},[97,56984,55648],{"class":103},[97,56986,55747],{"class":118},[97,56988,55654],{"class":103},[97,56990,56991,56993,56995,56997,56999,57001,57003],{"class":99,"line":17089},[97,56992,55636],{"class":103},[97,56994,55756],{"class":118},[97,56996,55642],{"class":103},[97,56998,55761],{"class":118},[97,57000,55648],{"class":103},[97,57002,55766],{"class":118},[97,57004,55654],{"class":103},[97,57006,57007,57009,57011,57013,57015,57017,57019],{"class":99,"line":17094},[97,57008,55636],{"class":103},[97,57010,55775],{"class":118},[97,57012,55642],{"class":103},[97,57014,55780],{"class":118},[97,57016,55648],{"class":103},[97,57018,55785],{"class":118},[97,57020,55788],{"class":103},[97,57022,57023],{"class":99,"line":17099},[97,57024,53293],{"class":103},[97,57026,57027],{"class":99,"line":17104},[97,57028,57029],{"class":191},"    \u002F\u002F 1.获取元素\n",[97,57031,57032,57034,57036,57038,57040,57042,57044,57046],{"class":99,"line":17117},[97,57033,11412],{"class":319},[97,57035,55799],{"class":370},[97,57037,13755],{"class":319},[97,57039,54580],{"class":103},[97,57041,54583],{"class":111},[97,57043,323],{"class":103},[97,57045,55810],{"class":118},[97,57047,329],{"class":103},[97,57049,57050,57052,57054,57056,57058,57060,57062,57064],{"class":99,"line":17122},[97,57051,11412],{"class":319},[97,57053,7016],{"class":370},[97,57055,13755],{"class":319},[97,57057,54580],{"class":103},[97,57059,54583],{"class":111},[97,57061,323],{"class":103},[97,57063,55829],{"class":118},[97,57065,329],{"class":103},[97,57067,57068,57070,57072,57074],{"class":99,"line":32823},[97,57069,52403],{"class":319},[97,57071,9629],{"class":103},[97,57073,115],{"class":319},[97,57075,47523],{"class":370},[97,57077,57078],{"class":99,"line":32829},[97,57079,57080],{"class":191},"    \u002F\u002F 2.开启定时器\n",[97,57082,57083],{"class":99,"line":32835},[97,57084,57085],{"class":191},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[97,57087,57088,57091,57093,57095],{"class":99,"line":32841},[97,57089,57090],{"class":111},"    setInterval",[97,57092,323],{"class":103},[97,57094,54633],{"class":319},[97,57096,54636],{"class":103},[97,57098,57099,57101],{"class":99,"line":32847},[97,57100,54641],{"class":103},[97,57102,2893],{"class":319},[97,57104,57105,57107,57109,57111,57114,57116],{"class":99,"line":32858},[97,57106,54664],{"class":319},[97,57108,54667],{"class":103},[97,57110,1902],{"class":319},[97,57112,57113],{"class":103}," sliderData.",[97,57115,52152],{"class":370},[97,57117,12633],{"class":103},[97,57119,57120,57123,57125],{"class":99,"line":32864},[97,57121,57122],{"class":103},"        i ",[97,57124,115],{"class":319},[97,57126,47523],{"class":370},[97,57128,57129],{"class":99,"line":32884},[97,57130,52582],{"class":103},[97,57132,57133],{"class":99,"line":32890},[97,57134,57135],{"class":191},"      \u002F\u002F 更换图片路径\n",[97,57137,57138,57140,57142],{"class":99,"line":32901},[97,57139,55905],{"class":103},[97,57141,115],{"class":319},[97,57143,57144],{"class":103}," sliderData[i].url\n",[97,57146,57147],{"class":99,"line":32907},[97,57148,57149],{"class":191},"      \u002F\u002F 把文字写到p里面\n",[97,57151,57152,57154,57156],{"class":99,"line":32913},[97,57153,55915],{"class":103},[97,57155,115],{"class":319},[97,57157,57158],{"class":103}," sliderData[i].title\n",[97,57160,57161],{"class":99,"line":32919},[97,57162,57163],{"class":191},"      \u002F\u002F 小圆点\n",[97,57165,57166],{"class":99,"line":32925},[97,57167,57168],{"class":191},"      \u002F\u002F 先删除以前的active\n",[97,57170,57171],{"class":99,"line":32931},[97,57172,57173],{"class":191},"      \u002F\u002F 只让当前li添加active\n",[97,57175,57176,57178,57180,57182,57185,57188,57191,57193,57195],{"class":99,"line":32937},[97,57177,55955],{"class":103},[97,57179,54583],{"class":111},[97,57181,323],{"class":103},[97,57183,57184],{"class":118},"'.slider-footer .activate'",[97,57186,57187],{"class":103},").classList.",[97,57189,57190],{"class":111},"remove",[97,57192,323],{"class":103},[97,57194,55973],{"class":118},[97,57196,329],{"class":103},[97,57198,57199,57201,57203,57205,57208,57210,57212,57214,57217,57219,57221,57223,57225],{"class":99,"line":32943},[97,57200,55955],{"class":103},[97,57202,54583],{"class":111},[97,57204,323],{"class":103},[97,57206,57207],{"class":118},"`.slider-footer ul li:nth-child(${",[97,57209,761],{"class":103},[97,57211,45756],{"class":319},[97,57213,25308],{"class":370},[97,57215,57216],{"class":118},"})`",[97,57218,57187],{"class":103},[97,57220,5525],{"class":111},[97,57222,323],{"class":103},[97,57224,55973],{"class":118},[97,57226,329],{"class":103},[97,57228,57229],{"class":99,"line":32963},[97,57230,2591],{"emptyLinePlaceholder":249},[97,57232,57233,57235,57237],{"class":99,"line":32969},[97,57234,54719],{"class":103},[97,57236,6601],{"class":370},[97,57238,329],{"class":103},[97,57240,57241],{"class":99,"line":32985},[97,57242,2591],{"emptyLinePlaceholder":249},[97,57244,57245,57247,57249],{"class":99,"line":32991},[97,57246,52601],{"class":103},[97,57248,51997],{"class":107},[97,57250,130],{"class":103},[97,57252,57253,57255,57257],{"class":99,"line":33005},[97,57254,51969],{"class":103},[97,57256,51984],{"class":107},[97,57258,130],{"class":103},[97,57260,57261],{"class":99,"line":33011},[97,57262,2591],{"emptyLinePlaceholder":249},[97,57264,57265,57267,57269],{"class":99,"line":33026},[97,57266,51969],{"class":103},[97,57268,50825],{"class":107},[97,57270,130],{"class":103},[48,57272,57274],{"id":57273},"_317-重要知识点","3.1.7 重要知识点",[24,57276,57277,57278],{},"浏览器在渲染文本时， ",[469,57279,57280],{},"没有空格或换行符就没有“断行点”",[24,57282,57283],{},[19,57284],{"alt":92,"src":57285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[24,57287,57288],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[24,57290,57291],{},[19,57292],{"alt":92,"src":57293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[24,57295,57296],{},[19,57297],{"alt":92,"src":57298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57300,57302],{"id":57301},"_32-dom事件基础","3.2 DOM事件基础",[48,57304,57306],{"id":57305},"_321-事件监听","3.2.1 事件监听",[24,57308,57309],{},[19,57310],{"alt":92,"src":57311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[24,57313,57314],{},"事件监听有响应的发生",[24,57316,57317],{},[19,57318],{"alt":92,"src":57319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[24,57321,57322],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[24,57324,57325],{},"对于有名函数,要执行的函数名后边不要加()",[48,57327,57329],{"id":57328},"_322-随机点名案例","3.2.2 随机点名案例",[87,57331,57333],{"className":50823,"code":57332,"language":50825,"meta":92,"style":92},"\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",[94,57334,57335,57345,57359,57363,57371,57385,57405,57417,57425,57431,57441,57451,57455,57459,57466,57477,57481,57485,57491,57503,57517,57527,57539,57552,57556,57560,57567,57571,57584,57596,57608,57612,57616,57620,57627,57637,57641,57645,57654,57666,57678,57693,57697,57705,57713,57717,57725,57738,57752,57765,57785,57793,57808,57828,57848,57856,57860,57868,57873,57909,57929,57934,57953,57958,57969,57974,57985,57990,58009,58024,58029,58055,58065,58074,58079,58095,58100,58105,58110,58125,58129,58133,58138,58157,58174,58182,58187,58202,58206,58210,58218,58226,58230],{"__ignoreMap":92},[97,57336,57337,57339,57341,57343],{"class":99,"line":100},[97,57338,51487],{"class":103},[97,57340,51490],{"class":107},[97,57342,51493],{"class":111},[97,57344,130],{"class":103},[97,57346,57347,57349,57351,57353,57355,57357],{"class":99,"line":195},[97,57348,104],{"class":103},[97,57350,50825],{"class":107},[97,57352,51504],{"class":111},[97,57354,115],{"class":103},[97,57356,51509],{"class":118},[97,57358,130],{"class":103},[97,57360,57361],{"class":99,"line":241},[97,57362,2591],{"emptyLinePlaceholder":249},[97,57364,57365,57367,57369],{"class":99,"line":1387},[97,57366,104],{"class":103},[97,57368,51522],{"class":107},[97,57370,130],{"class":103},[97,57372,57373,57375,57377,57379,57381,57383],{"class":99,"line":1393},[97,57374,52328],{"class":103},[97,57376,108],{"class":107},[97,57378,51534],{"class":111},[97,57380,115],{"class":103},[97,57382,51539],{"class":118},[97,57384,130],{"class":103},[97,57386,57387,57389,57391,57393,57395,57397,57399,57401,57403],{"class":99,"line":1407},[97,57388,52328],{"class":103},[97,57390,108],{"class":107},[97,57392,112],{"class":111},[97,57394,115],{"class":103},[97,57396,119],{"class":118},[97,57398,122],{"class":111},[97,57400,115],{"class":103},[97,57402,127],{"class":118},[97,57404,130],{"class":103},[97,57406,57407,57409,57411,57413,57415],{"class":99,"line":1413},[97,57408,52328],{"class":103},[97,57410,51591],{"class":107},[97,57412,51594],{"class":103},[97,57414,51591],{"class":107},[97,57416,130],{"class":103},[97,57418,57419,57421,57423],{"class":99,"line":1504},[97,57420,52328],{"class":103},[97,57422,231],{"class":107},[97,57424,130],{"class":103},[97,57426,57427,57429],{"class":99,"line":1510},[97,57428,6594],{"class":107},[97,57430,15762],{"class":103},[97,57432,57433,57435,57437,57439],{"class":99,"line":1522},[97,57434,54890],{"class":370},[97,57436,51621],{"class":103},[97,57438,511],{"class":370},[97,57440,1483],{"class":103},[97,57442,57443,57445,57447,57449],{"class":99,"line":1804},[97,57444,54879],{"class":370},[97,57446,51621],{"class":103},[97,57448,511],{"class":370},[97,57450,1483],{"class":103},[97,57452,57453],{"class":99,"line":1809},[97,57454,2378],{"class":103},[97,57456,57457],{"class":99,"line":1815},[97,57458,2591],{"emptyLinePlaceholder":249},[97,57460,57461,57464],{"class":99,"line":1820},[97,57462,57463],{"class":107},"    h2",[97,57465,15762],{"class":103},[97,57467,57468,57471,57473,57475],{"class":99,"line":1834},[97,57469,57470],{"class":370},"      text-align",[97,57472,51621],{"class":103},[97,57474,51776],{"class":370},[97,57476,1483],{"class":103},[97,57478,57479],{"class":99,"line":1839},[97,57480,2378],{"class":103},[97,57482,57483],{"class":99,"line":1845},[97,57484,2591],{"emptyLinePlaceholder":249},[97,57486,57487,57489],{"class":99,"line":1866},[97,57488,54936],{"class":111},[97,57490,15762],{"class":103},[97,57492,57493,57495,57497,57499,57501],{"class":99,"line":1871},[97,57494,54955],{"class":370},[97,57496,51621],{"class":103},[97,57498,1731],{"class":370},[97,57500,51676],{"class":319},[97,57502,1483],{"class":103},[97,57504,57505,57507,57509,57511,57513,57515],{"class":99,"line":1885},[97,57506,54890],{"class":370},[97,57508,51621],{"class":103},[97,57510,976],{"class":370},[97,57512,51676],{"class":319},[97,57514,51740],{"class":370},[97,57516,1483],{"class":103},[97,57518,57519,57521,57523,57525],{"class":99,"line":1890},[97,57520,55193],{"class":370},[97,57522,51621],{"class":103},[97,57524,51661],{"class":370},[97,57526,1483],{"class":103},[97,57528,57529,57531,57533,57535,57537],{"class":99,"line":1919},[97,57530,55106],{"class":370},[97,57532,51621],{"class":103},[97,57534,1145],{"class":370},[97,57536,51676],{"class":319},[97,57538,1483],{"class":103},[97,57540,57541,57544,57546,57548,57550],{"class":99,"line":1924},[97,57542,57543],{"class":370},"      line-height",[97,57545,51621],{"class":103},[97,57547,721],{"class":370},[97,57549,51676],{"class":319},[97,57551,1483],{"class":103},[97,57553,57554],{"class":99,"line":1941},[97,57555,2378],{"class":103},[97,57557,57558],{"class":99,"line":1946},[97,57559,2591],{"emptyLinePlaceholder":249},[97,57561,57562,57565],{"class":99,"line":1951},[97,57563,57564],{"class":111},"    .qs",[97,57566,15762],{"class":103},[97,57568,57569],{"class":99,"line":1956},[97,57570,2591],{"emptyLinePlaceholder":249},[97,57572,57573,57575,57577,57580,57582],{"class":99,"line":1970},[97,57574,54955],{"class":370},[97,57576,51621],{"class":103},[97,57578,57579],{"class":370},"450",[97,57581,51676],{"class":319},[97,57583,1483],{"class":103},[97,57585,57586,57588,57590,57592,57594],{"class":99,"line":1975},[97,57587,54969],{"class":370},[97,57589,51621],{"class":103},[97,57591,721],{"class":370},[97,57593,51676],{"class":319},[97,57595,1483],{"class":103},[97,57597,57598,57601,57603,57606],{"class":99,"line":2768},[97,57599,57600],{"class":370},"      color",[97,57602,51621],{"class":103},[97,57604,57605],{"class":370},"red",[97,57607,1483],{"class":103},[97,57609,57610],{"class":99,"line":2782},[97,57611,2591],{"emptyLinePlaceholder":249},[97,57613,57614],{"class":99,"line":2790},[97,57615,2378],{"class":103},[97,57617,57618],{"class":99,"line":2795},[97,57619,2591],{"emptyLinePlaceholder":249},[97,57621,57622,57625],{"class":99,"line":2801},[97,57623,57624],{"class":111},"    .btns",[97,57626,15762],{"class":103},[97,57628,57629,57631,57633,57635],{"class":99,"line":2807},[97,57630,57470],{"class":370},[97,57632,51621],{"class":103},[97,57634,51776],{"class":370},[97,57636,1483],{"class":103},[97,57638,57639],{"class":99,"line":2812},[97,57640,2378],{"class":103},[97,57642,57643],{"class":99,"line":8139},[97,57644,2591],{"emptyLinePlaceholder":249},[97,57646,57647,57649,57652],{"class":99,"line":8163},[97,57648,57624],{"class":111},[97,57650,57651],{"class":107}," button",[97,57653,15762],{"class":103},[97,57655,57656,57658,57660,57662,57664],{"class":99,"line":8168},[97,57657,54955],{"class":370},[97,57659,51621],{"class":103},[97,57661,1137],{"class":370},[97,57663,51676],{"class":319},[97,57665,1483],{"class":103},[97,57667,57668,57670,57672,57674,57676],{"class":99,"line":8174},[97,57669,54969],{"class":370},[97,57671,51621],{"class":103},[97,57673,593],{"class":370},[97,57675,51676],{"class":319},[97,57677,1483],{"class":103},[97,57679,57680,57682,57684,57686,57689,57691],{"class":99,"line":8201},[97,57681,54890],{"class":370},[97,57683,51621],{"class":103},[97,57685,511],{"class":370},[97,57687,57688],{"class":370}," 50",[97,57690,51676],{"class":319},[97,57692,1483],{"class":103},[97,57694,57695],{"class":99,"line":8206},[97,57696,2378],{"class":103},[97,57698,57699,57701,57703],{"class":99,"line":8212},[97,57700,52601],{"class":103},[97,57702,231],{"class":107},[97,57704,130],{"class":103},[97,57706,57707,57709,57711],{"class":99,"line":8224},[97,57708,51969],{"class":103},[97,57710,51522],{"class":107},[97,57712,130],{"class":103},[97,57714,57715],{"class":99,"line":8236},[97,57716,2591],{"emptyLinePlaceholder":249},[97,57718,57719,57721,57723],{"class":99,"line":8248},[97,57720,104],{"class":103},[97,57722,51984],{"class":107},[97,57724,130],{"class":103},[97,57726,57727,57729,57731,57734,57736],{"class":99,"line":9907},[97,57728,52328],{"class":103},[97,57730,14],{"class":107},[97,57732,57733],{"class":103},">随机点名\u003C\u002F",[97,57735,14],{"class":107},[97,57737,130],{"class":103},[97,57739,57740,57742,57744,57746,57748,57750],{"class":99,"line":9932},[97,57741,52328],{"class":103},[97,57743,51795],{"class":107},[97,57745,53670],{"class":111},[97,57747,115],{"class":103},[97,57749,53675],{"class":118},[97,57751,130],{"class":103},[97,57753,57754,57756,57758,57761,57763],{"class":99,"line":9955},[97,57755,51529],{"class":103},[97,57757,97],{"class":107},[97,57759,57760],{"class":103},">名字是：\u003C\u002F",[97,57762,97],{"class":107},[97,57764,130],{"class":103},[97,57766,57767,57769,57771,57773,57775,57778,57781,57783],{"class":99,"line":9979},[97,57768,51529],{"class":103},[97,57770,51795],{"class":107},[97,57772,53670],{"class":111},[97,57774,115],{"class":103},[97,57776,57777],{"class":118},"\"qs\"",[97,57779,57780],{"class":103},">这里显示姓名\u003C\u002F",[97,57782,51795],{"class":107},[97,57784,130],{"class":103},[97,57786,57787,57789,57791],{"class":99,"line":9984},[97,57788,52601],{"class":103},[97,57790,51795],{"class":107},[97,57792,130],{"class":103},[97,57794,57795,57797,57799,57801,57803,57806],{"class":99,"line":9989},[97,57796,52328],{"class":103},[97,57798,51795],{"class":107},[97,57800,53670],{"class":111},[97,57802,115],{"class":103},[97,57804,57805],{"class":118},"\"btns\"",[97,57807,130],{"class":103},[97,57809,57810,57812,57814,57816,57818,57821,57824,57826],{"class":99,"line":9994},[97,57811,51529],{"class":103},[97,57813,54071],{"class":107},[97,57815,53670],{"class":111},[97,57817,115],{"class":103},[97,57819,57820],{"class":118},"\"start\"",[97,57822,57823],{"class":103},">开始\u003C\u002F",[97,57825,54071],{"class":107},[97,57827,130],{"class":103},[97,57829,57830,57832,57834,57836,57838,57841,57844,57846],{"class":99,"line":10003},[97,57831,51529],{"class":103},[97,57833,54071],{"class":107},[97,57835,53670],{"class":111},[97,57837,115],{"class":103},[97,57839,57840],{"class":118},"\"end\"",[97,57842,57843],{"class":103},">结束\u003C\u002F",[97,57845,54071],{"class":107},[97,57847,130],{"class":103},[97,57849,57850,57852,57854],{"class":99,"line":10008},[97,57851,52601],{"class":103},[97,57853,51795],{"class":107},[97,57855,130],{"class":103},[97,57857,57858],{"class":99,"line":10014},[97,57859,2591],{"emptyLinePlaceholder":249},[97,57861,57862,57864,57866],{"class":99,"line":10035},[97,57863,52328],{"class":103},[97,57865,51997],{"class":107},[97,57867,130],{"class":103},[97,57869,57870],{"class":99,"line":10041},[97,57871,57872],{"class":191},"    \u002F\u002F 数据数组\n",[97,57874,57875,57877,57880,57882,57884,57887,57889,57892,57894,57897,57899,57902,57904,57907],{"class":99,"line":10055},[97,57876,11412],{"class":319},[97,57878,57879],{"class":370}," arr",[97,57881,13755],{"class":319},[97,57883,52410],{"class":103},[97,57885,57886],{"class":118},"'马超'",[97,57888,12626],{"class":103},[97,57890,57891],{"class":118},"'黄忠'",[97,57893,12626],{"class":103},[97,57895,57896],{"class":118},"'赵云'",[97,57898,12626],{"class":103},[97,57900,57901],{"class":118},"'关羽'",[97,57903,12626],{"class":103},[97,57905,57906],{"class":118},"'张飞'",[97,57908,33436],{"class":103},[97,57910,57911,57913,57916,57918,57920,57922,57924,57927],{"class":99,"line":10061},[97,57912,11412],{"class":319},[97,57914,57915],{"class":370}," qs",[97,57917,13755],{"class":319},[97,57919,54580],{"class":103},[97,57921,54583],{"class":111},[97,57923,323],{"class":103},[97,57925,57926],{"class":118},"'.qs'",[97,57928,329],{"class":103},[97,57930,57931],{"class":99,"line":10088},[97,57932,57933],{"class":191},"    \u002F\u002F 1.业务1.开始按钮模块\n",[97,57935,57936,57938,57940,57942,57944,57946,57948,57951],{"class":99,"line":10097},[97,57937,11412],{"class":319},[97,57939,4375],{"class":370},[97,57941,13755],{"class":319},[97,57943,54580],{"class":103},[97,57945,54583],{"class":111},[97,57947,323],{"class":103},[97,57949,57950],{"class":118},"'.start'",[97,57952,329],{"class":103},[97,57954,57955],{"class":99,"line":10103},[97,57956,57957],{"class":191},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[97,57959,57960,57962,57965,57967],{"class":99,"line":10111},[97,57961,52403],{"class":319},[97,57963,57964],{"class":103}," timerId ",[97,57966,115],{"class":319},[97,57968,47523],{"class":370},[97,57970,57971],{"class":99,"line":10116},[97,57972,57973],{"class":191},"    \u002F\u002F 随机号要全局变量\n",[97,57975,57976,57978,57981,57983],{"class":99,"line":16794},[97,57977,52403],{"class":319},[97,57979,57980],{"class":103}," random ",[97,57982,115],{"class":319},[97,57984,47523],{"class":370},[97,57986,57987],{"class":99,"line":16800},[97,57988,57989],{"class":191},"    \u002F\u002F 1.1 添加点击事件\n",[97,57991,57992,57995,57998,58000,58003,58005,58007],{"class":99,"line":16823},[97,57993,57994],{"class":103},"    start.",[97,57996,57997],{"class":111},"addEventListener",[97,57999,323],{"class":103},[97,58001,58002],{"class":118},"'click'",[97,58004,12626],{"class":103},[97,58006,54633],{"class":319},[97,58008,54636],{"class":103},[97,58010,58011,58014,58016,58018,58020,58022],{"class":99,"line":16829},[97,58012,58013],{"class":103},"      timerId ",[97,58015,115],{"class":319},[97,58017,54628],{"class":111},[97,58019,323],{"class":103},[97,58021,54633],{"class":319},[97,58023,54636],{"class":103},[97,58025,58026],{"class":99,"line":16852},[97,58027,58028],{"class":191},"        \u002F\u002F 随机数\n",[97,58030,58031,58034,58036,58039,58042,58045,58047,58049,58051,58053],{"class":99,"line":16866},[97,58032,58033],{"class":103},"        random ",[97,58035,115],{"class":319},[97,58037,58038],{"class":111}," parseInt",[97,58040,58041],{"class":103},"(Math.",[97,58043,58044],{"class":111},"random",[97,58046,13241],{"class":103},[97,58048,775],{"class":319},[97,58050,52149],{"class":103},[97,58052,52152],{"class":370},[97,58054,329],{"class":103},[97,58056,58057,58060,58062],{"class":99,"line":16886},[97,58058,58059],{"class":103},"        qs.innerHTML ",[97,58061,115],{"class":319},[97,58063,58064],{"class":103}," arr[random]\n",[97,58066,58067,58070,58072],{"class":99,"line":16892},[97,58068,58069],{"class":103},"      }, ",[97,58071,593],{"class":370},[97,58073,329],{"class":103},[97,58075,58076],{"class":99,"line":16903},[97,58077,58078],{"class":191},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[97,58080,58081,58083,58086,58088,58091,58093],{"class":99,"line":16926},[97,58082,54664],{"class":319},[97,58084,58085],{"class":103}," (arr.",[97,58087,52152],{"class":370},[97,58089,58090],{"class":319}," ===",[97,58092,25308],{"class":370},[97,58094,12633],{"class":103},[97,58096,58097],{"class":99,"line":16948},[97,58098,58099],{"class":191},"        \u002F\u002F start.disabled = true\n",[97,58101,58102],{"class":99,"line":16953},[97,58103,58104],{"class":191},"        \u002F\u002F end.disabled = true\n",[97,58106,58107],{"class":99,"line":16959},[97,58108,58109],{"class":191},"        \u002F\u002F 可以合起来写\n",[97,58111,58112,58115,58117,58120,58122],{"class":99,"line":16973},[97,58113,58114],{"class":103},"        start.disabled ",[97,58116,115],{"class":319},[97,58118,58119],{"class":103}," end.disabled ",[97,58121,115],{"class":319},[97,58123,58124],{"class":370}," true\n",[97,58126,58127],{"class":99,"line":16986},[97,58128,52582],{"class":103},[97,58130,58131],{"class":99,"line":16991},[97,58132,33651],{"class":103},[97,58134,58135],{"class":99,"line":17005},[97,58136,58137],{"class":191},"    \u002F\u002F 1.2 关闭按钮模块\n",[97,58139,58140,58142,58144,58146,58148,58150,58152,58155],{"class":99,"line":17010},[97,58141,11412],{"class":319},[97,58143,4391],{"class":370},[97,58145,13755],{"class":319},[97,58147,54580],{"class":103},[97,58149,54583],{"class":111},[97,58151,323],{"class":103},[97,58153,58154],{"class":118},"'.end'",[97,58156,329],{"class":103},[97,58158,58159,58162,58164,58166,58168,58170,58172],{"class":99,"line":17016},[97,58160,58161],{"class":103},"    end.",[97,58163,57997],{"class":111},[97,58165,323],{"class":103},[97,58167,58002],{"class":118},[97,58169,12626],{"class":103},[97,58171,54633],{"class":319},[97,58173,54636],{"class":103},[97,58175,58176,58179],{"class":99,"line":17021},[97,58177,58178],{"class":111},"      clearInterval",[97,58180,58181],{"class":103},"(timerId)\n",[97,58183,58184],{"class":99,"line":17035},[97,58185,58186],{"class":191},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[97,58188,58189,58192,58195,58198,58200],{"class":99,"line":17040},[97,58190,58191],{"class":103},"      arr.",[97,58193,58194],{"class":111},"splice",[97,58196,58197],{"class":103},"(random, ",[97,58199,537],{"class":370},[97,58201,329],{"class":103},[97,58203,58204],{"class":99,"line":17045},[97,58205,33651],{"class":103},[97,58207,58208],{"class":99,"line":17059},[97,58209,2591],{"emptyLinePlaceholder":249},[97,58211,58212,58214,58216],{"class":99,"line":17071},[97,58213,52601],{"class":103},[97,58215,51997],{"class":107},[97,58217,130],{"class":103},[97,58219,58220,58222,58224],{"class":99,"line":17076},[97,58221,51969],{"class":103},[97,58223,51984],{"class":107},[97,58225,130],{"class":103},[97,58227,58228],{"class":99,"line":17089},[97,58229,2591],{"emptyLinePlaceholder":249},[97,58231,58232,58234,58236],{"class":99,"line":17094},[97,58233,51969],{"class":103},[97,58235,50825],{"class":107},[97,58237,130],{"class":103},[24,58239,58240],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[48,58242,58244],{"id":58243},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[87,58246,58248],{"className":50823,"code":58247,"language":50825,"meta":92,"style":92},"\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",[94,58249,58250,58260,58274,58278,58286,58300,58320,58332,58340,58344,58352,58364,58372,58391,58408,58424,58434,58438,58446,58454,58458],{"__ignoreMap":92},[97,58251,58252,58254,58256,58258],{"class":99,"line":100},[97,58253,51487],{"class":103},[97,58255,51490],{"class":107},[97,58257,51493],{"class":111},[97,58259,130],{"class":103},[97,58261,58262,58264,58266,58268,58270,58272],{"class":99,"line":195},[97,58263,104],{"class":103},[97,58265,50825],{"class":107},[97,58267,51504],{"class":111},[97,58269,115],{"class":103},[97,58271,51509],{"class":118},[97,58273,130],{"class":103},[97,58275,58276],{"class":99,"line":241},[97,58277,2591],{"emptyLinePlaceholder":249},[97,58279,58280,58282,58284],{"class":99,"line":1387},[97,58281,104],{"class":103},[97,58283,51522],{"class":107},[97,58285,130],{"class":103},[97,58287,58288,58290,58292,58294,58296,58298],{"class":99,"line":1393},[97,58289,52328],{"class":103},[97,58291,108],{"class":107},[97,58293,51534],{"class":111},[97,58295,115],{"class":103},[97,58297,51539],{"class":118},[97,58299,130],{"class":103},[97,58301,58302,58304,58306,58308,58310,58312,58314,58316,58318],{"class":99,"line":1407},[97,58303,52328],{"class":103},[97,58305,108],{"class":107},[97,58307,112],{"class":111},[97,58309,115],{"class":103},[97,58311,119],{"class":118},[97,58313,122],{"class":111},[97,58315,115],{"class":103},[97,58317,127],{"class":118},[97,58319,130],{"class":103},[97,58321,58322,58324,58326,58328,58330],{"class":99,"line":1413},[97,58323,52328],{"class":103},[97,58325,51591],{"class":107},[97,58327,51594],{"class":103},[97,58329,51591],{"class":107},[97,58331,130],{"class":103},[97,58333,58334,58336,58338],{"class":99,"line":1504},[97,58335,51969],{"class":103},[97,58337,51522],{"class":107},[97,58339,130],{"class":103},[97,58341,58342],{"class":99,"line":1510},[97,58343,2591],{"emptyLinePlaceholder":249},[97,58345,58346,58348,58350],{"class":99,"line":1522},[97,58347,104],{"class":103},[97,58349,51984],{"class":107},[97,58351,130],{"class":103},[97,58353,58354,58356,58358,58360,58362],{"class":99,"line":1804},[97,58355,52328],{"class":103},[97,58357,54071],{"class":107},[97,58359,54077],{"class":103},[97,58361,54071],{"class":107},[97,58363,130],{"class":103},[97,58365,58366,58368,58370],{"class":99,"line":1809},[97,58367,52328],{"class":103},[97,58369,51997],{"class":107},[97,58371,130],{"class":103},[97,58373,58374,58376,58378,58380,58382,58384,58386,58389],{"class":99,"line":1815},[97,58375,11412],{"class":319},[97,58377,54575],{"class":370},[97,58379,13755],{"class":319},[97,58381,54580],{"class":103},[97,58383,54583],{"class":111},[97,58385,323],{"class":103},[97,58387,58388],{"class":118},"'button'",[97,58390,329],{"class":103},[97,58392,58393,58396,58398,58400,58402,58404,58406],{"class":99,"line":1820},[97,58394,58395],{"class":103},"    btn.",[97,58397,57997],{"class":111},[97,58399,323],{"class":103},[97,58401,58002],{"class":118},[97,58403,12626],{"class":103},[97,58405,54633],{"class":319},[97,58407,54636],{"class":103},[97,58409,58410,58413,58415,58417,58420,58422],{"class":99,"line":1834},[97,58411,58412],{"class":319},"      const",[97,58414,2431],{"class":370},[97,58416,13755],{"class":319},[97,58418,58419],{"class":103}," Math.",[97,58421,58044],{"class":111},[97,58423,2167],{"class":103},[97,58425,58426,58429,58432],{"class":99,"line":1839},[97,58427,58428],{"class":103},"      console.",[97,58430,58431],{"class":111},"log",[97,58433,336],{"class":103},[97,58435,58436],{"class":99,"line":1845},[97,58437,33651],{"class":103},[97,58439,58440,58442,58444],{"class":99,"line":1866},[97,58441,52601],{"class":103},[97,58443,51997],{"class":107},[97,58445,130],{"class":103},[97,58447,58448,58450,58452],{"class":99,"line":1871},[97,58449,51969],{"class":103},[97,58451,51984],{"class":107},[97,58453,130],{"class":103},[97,58455,58456],{"class":99,"line":1885},[97,58457,2591],{"emptyLinePlaceholder":249},[97,58459,58460,58462,58464],{"class":99,"line":1890},[97,58461,51969],{"class":103},[97,58463,50825],{"class":107},[97,58465,130],{"class":103},[24,58467,58468],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[24,58470,58471],{},"常量不可以重新赋值",[24,58473,58474],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[87,58476,58478],{"className":50823,"code":58477,"language":50825,"meta":92,"style":92},"\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",[94,58479,58480,58490,58504,58508,58516,58530,58550,58562,58570,58574,58582,58594,58602,58613,58631,58647,58661,58669,58673,58681,58689,58693],{"__ignoreMap":92},[97,58481,58482,58484,58486,58488],{"class":99,"line":100},[97,58483,51487],{"class":103},[97,58485,51490],{"class":107},[97,58487,51493],{"class":111},[97,58489,130],{"class":103},[97,58491,58492,58494,58496,58498,58500,58502],{"class":99,"line":195},[97,58493,104],{"class":103},[97,58495,50825],{"class":107},[97,58497,51504],{"class":111},[97,58499,115],{"class":103},[97,58501,51509],{"class":118},[97,58503,130],{"class":103},[97,58505,58506],{"class":99,"line":241},[97,58507,2591],{"emptyLinePlaceholder":249},[97,58509,58510,58512,58514],{"class":99,"line":1387},[97,58511,104],{"class":103},[97,58513,51522],{"class":107},[97,58515,130],{"class":103},[97,58517,58518,58520,58522,58524,58526,58528],{"class":99,"line":1393},[97,58519,52328],{"class":103},[97,58521,108],{"class":107},[97,58523,51534],{"class":111},[97,58525,115],{"class":103},[97,58527,51539],{"class":118},[97,58529,130],{"class":103},[97,58531,58532,58534,58536,58538,58540,58542,58544,58546,58548],{"class":99,"line":1407},[97,58533,52328],{"class":103},[97,58535,108],{"class":107},[97,58537,112],{"class":111},[97,58539,115],{"class":103},[97,58541,119],{"class":118},[97,58543,122],{"class":111},[97,58545,115],{"class":103},[97,58547,127],{"class":118},[97,58549,130],{"class":103},[97,58551,58552,58554,58556,58558,58560],{"class":99,"line":1413},[97,58553,52328],{"class":103},[97,58555,51591],{"class":107},[97,58557,51594],{"class":103},[97,58559,51591],{"class":107},[97,58561,130],{"class":103},[97,58563,58564,58566,58568],{"class":99,"line":1504},[97,58565,51969],{"class":103},[97,58567,51522],{"class":107},[97,58569,130],{"class":103},[97,58571,58572],{"class":99,"line":1510},[97,58573,2591],{"emptyLinePlaceholder":249},[97,58575,58576,58578,58580],{"class":99,"line":1522},[97,58577,104],{"class":103},[97,58579,51984],{"class":107},[97,58581,130],{"class":103},[97,58583,58584,58586,58588,58590,58592],{"class":99,"line":1804},[97,58585,52328],{"class":103},[97,58587,54071],{"class":107},[97,58589,54077],{"class":103},[97,58591,54071],{"class":107},[97,58593,130],{"class":103},[97,58595,58596,58598,58600],{"class":99,"line":1809},[97,58597,52328],{"class":103},[97,58599,51997],{"class":107},[97,58601,130],{"class":103},[97,58603,58604,58606,58608,58610],{"class":99,"line":1815},[97,58605,11412],{"class":319},[97,58607,2431],{"class":370},[97,58609,13755],{"class":319},[97,58611,58612],{"class":370}," 10\n",[97,58614,58615,58617,58619,58621,58623,58625,58627,58629],{"class":99,"line":1820},[97,58616,11412],{"class":319},[97,58618,54575],{"class":370},[97,58620,13755],{"class":319},[97,58622,54580],{"class":103},[97,58624,54583],{"class":111},[97,58626,323],{"class":103},[97,58628,58388],{"class":118},[97,58630,329],{"class":103},[97,58632,58633,58635,58637,58639,58641,58643,58645],{"class":99,"line":1834},[97,58634,58395],{"class":103},[97,58636,57997],{"class":111},[97,58638,323],{"class":103},[97,58640,58002],{"class":118},[97,58642,12626],{"class":103},[97,58644,54633],{"class":319},[97,58646,54636],{"class":103},[97,58648,58649,58651,58653,58655,58657,58659],{"class":99,"line":1839},[97,58650,58412],{"class":319},[97,58652,2431],{"class":370},[97,58654,13755],{"class":319},[97,58656,58419],{"class":103},[97,58658,58044],{"class":111},[97,58660,2167],{"class":103},[97,58662,58663,58665,58667],{"class":99,"line":1845},[97,58664,58428],{"class":103},[97,58666,58431],{"class":111},[97,58668,336],{"class":103},[97,58670,58671],{"class":99,"line":1866},[97,58672,33651],{"class":103},[97,58674,58675,58677,58679],{"class":99,"line":1871},[97,58676,52601],{"class":103},[97,58678,51997],{"class":107},[97,58680,130],{"class":103},[97,58682,58683,58685,58687],{"class":99,"line":1885},[97,58684,51969],{"class":103},[97,58686,51984],{"class":107},[97,58688,130],{"class":103},[97,58690,58691],{"class":99,"line":1890},[97,58692,2591],{"emptyLinePlaceholder":249},[97,58694,58695,58697,58699],{"class":99,"line":1919},[97,58696,51969],{"class":103},[97,58698,50825],{"class":107},[97,58700,130],{"class":103},[24,58702,58703],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[87,58705,58707],{"className":50823,"code":58706,"language":50825,"meta":92,"style":92},"\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",[94,58708,58709,58719,58733,58737,58745,58759,58779,58791,58799,58803,58811,58823,58831,58841,58859,58875,58888,58896,58900,58908,58916,58920],{"__ignoreMap":92},[97,58710,58711,58713,58715,58717],{"class":99,"line":100},[97,58712,51487],{"class":103},[97,58714,51490],{"class":107},[97,58716,51493],{"class":111},[97,58718,130],{"class":103},[97,58720,58721,58723,58725,58727,58729,58731],{"class":99,"line":195},[97,58722,104],{"class":103},[97,58724,50825],{"class":107},[97,58726,51504],{"class":111},[97,58728,115],{"class":103},[97,58730,51509],{"class":118},[97,58732,130],{"class":103},[97,58734,58735],{"class":99,"line":241},[97,58736,2591],{"emptyLinePlaceholder":249},[97,58738,58739,58741,58743],{"class":99,"line":1387},[97,58740,104],{"class":103},[97,58742,51522],{"class":107},[97,58744,130],{"class":103},[97,58746,58747,58749,58751,58753,58755,58757],{"class":99,"line":1393},[97,58748,52328],{"class":103},[97,58750,108],{"class":107},[97,58752,51534],{"class":111},[97,58754,115],{"class":103},[97,58756,51539],{"class":118},[97,58758,130],{"class":103},[97,58760,58761,58763,58765,58767,58769,58771,58773,58775,58777],{"class":99,"line":1407},[97,58762,52328],{"class":103},[97,58764,108],{"class":107},[97,58766,112],{"class":111},[97,58768,115],{"class":103},[97,58770,119],{"class":118},[97,58772,122],{"class":111},[97,58774,115],{"class":103},[97,58776,127],{"class":118},[97,58778,130],{"class":103},[97,58780,58781,58783,58785,58787,58789],{"class":99,"line":1413},[97,58782,52328],{"class":103},[97,58784,51591],{"class":107},[97,58786,51594],{"class":103},[97,58788,51591],{"class":107},[97,58790,130],{"class":103},[97,58792,58793,58795,58797],{"class":99,"line":1504},[97,58794,51969],{"class":103},[97,58796,51522],{"class":107},[97,58798,130],{"class":103},[97,58800,58801],{"class":99,"line":1510},[97,58802,2591],{"emptyLinePlaceholder":249},[97,58804,58805,58807,58809],{"class":99,"line":1522},[97,58806,104],{"class":103},[97,58808,51984],{"class":107},[97,58810,130],{"class":103},[97,58812,58813,58815,58817,58819,58821],{"class":99,"line":1804},[97,58814,52328],{"class":103},[97,58816,54071],{"class":107},[97,58818,54077],{"class":103},[97,58820,54071],{"class":107},[97,58822,130],{"class":103},[97,58824,58825,58827,58829],{"class":99,"line":1809},[97,58826,52328],{"class":103},[97,58828,51997],{"class":107},[97,58830,130],{"class":103},[97,58832,58833,58835,58837,58839],{"class":99,"line":1815},[97,58834,11412],{"class":319},[97,58836,2431],{"class":370},[97,58838,13755],{"class":319},[97,58840,58612],{"class":370},[97,58842,58843,58845,58847,58849,58851,58853,58855,58857],{"class":99,"line":1820},[97,58844,11412],{"class":319},[97,58846,54575],{"class":370},[97,58848,13755],{"class":319},[97,58850,54580],{"class":103},[97,58852,54583],{"class":111},[97,58854,323],{"class":103},[97,58856,58388],{"class":118},[97,58858,329],{"class":103},[97,58860,58861,58863,58865,58867,58869,58871,58873],{"class":99,"line":1834},[97,58862,58395],{"class":103},[97,58864,57997],{"class":111},[97,58866,323],{"class":103},[97,58868,58002],{"class":118},[97,58870,12626],{"class":103},[97,58872,54633],{"class":319},[97,58874,54636],{"class":103},[97,58876,58877,58880,58882,58884,58886],{"class":99,"line":1839},[97,58878,58879],{"class":103},"      num ",[97,58881,115],{"class":319},[97,58883,58419],{"class":103},[97,58885,58044],{"class":111},[97,58887,2167],{"class":103},[97,58889,58890,58892,58894],{"class":99,"line":1845},[97,58891,58428],{"class":103},[97,58893,58431],{"class":111},[97,58895,336],{"class":103},[97,58897,58898],{"class":99,"line":1866},[97,58899,33651],{"class":103},[97,58901,58902,58904,58906],{"class":99,"line":1871},[97,58903,52601],{"class":103},[97,58905,51997],{"class":107},[97,58907,130],{"class":103},[97,58909,58910,58912,58914],{"class":99,"line":1885},[97,58911,51969],{"class":103},[97,58913,51984],{"class":107},[97,58915,130],{"class":103},[97,58917,58918],{"class":99,"line":1890},[97,58919,2591],{"emptyLinePlaceholder":249},[97,58921,58922,58924,58926],{"class":99,"line":1919},[97,58923,51969],{"class":103},[97,58925,50825],{"class":107},[97,58927,130],{"class":103},[24,58929,58930],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[48,58932,58934],{"id":58933},"_324-事件监听版本","3.2.4 事件监听版本",[24,58936,58937],{},[19,58938],{"alt":92,"src":58939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[24,58941,58942],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[24,58944,58945],{},"这种方式会覆盖前边的事件监听:",[87,58947,58949],{"className":50823,"code":58948,"language":50825,"meta":92,"style":92},"\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",[94,58950,58951,58961,58975,58979,58987,59001,59021,59033,59041,59045,59053,59065,59073,59091,59105,59116,59120,59132,59142,59146,59154,59162,59166],{"__ignoreMap":92},[97,58952,58953,58955,58957,58959],{"class":99,"line":100},[97,58954,51487],{"class":103},[97,58956,51490],{"class":107},[97,58958,51493],{"class":111},[97,58960,130],{"class":103},[97,58962,58963,58965,58967,58969,58971,58973],{"class":99,"line":195},[97,58964,104],{"class":103},[97,58966,50825],{"class":107},[97,58968,51504],{"class":111},[97,58970,115],{"class":103},[97,58972,51509],{"class":118},[97,58974,130],{"class":103},[97,58976,58977],{"class":99,"line":241},[97,58978,2591],{"emptyLinePlaceholder":249},[97,58980,58981,58983,58985],{"class":99,"line":1387},[97,58982,104],{"class":103},[97,58984,51522],{"class":107},[97,58986,130],{"class":103},[97,58988,58989,58991,58993,58995,58997,58999],{"class":99,"line":1393},[97,58990,52328],{"class":103},[97,58992,108],{"class":107},[97,58994,51534],{"class":111},[97,58996,115],{"class":103},[97,58998,51539],{"class":118},[97,59000,130],{"class":103},[97,59002,59003,59005,59007,59009,59011,59013,59015,59017,59019],{"class":99,"line":1407},[97,59004,52328],{"class":103},[97,59006,108],{"class":107},[97,59008,112],{"class":111},[97,59010,115],{"class":103},[97,59012,119],{"class":118},[97,59014,122],{"class":111},[97,59016,115],{"class":103},[97,59018,127],{"class":118},[97,59020,130],{"class":103},[97,59022,59023,59025,59027,59029,59031],{"class":99,"line":1413},[97,59024,52328],{"class":103},[97,59026,51591],{"class":107},[97,59028,51594],{"class":103},[97,59030,51591],{"class":107},[97,59032,130],{"class":103},[97,59034,59035,59037,59039],{"class":99,"line":1504},[97,59036,51969],{"class":103},[97,59038,51522],{"class":107},[97,59040,130],{"class":103},[97,59042,59043],{"class":99,"line":1510},[97,59044,2591],{"emptyLinePlaceholder":249},[97,59046,59047,59049,59051],{"class":99,"line":1522},[97,59048,104],{"class":103},[97,59050,51984],{"class":107},[97,59052,130],{"class":103},[97,59054,59055,59057,59059,59061,59063],{"class":99,"line":1804},[97,59056,52328],{"class":103},[97,59058,54071],{"class":107},[97,59060,54077],{"class":103},[97,59062,54071],{"class":107},[97,59064,130],{"class":103},[97,59066,59067,59069,59071],{"class":99,"line":1809},[97,59068,52328],{"class":103},[97,59070,51997],{"class":107},[97,59072,130],{"class":103},[97,59074,59075,59077,59079,59081,59083,59085,59087,59089],{"class":99,"line":1815},[97,59076,11412],{"class":319},[97,59078,54575],{"class":370},[97,59080,13755],{"class":319},[97,59082,54580],{"class":103},[97,59084,54583],{"class":111},[97,59086,323],{"class":103},[97,59088,58388],{"class":118},[97,59090,329],{"class":103},[97,59092,59093,59095,59098,59100,59103],{"class":99,"line":1820},[97,59094,58395],{"class":103},[97,59096,59097],{"class":111},"onclick",[97,59099,13755],{"class":319},[97,59101,59102],{"class":319}," function",[97,59104,54636],{"class":103},[97,59106,59107,59110,59112,59114],{"class":99,"line":1834},[97,59108,59109],{"class":111},"      alert",[97,59111,323],{"class":103},[97,59113,792],{"class":370},[97,59115,329],{"class":103},[97,59117,59118],{"class":99,"line":1839},[97,59119,2378],{"class":103},[97,59121,59122,59124,59126,59128,59130],{"class":99,"line":1845},[97,59123,58395],{"class":103},[97,59125,59097],{"class":111},[97,59127,13755],{"class":319},[97,59129,59102],{"class":319},[97,59131,54636],{"class":103},[97,59133,59134,59136,59138,59140],{"class":99,"line":1866},[97,59135,59109],{"class":111},[97,59137,323],{"class":103},[97,59139,1070],{"class":370},[97,59141,329],{"class":103},[97,59143,59144],{"class":99,"line":1871},[97,59145,2378],{"class":103},[97,59147,59148,59150,59152],{"class":99,"line":1885},[97,59149,52601],{"class":103},[97,59151,51997],{"class":107},[97,59153,130],{"class":103},[97,59155,59156,59158,59160],{"class":99,"line":1890},[97,59157,51969],{"class":103},[97,59159,51984],{"class":107},[97,59161,130],{"class":103},[97,59163,59164],{"class":99,"line":1919},[97,59165,2591],{"emptyLinePlaceholder":249},[97,59167,59168,59170,59172],{"class":99,"line":1924},[97,59169,51969],{"class":103},[97,59171,50825],{"class":107},[97,59173,130],{"class":103},[24,59175,59176],{},"只要点击就输出结果为22,前边11被覆盖了",[87,59178,59180],{"className":50823,"code":59179,"language":50825,"meta":92,"style":92},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[94,59181,59182,59187,59192,59196,59201,59206],{"__ignoreMap":92},[97,59183,59184],{"class":99,"line":100},[97,59185,59186],{"class":103},"  btn.addEventListener('click', function () {\n",[97,59188,59189],{"class":99,"line":195},[97,59190,59191],{"class":103},"      alert(11)\n",[97,59193,59194],{"class":99,"line":241},[97,59195,33651],{"class":103},[97,59197,59198],{"class":99,"line":1387},[97,59199,59200],{"class":103},"    btn.addEventListener('click', function () {\n",[97,59202,59203],{"class":99,"line":1393},[97,59204,59205],{"class":103},"      alert(22)\n",[97,59207,59208],{"class":99,"line":1407},[97,59209,33651],{"class":103},[24,59211,59212],{},"点击第一次输出11,第二次点击为22",[48,59214,59216],{"id":59215},"_325-事件类型","3.2.5 事件类型",[24,59218,59219],{},[19,59220],{"alt":92,"src":59221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[160,59223,59225],{"id":59224},"_3251-鼠标事件","3.2.5.1 鼠标事件",[24,59227,59228],{},"补充知识:",[24,59230,59231],{},"轮播图自动播放模块,可以使用",[24,59233,59234],{},"let timerId = setInterval(function () {",[24,59236,59237],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[24,59239,59240],{},"用js方法模拟进行点击事件,click必须加()",[24,59242,59243],{},"next.click()",[24,59245,59246],{},"}, 1000)",[24,59248,59249],{},[19,59250],{"alt":92,"src":59251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[87,59253,59255],{"className":53251,"code":59254,"language":53253,"meta":92,"style":92},"\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",[94,59256,59257,59261,59271,59285,59289,59297,59312,59332,59352,59365,59373,59378,59383,59387,59391,59396,59401,59406,59411,59415,59419,59424,59429,59434,59438,59442,59447,59451,59456,59461,59465,59469,59474,59479,59484,59489,59494,59498,59502,59507,59512,59517,59522,59527,59531,59535,59540,59545,59550,59555,59560,59565,59570,59575,59580,59585,59589,59593,59598,59603,59607,59611,59616,59621,59625,59630,59635,59639,59643,59648,59652,59657,59662,59666,59671,59675,59679,59684,59689,59694,59699,59704,59709,59714,59718,59722,59726,59731,59736,59741,59746,59750,59758,59766,59770,59778,59793,59807,59828,59836,59850,59863,59878,59897,59909,59921,59933,59945,59957,59969,59981,59989,60004,60028,60052,60060,60068,60076,60084,60089,60094,60099,60104,60109,60114,60119,60124,60129,60134,60138,60143,60148,60153,60158,60163,60168,60173,60178,60183,60187,60192,60197,60202,60207,60212,60217,60222,60227,60232,60237,60242,60247,60251,60255,60260,60265,60270,60274,60279,60284,60289,60294,60299,60303,60308,60312,60316,60320,60324,60328,60332,60337,60342,60347,60352,60357,60362,60367,60372,60377,60381,60385,60390,60395,60400,60405,60410,60414,60419,60424,60429,60434,60439,60444,60448,60452,60457,60461,60466,60470,60475,60480,60485,60490,60495,60500,60504,60512,60520,60524],{"__ignoreMap":92},[97,59258,59259],{"class":99,"line":100},[97,59260,2591],{"emptyLinePlaceholder":249},[97,59262,59263,59265,59267,59269],{"class":99,"line":195},[97,59264,51487],{"class":103},[97,59266,51490],{"class":319},[97,59268,51493],{"class":370},[97,59270,130],{"class":103},[97,59272,59273,59275,59277,59279,59281,59283],{"class":99,"line":241},[97,59274,104],{"class":103},[97,59276,50825],{"class":107},[97,59278,51504],{"class":111},[97,59280,115],{"class":103},[97,59282,51509],{"class":118},[97,59284,130],{"class":103},[97,59286,59287],{"class":99,"line":1387},[97,59288,2591],{"emptyLinePlaceholder":249},[97,59290,59291,59293,59295],{"class":99,"line":1393},[97,59292,104],{"class":103},[97,59294,51522],{"class":107},[97,59296,130],{"class":103},[97,59298,59299,59301,59303,59305,59307,59309],{"class":99,"line":1407},[97,59300,52328],{"class":103},[97,59302,108],{"class":107},[97,59304,51534],{"class":111},[97,59306,115],{"class":103},[97,59308,51539],{"class":118},[97,59310,59311],{"class":103}," \u002F>\n",[97,59313,59314,59316,59318,59320,59322,59324,59326,59328,59330],{"class":99,"line":1413},[97,59315,52328],{"class":103},[97,59317,108],{"class":107},[97,59319,51550],{"class":111},[97,59321,115],{"class":103},[97,59323,51555],{"class":118},[97,59325,122],{"class":111},[97,59327,115],{"class":103},[97,59329,51562],{"class":118},[97,59331,59311],{"class":103},[97,59333,59334,59336,59338,59340,59342,59344,59346,59348,59350],{"class":99,"line":1504},[97,59335,52328],{"class":103},[97,59337,108],{"class":107},[97,59339,112],{"class":111},[97,59341,115],{"class":103},[97,59343,119],{"class":118},[97,59345,122],{"class":111},[97,59347,115],{"class":103},[97,59349,127],{"class":118},[97,59351,59311],{"class":103},[97,59353,59354,59356,59358,59361,59363],{"class":99,"line":1510},[97,59355,52328],{"class":103},[97,59357,51591],{"class":107},[97,59359,59360],{"class":103},">轮播图点击切换\u003C\u002F",[97,59362,51591],{"class":107},[97,59364,130],{"class":103},[97,59366,59367,59369,59371],{"class":99,"line":1522},[97,59368,52328],{"class":103},[97,59370,231],{"class":107},[97,59372,130],{"class":103},[97,59374,59375],{"class":99,"line":1804},[97,59376,59377],{"class":103},"    * {\n",[97,59379,59380],{"class":99,"line":1809},[97,59381,59382],{"class":103},"      box-sizing: border-box;\n",[97,59384,59385],{"class":99,"line":1815},[97,59386,2378],{"class":103},[97,59388,59389],{"class":99,"line":1820},[97,59390,2591],{"emptyLinePlaceholder":249},[97,59392,59393],{"class":99,"line":1834},[97,59394,59395],{"class":103},"    .slider {\n",[97,59397,59398],{"class":99,"line":1839},[97,59399,59400],{"class":103},"      width: 560px;\n",[97,59402,59403],{"class":99,"line":1845},[97,59404,59405],{"class":103},"      height: 400px;\n",[97,59407,59408],{"class":99,"line":1866},[97,59409,59410],{"class":103},"      overflow: hidden;\n",[97,59412,59413],{"class":99,"line":1871},[97,59414,2378],{"class":103},[97,59416,59417],{"class":99,"line":1885},[97,59418,2591],{"emptyLinePlaceholder":249},[97,59420,59421],{"class":99,"line":1890},[97,59422,59423],{"class":103},"    .slider-wrapper {\n",[97,59425,59426],{"class":99,"line":1919},[97,59427,59428],{"class":103},"      width: 100%;\n",[97,59430,59431],{"class":99,"line":1924},[97,59432,59433],{"class":103},"      height: 320px;\n",[97,59435,59436],{"class":99,"line":1941},[97,59437,2378],{"class":103},[97,59439,59440],{"class":99,"line":1946},[97,59441,2591],{"emptyLinePlaceholder":249},[97,59443,59444],{"class":99,"line":1951},[97,59445,59446],{"class":103},"    .slider-wrapper img {\n",[97,59448,59449],{"class":99,"line":1956},[97,59450,59428],{"class":103},[97,59452,59453],{"class":99,"line":1970},[97,59454,59455],{"class":103},"      height: 100%;\n",[97,59457,59458],{"class":99,"line":1975},[97,59459,59460],{"class":103},"      display: block;\n",[97,59462,59463],{"class":99,"line":2768},[97,59464,2378],{"class":103},[97,59466,59467],{"class":99,"line":2782},[97,59468,2591],{"emptyLinePlaceholder":249},[97,59470,59471],{"class":99,"line":2790},[97,59472,59473],{"class":103},"    .slider-footer {\n",[97,59475,59476],{"class":99,"line":2795},[97,59477,59478],{"class":103},"      height: 80px;\n",[97,59480,59481],{"class":99,"line":2801},[97,59482,59483],{"class":103},"      background-color: rgb(100, 67, 68);\n",[97,59485,59486],{"class":99,"line":2807},[97,59487,59488],{"class":103},"      padding: 12px 12px 0 12px;\n",[97,59490,59491],{"class":99,"line":2812},[97,59492,59493],{"class":103},"      position: relative;\n",[97,59495,59496],{"class":99,"line":8139},[97,59497,2378],{"class":103},[97,59499,59500],{"class":99,"line":8163},[97,59501,2591],{"emptyLinePlaceholder":249},[97,59503,59504],{"class":99,"line":8168},[97,59505,59506],{"class":103},"    .slider-footer .toggle {\n",[97,59508,59509],{"class":99,"line":8174},[97,59510,59511],{"class":103},"      position: absolute;\n",[97,59513,59514],{"class":99,"line":8201},[97,59515,59516],{"class":103},"      right: 0;\n",[97,59518,59519],{"class":99,"line":8206},[97,59520,59521],{"class":103},"      top: 12px;\n",[97,59523,59524],{"class":99,"line":8212},[97,59525,59526],{"class":103},"      display: flex;\n",[97,59528,59529],{"class":99,"line":8224},[97,59530,2378],{"class":103},[97,59532,59533],{"class":99,"line":8236},[97,59534,2591],{"emptyLinePlaceholder":249},[97,59536,59537],{"class":99,"line":8248},[97,59538,59539],{"class":103},"    .slider-footer .toggle button {\n",[97,59541,59542],{"class":99,"line":9907},[97,59543,59544],{"class":103},"      margin-right: 12px;\n",[97,59546,59547],{"class":99,"line":9932},[97,59548,59549],{"class":103},"      width: 28px;\n",[97,59551,59552],{"class":99,"line":9955},[97,59553,59554],{"class":103},"      height: 28px;\n",[97,59556,59557],{"class":99,"line":9979},[97,59558,59559],{"class":103},"      appearance: none;\n",[97,59561,59562],{"class":99,"line":9984},[97,59563,59564],{"class":103},"      border: none;\n",[97,59566,59567],{"class":99,"line":9989},[97,59568,59569],{"class":103},"      background: rgba(255, 255, 255, 0.1);\n",[97,59571,59572],{"class":99,"line":9994},[97,59573,59574],{"class":103},"      color: #fff;\n",[97,59576,59577],{"class":99,"line":10003},[97,59578,59579],{"class":103},"      border-radius: 4px;\n",[97,59581,59582],{"class":99,"line":10008},[97,59583,59584],{"class":103},"      cursor: pointer;\n",[97,59586,59587],{"class":99,"line":10014},[97,59588,2378],{"class":103},[97,59590,59591],{"class":99,"line":10035},[97,59592,2591],{"emptyLinePlaceholder":249},[97,59594,59595],{"class":99,"line":10041},[97,59596,59597],{"class":103},"    .slider-footer .toggle button:hover {\n",[97,59599,59600],{"class":99,"line":10055},[97,59601,59602],{"class":103},"      background: rgba(255, 255, 255, 0.2);\n",[97,59604,59605],{"class":99,"line":10061},[97,59606,2378],{"class":103},[97,59608,59609],{"class":99,"line":10088},[97,59610,2591],{"emptyLinePlaceholder":249},[97,59612,59613],{"class":99,"line":10097},[97,59614,59615],{"class":103},"    .slider-footer p {\n",[97,59617,59618],{"class":99,"line":10103},[97,59619,59620],{"class":103},"      margin: 0;\n",[97,59622,59623],{"class":99,"line":10111},[97,59624,59574],{"class":103},[97,59626,59627],{"class":99,"line":10116},[97,59628,59629],{"class":103},"      font-size: 18px;\n",[97,59631,59632],{"class":99,"line":16794},[97,59633,59634],{"class":103},"      margin-bottom: 10px;\n",[97,59636,59637],{"class":99,"line":16800},[97,59638,2378],{"class":103},[97,59640,59641],{"class":99,"line":16823},[97,59642,2591],{"emptyLinePlaceholder":249},[97,59644,59645],{"class":99,"line":16829},[97,59646,59647],{"class":103},"    .slider-indicator {\n",[97,59649,59650],{"class":99,"line":16852},[97,59651,59620],{"class":103},[97,59653,59654],{"class":99,"line":16866},[97,59655,59656],{"class":103},"      padding: 0;\n",[97,59658,59659],{"class":99,"line":16886},[97,59660,59661],{"class":103},"      list-style: none;\n",[97,59663,59664],{"class":99,"line":16892},[97,59665,59526],{"class":103},[97,59667,59668],{"class":99,"line":16903},[97,59669,59670],{"class":103},"      align-items: center;\n",[97,59672,59673],{"class":99,"line":16926},[97,59674,2378],{"class":103},[97,59676,59677],{"class":99,"line":16948},[97,59678,2591],{"emptyLinePlaceholder":249},[97,59680,59681],{"class":99,"line":16953},[97,59682,59683],{"class":103},"    .slider-indicator li {\n",[97,59685,59686],{"class":99,"line":16959},[97,59687,59688],{"class":103},"      width: 8px;\n",[97,59690,59691],{"class":99,"line":16973},[97,59692,59693],{"class":103},"      height: 8px;\n",[97,59695,59696],{"class":99,"line":16986},[97,59697,59698],{"class":103},"      margin: 4px;\n",[97,59700,59701],{"class":99,"line":16991},[97,59702,59703],{"class":103},"      border-radius: 50%;\n",[97,59705,59706],{"class":99,"line":17005},[97,59707,59708],{"class":103},"      background: #fff;\n",[97,59710,59711],{"class":99,"line":17010},[97,59712,59713],{"class":103},"      opacity: 0.4;\n",[97,59715,59716],{"class":99,"line":17016},[97,59717,59584],{"class":103},[97,59719,59720],{"class":99,"line":17021},[97,59721,2378],{"class":103},[97,59723,59724],{"class":99,"line":17035},[97,59725,2591],{"emptyLinePlaceholder":249},[97,59727,59728],{"class":99,"line":17040},[97,59729,59730],{"class":103},"    .slider-indicator li.active {\n",[97,59732,59733],{"class":99,"line":17045},[97,59734,59735],{"class":103},"      width: 12px;\n",[97,59737,59738],{"class":99,"line":17059},[97,59739,59740],{"class":103},"      height: 12px;\n",[97,59742,59743],{"class":99,"line":17071},[97,59744,59745],{"class":103},"      opacity: 1;\n",[97,59747,59748],{"class":99,"line":17076},[97,59749,2378],{"class":103},[97,59751,59752,59754,59756],{"class":99,"line":17089},[97,59753,52601],{"class":103},[97,59755,231],{"class":107},[97,59757,130],{"class":103},[97,59759,59760,59762,59764],{"class":99,"line":17094},[97,59761,51969],{"class":103},[97,59763,51522],{"class":107},[97,59765,130],{"class":103},[97,59767,59768],{"class":99,"line":17099},[97,59769,2591],{"emptyLinePlaceholder":249},[97,59771,59772,59774,59776],{"class":99,"line":17104},[97,59773,104],{"class":103},[97,59775,51984],{"class":107},[97,59777,130],{"class":103},[97,59779,59780,59782,59784,59786,59788,59791],{"class":99,"line":17117},[97,59781,52328],{"class":103},[97,59783,51795],{"class":107},[97,59785,53670],{"class":111},[97,59787,115],{"class":103},[97,59789,59790],{"class":118},"\"slider\"",[97,59792,130],{"class":103},[97,59794,59795,59797,59799,59801,59803,59805],{"class":99,"line":17122},[97,59796,51529],{"class":103},[97,59798,51795],{"class":107},[97,59800,53670],{"class":111},[97,59802,115],{"class":103},[97,59804,55411],{"class":118},[97,59806,130],{"class":103},[97,59808,59809,59811,59813,59815,59817,59820,59822,59824,59826],{"class":99,"line":32823},[97,59810,55418],{"class":103},[97,59812,19],{"class":107},[97,59814,55423],{"class":111},[97,59816,115],{"class":103},[97,59818,59819],{"class":118},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[97,59821,55431],{"class":111},[97,59823,115],{"class":103},[97,59825,7843],{"class":118},[97,59827,59311],{"class":103},[97,59829,59830,59832,59834],{"class":99,"line":32829},[97,59831,51960],{"class":103},[97,59833,51795],{"class":107},[97,59835,130],{"class":103},[97,59837,59838,59840,59842,59844,59846,59848],{"class":99,"line":32835},[97,59839,51529],{"class":103},[97,59841,51795],{"class":107},[97,59843,53670],{"class":111},[97,59845,115],{"class":103},[97,59847,55458],{"class":118},[97,59849,130],{"class":103},[97,59851,59852,59854,59856,59859,59861],{"class":99,"line":32841},[97,59853,55418],{"class":103},[97,59855,24],{"class":107},[97,59857,59858],{"class":103},">对人类来说会不会太超前了？\u003C\u002F",[97,59860,24],{"class":107},[97,59862,130],{"class":103},[97,59864,59865,59867,59869,59871,59873,59876],{"class":99,"line":32847},[97,59866,55418],{"class":103},[97,59868,67],{"class":107},[97,59870,53670],{"class":111},[97,59872,115],{"class":103},[97,59874,59875],{"class":118},"\"slider-indicator\"",[97,59877,130],{"class":103},[97,59879,59880,59882,59884,59886,59888,59891,59893,59895],{"class":99,"line":32858},[97,59881,55486],{"class":103},[97,59883,70],{"class":107},[97,59885,53670],{"class":111},[97,59887,115],{"class":103},[97,59889,59890],{"class":118},"\"active\"",[97,59892,55498],{"class":103},[97,59894,70],{"class":107},[97,59896,130],{"class":103},[97,59898,59899,59901,59903,59905,59907],{"class":99,"line":32864},[97,59900,55486],{"class":103},[97,59902,70],{"class":107},[97,59904,55498],{"class":103},[97,59906,70],{"class":107},[97,59908,130],{"class":103},[97,59910,59911,59913,59915,59917,59919],{"class":99,"line":32884},[97,59912,55486],{"class":103},[97,59914,70],{"class":107},[97,59916,55498],{"class":103},[97,59918,70],{"class":107},[97,59920,130],{"class":103},[97,59922,59923,59925,59927,59929,59931],{"class":99,"line":32890},[97,59924,55486],{"class":103},[97,59926,70],{"class":107},[97,59928,55498],{"class":103},[97,59930,70],{"class":107},[97,59932,130],{"class":103},[97,59934,59935,59937,59939,59941,59943],{"class":99,"line":32901},[97,59936,55486],{"class":103},[97,59938,70],{"class":107},[97,59940,55498],{"class":103},[97,59942,70],{"class":107},[97,59944,130],{"class":103},[97,59946,59947,59949,59951,59953,59955],{"class":99,"line":32907},[97,59948,55486],{"class":103},[97,59950,70],{"class":107},[97,59952,55498],{"class":103},[97,59954,70],{"class":107},[97,59956,130],{"class":103},[97,59958,59959,59961,59963,59965,59967],{"class":99,"line":32913},[97,59960,55486],{"class":103},[97,59962,70],{"class":107},[97,59964,55498],{"class":103},[97,59966,70],{"class":107},[97,59968,130],{"class":103},[97,59970,59971,59973,59975,59977,59979],{"class":99,"line":32919},[97,59972,55486],{"class":103},[97,59974,70],{"class":107},[97,59976,55498],{"class":103},[97,59978,70],{"class":107},[97,59980,130],{"class":103},[97,59982,59983,59985,59987],{"class":99,"line":32925},[97,59984,55591],{"class":103},[97,59986,67],{"class":107},[97,59988,130],{"class":103},[97,59990,59991,59993,59995,59997,59999,60002],{"class":99,"line":32931},[97,59992,55418],{"class":103},[97,59994,51795],{"class":107},[97,59996,53670],{"class":111},[97,59998,115],{"class":103},[97,60000,60001],{"class":118},"\"toggle\"",[97,60003,130],{"class":103},[97,60005,60006,60008,60010,60012,60014,60017,60019,60022,60024,60026],{"class":99,"line":32937},[97,60007,55486],{"class":103},[97,60009,54071],{"class":107},[97,60011,53670],{"class":111},[97,60013,115],{"class":103},[97,60015,60016],{"class":118},"\"prev\"",[97,60018,1279],{"class":103},[97,60020,60021],{"class":370},"&lt;",[97,60023,51969],{"class":103},[97,60025,54071],{"class":107},[97,60027,130],{"class":103},[97,60029,60030,60032,60034,60036,60038,60041,60043,60046,60048,60050],{"class":99,"line":32943},[97,60031,55486],{"class":103},[97,60033,54071],{"class":107},[97,60035,53670],{"class":111},[97,60037,115],{"class":103},[97,60039,60040],{"class":118},"\"next\"",[97,60042,1279],{"class":103},[97,60044,60045],{"class":370},"&gt;",[97,60047,51969],{"class":103},[97,60049,54071],{"class":107},[97,60051,130],{"class":103},[97,60053,60054,60056,60058],{"class":99,"line":32963},[97,60055,55591],{"class":103},[97,60057,51795],{"class":107},[97,60059,130],{"class":103},[97,60061,60062,60064,60066],{"class":99,"line":32969},[97,60063,51960],{"class":103},[97,60065,51795],{"class":107},[97,60067,130],{"class":103},[97,60069,60070,60072,60074],{"class":99,"line":32985},[97,60071,52601],{"class":103},[97,60073,51795],{"class":107},[97,60075,130],{"class":103},[97,60077,60078,60080,60082],{"class":99,"line":32991},[97,60079,52328],{"class":103},[97,60081,51997],{"class":107},[97,60083,130],{"class":103},[97,60085,60086],{"class":99,"line":33005},[97,60087,60088],{"class":103},"    \u002F\u002F 1. 初始数据\n",[97,60090,60091],{"class":99,"line":33011},[97,60092,60093],{"class":103},"    const data = [\n",[97,60095,60096],{"class":99,"line":33026},[97,60097,60098],{"class":103},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[97,60100,60101],{"class":99,"line":33032},[97,60102,60103],{"class":103},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[97,60105,60106],{"class":99,"line":33041},[97,60107,60108],{"class":103},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[97,60110,60111],{"class":99,"line":33047},[97,60112,60113],{"class":103},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[97,60115,60116],{"class":99,"line":33056},[97,60117,60118],{"class":103},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[97,60120,60121],{"class":99,"line":33062},[97,60122,60123],{"class":103},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[97,60125,60126],{"class":99,"line":33068},[97,60127,60128],{"class":103},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[97,60130,60131],{"class":99,"line":33077},[97,60132,60133],{"class":103},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[97,60135,60136],{"class":99,"line":33083},[97,60137,53293],{"class":103},[97,60139,60140],{"class":99,"line":33094},[97,60141,60142],{"class":103},"    \u002F\u002F 获取元素\n",[97,60144,60145],{"class":99,"line":33100},[97,60146,60147],{"class":103},"    const img = document.querySelector('.slider-wrapper img')\n",[97,60149,60150],{"class":99,"line":33119},[97,60151,60152],{"class":103},"    const p = document.querySelector('.slider-footer p')\n",[97,60154,60155],{"class":99,"line":33125},[97,60156,60157],{"class":103},"    const footer = document.querySelector('.slider-footer')\n",[97,60159,60160],{"class":99,"line":33136},[97,60161,60162],{"class":103},"    \u002F\u002F 1. 右按钮业务\n",[97,60164,60165],{"class":99,"line":33142},[97,60166,60167],{"class":103},"    \u002F\u002F 1.1 获取右侧按钮 \n",[97,60169,60170],{"class":99,"line":33162},[97,60171,60172],{"class":103},"    const next = document.querySelector('.next')\n",[97,60174,60175],{"class":99,"line":33178},[97,60176,60177],{"class":103},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[97,60179,60180],{"class":99,"line":33184},[97,60181,60182],{"class":103},"    \u002F\u002F 1.2 注册点击事件\n",[97,60184,60185],{"class":99,"line":33198},[97,60186,2591],{"emptyLinePlaceholder":249},[97,60188,60189],{"class":99,"line":33204},[97,60190,60191],{"class":103},"    next.addEventListener('click', function () {\n",[97,60193,60194],{"class":99,"line":33210},[97,60195,60196],{"class":103},"      \u002F\u002F console.log(11)\n",[97,60198,60199],{"class":99,"line":33221},[97,60200,60201],{"class":103},"      i++\n",[97,60203,60204],{"class":99,"line":33227},[97,60205,60206],{"class":103},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[97,60208,60209],{"class":99,"line":33233},[97,60210,60211],{"class":103},"      \u002F\u002F if (i >= 8) {\n",[97,60213,60214],{"class":99,"line":33243},[97,60215,60216],{"class":103},"      \u002F\u002F   i = 0\n",[97,60218,60219],{"class":99,"line":33249},[97,60220,60221],{"class":103},"      \u002F\u002F }\n",[97,60223,60224],{"class":99,"line":33260},[97,60225,60226],{"class":103},"      i = i >= data.length ? 0 : i\n",[97,60228,60229],{"class":99,"line":33266},[97,60230,60231],{"class":103},"      \u002F\u002F 1.3 得到对应的对象\n",[97,60233,60234],{"class":99,"line":33276},[97,60235,60236],{"class":103},"      \u002F\u002F console.log(data[i])\n",[97,60238,60239],{"class":99,"line":33281},[97,60240,60241],{"class":103},"      \u002F\u002F 调用函数\n",[97,60243,60244],{"class":99,"line":33287},[97,60245,60246],{"class":103},"      toggle()\n",[97,60248,60249],{"class":99,"line":33336},[97,60250,33651],{"class":103},[97,60252,60253],{"class":99,"line":33383},[97,60254,2591],{"emptyLinePlaceholder":249},[97,60256,60257],{"class":99,"line":33388},[97,60258,60259],{"class":103},"    \u002F\u002F 2. 左侧按钮业务\n",[97,60261,60262],{"class":99,"line":33394},[97,60263,60264],{"class":103},"    \u002F\u002F 2.1 获取左侧按钮 \n",[97,60266,60267],{"class":99,"line":33413},[97,60268,60269],{"class":103},"    const prev = document.querySelector('.prev')\n",[97,60271,60272],{"class":99,"line":33419},[97,60273,60182],{"class":103},[97,60275,60276],{"class":99,"line":33439},[97,60277,60278],{"class":103},"    prev.addEventListener('click', function () {\n",[97,60280,60281],{"class":99,"line":33445},[97,60282,60283],{"class":103},"      i--\n",[97,60285,60286],{"class":99,"line":33451},[97,60287,60288],{"class":103},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[97,60290,60291],{"class":99,"line":33461},[97,60292,60293],{"class":103},"      \u002F\u002F if (i \u003C 0) {\n",[97,60295,60296],{"class":99,"line":33466},[97,60297,60298],{"class":103},"      \u002F\u002F   i = 7\n",[97,60300,60301],{"class":99,"line":33472},[97,60302,60221],{"class":103},[97,60304,60305],{"class":99,"line":33488},[97,60306,60307],{"class":103},"      i = i \u003C 0 ? data.length - 1 : i\n",[97,60309,60310],{"class":99,"line":33533},[97,60311,60231],{"class":103},[97,60313,60314],{"class":99,"line":33539},[97,60315,60236],{"class":103},[97,60317,60318],{"class":99,"line":33545},[97,60319,60241],{"class":103},[97,60321,60322],{"class":99,"line":33551},[97,60323,60246],{"class":103},[97,60325,60326],{"class":99,"line":33562},[97,60327,33651],{"class":103},[97,60329,60330],{"class":99,"line":33568},[97,60331,2591],{"emptyLinePlaceholder":249},[97,60333,60334],{"class":99,"line":33574},[97,60335,60336],{"class":103},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[97,60338,60339],{"class":99,"line":33580},[97,60340,60341],{"class":103},"    function toggle() {\n",[97,60343,60344],{"class":99,"line":33598},[97,60345,60346],{"class":103},"      \u002F\u002F 1.4 渲染对应的数据\n",[97,60348,60349],{"class":99,"line":33612},[97,60350,60351],{"class":103},"      img.src = data[i].url\n",[97,60353,60354],{"class":99,"line":33621},[97,60355,60356],{"class":103},"      p.innerHTML = data[i].title\n",[97,60358,60359],{"class":99,"line":33630},[97,60360,60361],{"class":103},"      footer.style.backgroundColor = data[i].color\n",[97,60363,60364],{"class":99,"line":33639},[97,60365,60366],{"class":103},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[97,60368,60369],{"class":99,"line":33648},[97,60370,60371],{"class":103},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[97,60373,60374],{"class":99,"line":33654},[97,60375,60376],{"class":103},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[97,60378,60379],{"class":99,"line":33660},[97,60380,2378],{"class":103},[97,60382,60383],{"class":99,"line":33668},[97,60384,2591],{"emptyLinePlaceholder":249},[97,60386,60387],{"class":99,"line":33673},[97,60388,60389],{"class":103},"    \u002F\u002F 3. 自动播放模块\n",[97,60391,60392],{"class":99,"line":33679},[97,60393,60394],{"class":103},"    let timerId = setInterval(function () {\n",[97,60396,60397],{"class":99,"line":33690},[97,60398,60399],{"class":103},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[97,60401,60402],{"class":99,"line":33696},[97,60403,60404],{"class":103},"      next.click()\n",[97,60406,60407],{"class":99,"line":33716},[97,60408,60409],{"class":103},"    }, 1000)\n",[97,60411,60412],{"class":99,"line":33722},[97,60413,2591],{"emptyLinePlaceholder":249},[97,60415,60416],{"class":99,"line":33728},[97,60417,60418],{"class":103},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[97,60420,60421],{"class":99,"line":33734},[97,60422,60423],{"class":103},"    const slider = document.querySelector('.slider')\n",[97,60425,60426],{"class":99,"line":33751},[97,60427,60428],{"class":103},"    \u002F\u002F 注册事件\n",[97,60430,60431],{"class":99,"line":33757},[97,60432,60433],{"class":103},"    slider.addEventListener('mouseenter', function () {\n",[97,60435,60436],{"class":99,"line":33763},[97,60437,60438],{"class":103},"      \u002F\u002F 停止定时器\n",[97,60440,60441],{"class":99,"line":33769},[97,60442,60443],{"class":103},"      clearInterval(timerId)\n",[97,60445,60446],{"class":99,"line":33775},[97,60447,33651],{"class":103},[97,60449,60450],{"class":99,"line":33781},[97,60451,2591],{"emptyLinePlaceholder":249},[97,60453,60454],{"class":99,"line":33808},[97,60455,60456],{"class":103},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[97,60458,60459],{"class":99,"line":33832},[97,60460,60428],{"class":103},[97,60462,60463],{"class":99,"line":33838},[97,60464,60465],{"class":103},"    slider.addEventListener('mouseleave', function () {\n",[97,60467,60468],{"class":99,"line":33844},[97,60469,60438],{"class":103},[97,60471,60472],{"class":99,"line":33850},[97,60473,60474],{"class":103},"      if (timerId) clearInterval(timerId)\n",[97,60476,60477],{"class":99,"line":33861},[97,60478,60479],{"class":103},"      \u002F\u002F 开启定时器\n",[97,60481,60482],{"class":99,"line":33872},[97,60483,60484],{"class":103},"      timerId = setInterval(function () {\n",[97,60486,60487],{"class":99,"line":33878},[97,60488,60489],{"class":103},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[97,60491,60492],{"class":99,"line":33895},[97,60493,60494],{"class":103},"        next.click()\n",[97,60496,60497],{"class":99,"line":33918},[97,60498,60499],{"class":103},"      }, 1000)\n",[97,60501,60502],{"class":99,"line":33941},[97,60503,33651],{"class":103},[97,60505,60506,60508,60510],{"class":99,"line":33947},[97,60507,52601],{"class":103},[97,60509,51997],{"class":107},[97,60511,130],{"class":103},[97,60513,60514,60516,60518],{"class":99,"line":33952},[97,60515,51969],{"class":103},[97,60517,51984],{"class":107},[97,60519,130],{"class":103},[97,60521,60522],{"class":99,"line":33961},[97,60523,2591],{"emptyLinePlaceholder":249},[97,60525,60526,60528,60530],{"class":99,"line":33971},[97,60527,51969],{"class":103},[97,60529,50825],{"class":107},[97,60531,130],{"class":103},[160,60533,60535],{"id":60534},"_3252-焦点事件","3.2.5.2 焦点事件",[24,60537,60538],{},"小米搜索框案例：",[87,60540,60542],{"className":50823,"code":60541,"language":50825,"meta":92,"style":92},"\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",[94,60543,60544,60554,60568,60572,60580,60594,60614,60634,60646,60654,60660,60670,60680,60692,60696,60700,60707,60711,60722,60726,60730,60737,60748,60761,60775,60779,60783,60792,60804,60816,60830,60843,60856,60874,60885,60889,60893,60902,60919,60923,60927,60934,60944,60954,60965,60978,60990,61006,61017,61029,61033,61037,61045,61056,61073,61085,61097,61108,61112,61116,61127,61138,61142,61150,61154,61162,61166,61174,61189,61212,61227,61258,61285,61312,61339,61366,61393,61420,61429,61437,61445,61450,61470,61490,61495,61500,61518,61523,61533,61538,61552,61557,61562,61579,61588,61600,61604,61612,61620,61624],{"__ignoreMap":92},[97,60545,60546,60548,60550,60552],{"class":99,"line":100},[97,60547,51487],{"class":103},[97,60549,51490],{"class":107},[97,60551,51493],{"class":111},[97,60553,130],{"class":103},[97,60555,60556,60558,60560,60562,60564,60566],{"class":99,"line":195},[97,60557,104],{"class":103},[97,60559,50825],{"class":107},[97,60561,51504],{"class":111},[97,60563,115],{"class":103},[97,60565,51509],{"class":118},[97,60567,130],{"class":103},[97,60569,60570],{"class":99,"line":241},[97,60571,2591],{"emptyLinePlaceholder":249},[97,60573,60574,60576,60578],{"class":99,"line":1387},[97,60575,104],{"class":103},[97,60577,51522],{"class":107},[97,60579,130],{"class":103},[97,60581,60582,60584,60586,60588,60590,60592],{"class":99,"line":1393},[97,60583,51529],{"class":103},[97,60585,108],{"class":107},[97,60587,51534],{"class":111},[97,60589,115],{"class":103},[97,60591,51539],{"class":118},[97,60593,130],{"class":103},[97,60595,60596,60598,60600,60602,60604,60606,60608,60610,60612],{"class":99,"line":1407},[97,60597,51529],{"class":103},[97,60599,108],{"class":107},[97,60601,51550],{"class":111},[97,60603,115],{"class":103},[97,60605,51555],{"class":118},[97,60607,122],{"class":111},[97,60609,115],{"class":103},[97,60611,51562],{"class":118},[97,60613,130],{"class":103},[97,60615,60616,60618,60620,60622,60624,60626,60628,60630,60632],{"class":99,"line":1413},[97,60617,51529],{"class":103},[97,60619,108],{"class":107},[97,60621,112],{"class":111},[97,60623,115],{"class":103},[97,60625,119],{"class":118},[97,60627,122],{"class":111},[97,60629,115],{"class":103},[97,60631,127],{"class":118},[97,60633,130],{"class":103},[97,60635,60636,60638,60640,60642,60644],{"class":99,"line":1504},[97,60637,51529],{"class":103},[97,60639,51591],{"class":107},[97,60641,51594],{"class":103},[97,60643,51591],{"class":107},[97,60645,130],{"class":103},[97,60647,60648,60650,60652],{"class":99,"line":1510},[97,60649,51529],{"class":103},[97,60651,231],{"class":107},[97,60653,130],{"class":103},[97,60655,60656,60658],{"class":99,"line":1522},[97,60657,51611],{"class":107},[97,60659,15762],{"class":103},[97,60661,60662,60664,60666,60668],{"class":99,"line":1804},[97,60663,51618],{"class":370},[97,60665,51621],{"class":103},[97,60667,511],{"class":370},[97,60669,1483],{"class":103},[97,60671,60672,60674,60676,60678],{"class":99,"line":1809},[97,60673,51630],{"class":370},[97,60675,51621],{"class":103},[97,60677,511],{"class":370},[97,60679,1483],{"class":103},[97,60681,60682,60685,60687,60690],{"class":99,"line":1815},[97,60683,60684],{"class":370},"            box-sizing",[97,60686,51621],{"class":103},[97,60688,60689],{"class":370},"border-box",[97,60691,1483],{"class":103},[97,60693,60694],{"class":99,"line":1820},[97,60695,2720],{"class":103},[97,60697,60698],{"class":99,"line":1834},[97,60699,2591],{"emptyLinePlaceholder":249},[97,60701,60702,60705],{"class":99,"line":1839},[97,60703,60704],{"class":107},"        ul",[97,60706,15762],{"class":103},[97,60708,60709],{"class":99,"line":1845},[97,60710,2591],{"emptyLinePlaceholder":249},[97,60712,60713,60716,60718,60720],{"class":99,"line":1866},[97,60714,60715],{"class":370},"            list-style",[97,60717,51621],{"class":103},[97,60719,54921],{"class":370},[97,60721,1483],{"class":103},[97,60723,60724],{"class":99,"line":1871},[97,60725,2720],{"class":103},[97,60727,60728],{"class":99,"line":1885},[97,60729,2591],{"emptyLinePlaceholder":249},[97,60731,60732,60735],{"class":99,"line":1890},[97,60733,60734],{"class":111},"        .mi",[97,60736,15762],{"class":103},[97,60738,60739,60742,60744,60746],{"class":99,"line":1919},[97,60740,60741],{"class":370},"            position",[97,60743,51621],{"class":103},[97,60745,54948],{"class":370},[97,60747,1483],{"class":103},[97,60749,60750,60752,60754,60757,60759],{"class":99,"line":1924},[97,60751,51668],{"class":370},[97,60753,51621],{"class":103},[97,60755,60756],{"class":370},"223",[97,60758,51676],{"class":319},[97,60760,1483],{"class":103},[97,60762,60763,60765,60767,60769,60771,60773],{"class":99,"line":1941},[97,60764,51618],{"class":370},[97,60766,51621],{"class":103},[97,60768,631],{"class":370},[97,60770,51676],{"class":319},[97,60772,51740],{"class":370},[97,60774,1483],{"class":103},[97,60776,60777],{"class":99,"line":1946},[97,60778,2720],{"class":103},[97,60780,60781],{"class":99,"line":1951},[97,60782,2591],{"emptyLinePlaceholder":249},[97,60784,60785,60787,60790],{"class":99,"line":1956},[97,60786,60734],{"class":111},[97,60788,60789],{"class":107}," input",[97,60791,15762],{"class":103},[97,60793,60794,60796,60798,60800,60802],{"class":99,"line":1970},[97,60795,51668],{"class":370},[97,60797,51621],{"class":103},[97,60799,60756],{"class":370},[97,60801,51676],{"class":319},[97,60803,1483],{"class":103},[97,60805,60806,60808,60810,60812,60814],{"class":99,"line":1975},[97,60807,51683],{"class":370},[97,60809,51621],{"class":103},[97,60811,927],{"class":370},[97,60813,51676],{"class":319},[97,60815,1483],{"class":103},[97,60817,60818,60820,60822,60824,60826,60828],{"class":99,"line":2768},[97,60819,51630],{"class":370},[97,60821,51621],{"class":103},[97,60823,511],{"class":370},[97,60825,2229],{"class":370},[97,60827,51676],{"class":319},[97,60829,1483],{"class":103},[97,60831,60832,60835,60837,60839,60841],{"class":99,"line":2782},[97,60833,60834],{"class":370},"            font-size",[97,60836,51621],{"class":103},[97,60838,869],{"class":370},[97,60840,51676],{"class":319},[97,60842,1483],{"class":103},[97,60844,60845,60848,60850,60852,60854],{"class":99,"line":2790},[97,60846,60847],{"class":370},"            line-height",[97,60849,51621],{"class":103},[97,60851,927],{"class":370},[97,60853,51676],{"class":319},[97,60855,1483],{"class":103},[97,60857,60858,60861,60863,60865,60867,60869,60872],{"class":99,"line":2795},[97,60859,60860],{"class":370},"            border",[97,60862,51621],{"class":103},[97,60864,537],{"class":370},[97,60866,51676],{"class":319},[97,60868,51705],{"class":370},[97,60870,60871],{"class":370}," #e0e0e0",[97,60873,1483],{"class":103},[97,60875,60876,60879,60881,60883],{"class":99,"line":2801},[97,60877,60878],{"class":370},"            outline",[97,60880,51621],{"class":103},[97,60882,54921],{"class":370},[97,60884,1483],{"class":103},[97,60886,60887],{"class":99,"line":2807},[97,60888,2720],{"class":103},[97,60890,60891],{"class":99,"line":2812},[97,60892,2591],{"emptyLinePlaceholder":249},[97,60894,60895,60897,60900],{"class":99,"line":8139},[97,60896,60734],{"class":111},[97,60898,60899],{"class":111}," .search",[97,60901,15762],{"class":103},[97,60903,60904,60906,60908,60910,60912,60914,60917],{"class":99,"line":8163},[97,60905,60860],{"class":370},[97,60907,51621],{"class":103},[97,60909,537],{"class":370},[97,60911,51676],{"class":319},[97,60913,51705],{"class":370},[97,60915,60916],{"class":370}," #ff6700",[97,60918,1483],{"class":103},[97,60920,60921],{"class":99,"line":8168},[97,60922,2720],{"class":103},[97,60924,60925],{"class":99,"line":8174},[97,60926,2591],{"emptyLinePlaceholder":249},[97,60928,60929,60932],{"class":99,"line":8201},[97,60930,60931],{"class":111},"        .result-list",[97,60933,15762],{"class":103},[97,60935,60936,60938,60940,60942],{"class":99,"line":8206},[97,60937,51656],{"class":370},[97,60939,51621],{"class":103},[97,60941,54921],{"class":370},[97,60943,1483],{"class":103},[97,60945,60946,60948,60950,60952],{"class":99,"line":8212},[97,60947,60741],{"class":370},[97,60949,51621],{"class":103},[97,60951,55015],{"class":370},[97,60953,1483],{"class":103},[97,60955,60956,60959,60961,60963],{"class":99,"line":8224},[97,60957,60958],{"class":370},"            left",[97,60960,51621],{"class":103},[97,60962,511],{"class":370},[97,60964,1483],{"class":103},[97,60966,60967,60970,60972,60974,60976],{"class":99,"line":8236},[97,60968,60969],{"class":370},"            top",[97,60971,51621],{"class":103},[97,60973,927],{"class":370},[97,60975,51676],{"class":319},[97,60977,1483],{"class":103},[97,60979,60980,60982,60984,60986,60988],{"class":99,"line":8248},[97,60981,51668],{"class":370},[97,60983,51621],{"class":103},[97,60985,60756],{"class":370},[97,60987,51676],{"class":319},[97,60989,1483],{"class":103},[97,60991,60992,60994,60996,60998,61000,61002,61004],{"class":99,"line":9907},[97,60993,60860],{"class":370},[97,60995,51621],{"class":103},[97,60997,537],{"class":370},[97,60999,51676],{"class":319},[97,61001,51705],{"class":370},[97,61003,60916],{"class":370},[97,61005,1483],{"class":103},[97,61007,61008,61011,61013,61015],{"class":99,"line":9932},[97,61009,61010],{"class":370},"            border-top",[97,61012,51621],{"class":103},[97,61014,511],{"class":370},[97,61016,1483],{"class":103},[97,61018,61019,61022,61024,61027],{"class":99,"line":9955},[97,61020,61021],{"class":370},"            background",[97,61023,51621],{"class":103},[97,61025,61026],{"class":370},"#fff",[97,61028,1483],{"class":103},[97,61030,61031],{"class":99,"line":9979},[97,61032,2720],{"class":103},[97,61034,61035],{"class":99,"line":9984},[97,61036,2591],{"emptyLinePlaceholder":249},[97,61038,61039,61041,61043],{"class":99,"line":9989},[97,61040,60931],{"class":111},[97,61042,1591],{"class":107},[97,61044,15762],{"class":103},[97,61046,61047,61049,61051,61054],{"class":99,"line":9994},[97,61048,51656],{"class":370},[97,61050,51621],{"class":103},[97,61052,61053],{"class":370},"block",[97,61055,1483],{"class":103},[97,61057,61058,61060,61062,61064,61066,61069,61071],{"class":99,"line":10003},[97,61059,51630],{"class":370},[97,61061,51621],{"class":103},[97,61063,664],{"class":370},[97,61065,51676],{"class":319},[97,61067,61068],{"class":370}," 15",[97,61070,51676],{"class":319},[97,61072,1483],{"class":103},[97,61074,61075,61077,61079,61081,61083],{"class":99,"line":10008},[97,61076,60834],{"class":370},[97,61078,51621],{"class":103},[97,61080,818],{"class":370},[97,61082,51676],{"class":319},[97,61084,1483],{"class":103},[97,61086,61087,61090,61092,61095],{"class":99,"line":10014},[97,61088,61089],{"class":370},"            color",[97,61091,51621],{"class":103},[97,61093,61094],{"class":370},"#424242",[97,61096,1483],{"class":103},[97,61098,61099,61102,61104,61106],{"class":99,"line":10035},[97,61100,61101],{"class":370},"            text-decoration",[97,61103,51621],{"class":103},[97,61105,54921],{"class":370},[97,61107,1483],{"class":103},[97,61109,61110],{"class":99,"line":10041},[97,61111,2720],{"class":103},[97,61113,61114],{"class":99,"line":10055},[97,61115,2591],{"emptyLinePlaceholder":249},[97,61117,61118,61120,61122,61125],{"class":99,"line":10061},[97,61119,60931],{"class":111},[97,61121,1591],{"class":107},[97,61123,61124],{"class":111},":hover",[97,61126,15762],{"class":103},[97,61128,61129,61131,61133,61136],{"class":99,"line":10088},[97,61130,51824],{"class":370},[97,61132,51621],{"class":103},[97,61134,61135],{"class":370},"#eee",[97,61137,1483],{"class":103},[97,61139,61140],{"class":99,"line":10097},[97,61141,2720],{"class":103},[97,61143,61144,61146,61148],{"class":99,"line":10103},[97,61145,51960],{"class":103},[97,61147,231],{"class":107},[97,61149,130],{"class":103},[97,61151,61152],{"class":99,"line":10111},[97,61153,2591],{"emptyLinePlaceholder":249},[97,61155,61156,61158,61160],{"class":99,"line":10116},[97,61157,51969],{"class":103},[97,61159,51522],{"class":107},[97,61161,130],{"class":103},[97,61163,61164],{"class":99,"line":16794},[97,61165,2591],{"emptyLinePlaceholder":249},[97,61167,61168,61170,61172],{"class":99,"line":16800},[97,61169,104],{"class":103},[97,61171,51984],{"class":107},[97,61173,130],{"class":103},[97,61175,61176,61178,61180,61182,61184,61187],{"class":99,"line":16823},[97,61177,51529],{"class":103},[97,61179,51795],{"class":107},[97,61181,53670],{"class":111},[97,61183,115],{"class":103},[97,61185,61186],{"class":118},"\"mi\"",[97,61188,130],{"class":103},[97,61190,61191,61193,61195,61197,61199,61202,61205,61207,61210],{"class":99,"line":16829},[97,61192,55486],{"class":103},[97,61194,54005],{"class":107},[97,61196,54008],{"class":111},[97,61198,115],{"class":103},[97,61200,61201],{"class":118},"\"search\"",[97,61203,61204],{"class":111}," placeholder",[97,61206,115],{"class":103},[97,61208,61209],{"class":118},"\"小米笔记本\"",[97,61211,130],{"class":103},[97,61213,61214,61216,61218,61220,61222,61225],{"class":99,"line":16852},[97,61215,55486],{"class":103},[97,61217,67],{"class":107},[97,61219,53670],{"class":111},[97,61221,115],{"class":103},[97,61223,61224],{"class":118},"\"result-list\"",[97,61226,130],{"class":103},[97,61228,61229,61232,61234,61237,61239,61242,61244,61247,61250,61252,61254,61256],{"class":99,"line":16866},[97,61230,61231],{"class":103},"            \u003C",[97,61233,70],{"class":107},[97,61235,61236],{"class":103},">\u003C",[97,61238,558],{"class":107},[97,61240,61241],{"class":111}," href",[97,61243,115],{"class":103},[97,61245,61246],{"class":118},"\"#\"",[97,61248,61249],{"class":103},">全部商品\u003C\u002F",[97,61251,558],{"class":107},[97,61253,55498],{"class":103},[97,61255,70],{"class":107},[97,61257,130],{"class":103},[97,61259,61260,61262,61264,61266,61268,61270,61272,61274,61277,61279,61281,61283],{"class":99,"line":16886},[97,61261,61231],{"class":103},[97,61263,70],{"class":107},[97,61265,61236],{"class":103},[97,61267,558],{"class":107},[97,61269,61241],{"class":111},[97,61271,115],{"class":103},[97,61273,61246],{"class":118},[97,61275,61276],{"class":103},">小米11\u003C\u002F",[97,61278,558],{"class":107},[97,61280,55498],{"class":103},[97,61282,70],{"class":107},[97,61284,130],{"class":103},[97,61286,61287,61289,61291,61293,61295,61297,61299,61301,61304,61306,61308,61310],{"class":99,"line":16892},[97,61288,61231],{"class":103},[97,61290,70],{"class":107},[97,61292,61236],{"class":103},[97,61294,558],{"class":107},[97,61296,61241],{"class":111},[97,61298,115],{"class":103},[97,61300,61246],{"class":118},[97,61302,61303],{"class":103},">小米10S\u003C\u002F",[97,61305,558],{"class":107},[97,61307,55498],{"class":103},[97,61309,70],{"class":107},[97,61311,130],{"class":103},[97,61313,61314,61316,61318,61320,61322,61324,61326,61328,61331,61333,61335,61337],{"class":99,"line":16903},[97,61315,61231],{"class":103},[97,61317,70],{"class":107},[97,61319,61236],{"class":103},[97,61321,558],{"class":107},[97,61323,61241],{"class":111},[97,61325,115],{"class":103},[97,61327,61246],{"class":118},[97,61329,61330],{"class":103},">小米笔记本\u003C\u002F",[97,61332,558],{"class":107},[97,61334,55498],{"class":103},[97,61336,70],{"class":107},[97,61338,130],{"class":103},[97,61340,61341,61343,61345,61347,61349,61351,61353,61355,61358,61360,61362,61364],{"class":99,"line":16926},[97,61342,61231],{"class":103},[97,61344,70],{"class":107},[97,61346,61236],{"class":103},[97,61348,558],{"class":107},[97,61350,61241],{"class":111},[97,61352,115],{"class":103},[97,61354,61246],{"class":118},[97,61356,61357],{"class":103},">小米手机\u003C\u002F",[97,61359,558],{"class":107},[97,61361,55498],{"class":103},[97,61363,70],{"class":107},[97,61365,130],{"class":103},[97,61367,61368,61370,61372,61374,61376,61378,61380,61382,61385,61387,61389,61391],{"class":99,"line":16948},[97,61369,61231],{"class":103},[97,61371,70],{"class":107},[97,61373,61236],{"class":103},[97,61375,558],{"class":107},[97,61377,61241],{"class":111},[97,61379,115],{"class":103},[97,61381,61246],{"class":118},[97,61383,61384],{"class":103},">黑鲨4\u003C\u002F",[97,61386,558],{"class":107},[97,61388,55498],{"class":103},[97,61390,70],{"class":107},[97,61392,130],{"class":103},[97,61394,61395,61397,61399,61401,61403,61405,61407,61409,61412,61414,61416,61418],{"class":99,"line":16953},[97,61396,61231],{"class":103},[97,61398,70],{"class":107},[97,61400,61236],{"class":103},[97,61402,558],{"class":107},[97,61404,61241],{"class":111},[97,61406,115],{"class":103},[97,61408,61246],{"class":118},[97,61410,61411],{"class":103},">空调\u003C\u002F",[97,61413,558],{"class":107},[97,61415,55498],{"class":103},[97,61417,70],{"class":107},[97,61419,130],{"class":103},[97,61421,61422,61425,61427],{"class":99,"line":16959},[97,61423,61424],{"class":103},"        \u003C\u002F",[97,61426,67],{"class":107},[97,61428,130],{"class":103},[97,61430,61431,61433,61435],{"class":99,"line":16973},[97,61432,51960],{"class":103},[97,61434,51795],{"class":107},[97,61436,130],{"class":103},[97,61438,61439,61441,61443],{"class":99,"line":16986},[97,61440,51529],{"class":103},[97,61442,51997],{"class":107},[97,61444,130],{"class":103},[97,61446,61447],{"class":99,"line":16991},[97,61448,61449],{"class":191},"        \u002F\u002F 1. 获取元素\n",[97,61451,61452,61455,61457,61459,61461,61463,61465,61468],{"class":99,"line":17005},[97,61453,61454],{"class":319},"        const",[97,61456,60789],{"class":370},[97,61458,13755],{"class":319},[97,61460,54580],{"class":103},[97,61462,54583],{"class":111},[97,61464,323],{"class":103},[97,61466,61467],{"class":118},"'[type=search]'",[97,61469,329],{"class":103},[97,61471,61472,61474,61477,61479,61481,61483,61485,61488],{"class":99,"line":17010},[97,61473,61454],{"class":319},[97,61475,61476],{"class":370}," ul",[97,61478,13755],{"class":319},[97,61480,54580],{"class":103},[97,61482,54583],{"class":111},[97,61484,323],{"class":103},[97,61486,61487],{"class":118},"'.result-list'",[97,61489,329],{"class":103},[97,61491,61492],{"class":99,"line":17016},[97,61493,61494],{"class":191},"        \u002F\u002F console.log(input)\n",[97,61496,61497],{"class":99,"line":17021},[97,61498,61499],{"class":191},"        \u002F\u002F 2. 监听事件 获得焦点\n",[97,61501,61502,61505,61507,61509,61512,61514,61516],{"class":99,"line":17035},[97,61503,61504],{"class":103},"        input.",[97,61506,57997],{"class":111},[97,61508,323],{"class":103},[97,61510,61511],{"class":118},"'focus'",[97,61513,12626],{"class":103},[97,61515,54633],{"class":319},[97,61517,54636],{"class":103},[97,61519,61520],{"class":99,"line":17040},[97,61521,61522],{"class":191},"            \u002F\u002F ul显示\n",[97,61524,61525,61528,61530],{"class":99,"line":17045},[97,61526,61527],{"class":103},"            ul.style.display ",[97,61529,115],{"class":319},[97,61531,61532],{"class":118}," 'block'\n",[97,61534,61535],{"class":99,"line":17059},[97,61536,61537],{"class":191},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[97,61539,61540,61543,61545,61547,61550],{"class":99,"line":17071},[97,61541,61542],{"class":103},"            input.classList.",[97,61544,5525],{"class":111},[97,61546,323],{"class":103},[97,61548,61549],{"class":118},"'search'",[97,61551,329],{"class":103},[97,61553,61554],{"class":99,"line":17076},[97,61555,61556],{"class":103},"        })\n",[97,61558,61559],{"class":99,"line":17089},[97,61560,61561],{"class":191},"        \u002F\u002F 3. 监听事件 失去焦点\n",[97,61563,61564,61566,61568,61570,61573,61575,61577],{"class":99,"line":17094},[97,61565,61504],{"class":103},[97,61567,57997],{"class":111},[97,61569,323],{"class":103},[97,61571,61572],{"class":118},"'blur'",[97,61574,12626],{"class":103},[97,61576,54633],{"class":319},[97,61578,54636],{"class":103},[97,61580,61581,61583,61585],{"class":99,"line":17099},[97,61582,61527],{"class":103},[97,61584,115],{"class":319},[97,61586,61587],{"class":118}," 'none'\n",[97,61589,61590,61592,61594,61596,61598],{"class":99,"line":17104},[97,61591,61542],{"class":103},[97,61593,57190],{"class":111},[97,61595,323],{"class":103},[97,61597,61549],{"class":118},[97,61599,329],{"class":103},[97,61601,61602],{"class":99,"line":17117},[97,61603,61556],{"class":103},[97,61605,61606,61608,61610],{"class":99,"line":17122},[97,61607,51960],{"class":103},[97,61609,51997],{"class":107},[97,61611,130],{"class":103},[97,61613,61614,61616,61618],{"class":99,"line":32823},[97,61615,51969],{"class":103},[97,61617,51984],{"class":107},[97,61619,130],{"class":103},[97,61621,61622],{"class":99,"line":32829},[97,61623,2591],{"emptyLinePlaceholder":249},[97,61625,61626,61628,61630],{"class":99,"line":32835},[97,61627,51969],{"class":103},[97,61629,50825],{"class":107},[97,61631,130],{"class":103},[160,61633,61635],{"id":61634},"_3253-键盘事件","3.2.5.3 键盘事件",[24,61637,61638],{},"评论字数统计案例",[24,61640,61641],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[24,61643,61644],{},"牢记focus伪类选择器",[108,61646],{"charSet":61647},"UTF-8",[108,61649],{"name":61650,"content":61651},"viewport","width=device-width, initial-scale=1.0",[51591,61653,61654],{},"Document",[231,61656,61657],{},"\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",[54005,61659],{"type":5378},[67,61661,61662,61665],{},[70,61663,61664],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[70,61666,61667],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[87,61669,61671],{"className":50823,"code":61670,"language":50825,"meta":92,"style":92},"\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",[94,61672,61673,61683,61697,61701,61709,61723,61743,61763,61776,61784,61791,61804,61818,61828,61838,61842,61846,61853,61865,61877,61889,61901,61930,61943,61947,61951,61960,61971,61983,61994,62005,62017,62028,62040,62056,62068,62072,62076,62087,62098,62108,62120,62124,62128,62136,62147,62157,62168,62180,62193,62205,62217,62221,62225,62234,62246,62257,62270,62281,62295,62299,62303,62310,62322,62334,62344,62348,62352,62361,62373,62383,62387,62391,62402,62412,62431,62444,62448,62452,62462,62472,62476,62480,62491,62502,62514,62526,62530,62534,62545,62556,62570,62574,62578,62589,62599,62611,62615,62623,62631,62635,62643,62658,62677,62717,62730,62738,62752,62772,62780,62795,62818,62836,62851,62871,62891,62911,62919,62927,62935,62943,62963,62983,62988,63005,63014,63018,63023,63039,63047,63051,63056,63073,63078,63103,63107,63111,63116,63121,63129,63137,63141],{"__ignoreMap":92},[97,61674,61675,61677,61679,61681],{"class":99,"line":100},[97,61676,51487],{"class":103},[97,61678,51490],{"class":107},[97,61680,51493],{"class":111},[97,61682,130],{"class":103},[97,61684,61685,61687,61689,61691,61693,61695],{"class":99,"line":195},[97,61686,104],{"class":103},[97,61688,50825],{"class":107},[97,61690,51504],{"class":111},[97,61692,115],{"class":103},[97,61694,51509],{"class":118},[97,61696,130],{"class":103},[97,61698,61699],{"class":99,"line":241},[97,61700,2591],{"emptyLinePlaceholder":249},[97,61702,61703,61705,61707],{"class":99,"line":1387},[97,61704,104],{"class":103},[97,61706,51522],{"class":107},[97,61708,130],{"class":103},[97,61710,61711,61713,61715,61717,61719,61721],{"class":99,"line":1393},[97,61712,52328],{"class":103},[97,61714,108],{"class":107},[97,61716,51534],{"class":111},[97,61718,115],{"class":103},[97,61720,51539],{"class":118},[97,61722,130],{"class":103},[97,61724,61725,61727,61729,61731,61733,61735,61737,61739,61741],{"class":99,"line":1407},[97,61726,52328],{"class":103},[97,61728,108],{"class":107},[97,61730,51550],{"class":111},[97,61732,115],{"class":103},[97,61734,51555],{"class":118},[97,61736,122],{"class":111},[97,61738,115],{"class":103},[97,61740,51562],{"class":118},[97,61742,130],{"class":103},[97,61744,61745,61747,61749,61751,61753,61755,61757,61759,61761],{"class":99,"line":1413},[97,61746,52328],{"class":103},[97,61748,108],{"class":107},[97,61750,112],{"class":111},[97,61752,115],{"class":103},[97,61754,119],{"class":118},[97,61756,122],{"class":111},[97,61758,115],{"class":103},[97,61760,127],{"class":118},[97,61762,130],{"class":103},[97,61764,61765,61767,61769,61772,61774],{"class":99,"line":1504},[97,61766,52328],{"class":103},[97,61768,51591],{"class":107},[97,61770,61771],{"class":103},">评论回车发布\u003C\u002F",[97,61773,51591],{"class":107},[97,61775,130],{"class":103},[97,61777,61778,61780,61782],{"class":99,"line":1510},[97,61779,52328],{"class":103},[97,61781,231],{"class":107},[97,61783,130],{"class":103},[97,61785,61786,61789],{"class":99,"line":1522},[97,61787,61788],{"class":111},"    .wrapper",[97,61790,15762],{"class":103},[97,61792,61793,61796,61798,61800,61802],{"class":99,"line":1804},[97,61794,61795],{"class":370},"      min-width",[97,61797,51621],{"class":103},[97,61799,4178],{"class":370},[97,61801,51676],{"class":319},[97,61803,1483],{"class":103},[97,61805,61806,61809,61811,61814,61816],{"class":99,"line":1809},[97,61807,61808],{"class":370},"      max-width",[97,61810,51621],{"class":103},[97,61812,61813],{"class":370},"800",[97,61815,51676],{"class":319},[97,61817,1483],{"class":103},[97,61819,61820,61822,61824,61826],{"class":99,"line":1815},[97,61821,55193],{"class":370},[97,61823,51621],{"class":103},[97,61825,51661],{"class":370},[97,61827,1483],{"class":103},[97,61829,61830,61832,61834,61836],{"class":99,"line":1820},[97,61831,55204],{"class":370},[97,61833,51621],{"class":103},[97,61835,51764],{"class":370},[97,61837,1483],{"class":103},[97,61839,61840],{"class":99,"line":1834},[97,61841,2378],{"class":103},[97,61843,61844],{"class":99,"line":1839},[97,61845,2591],{"emptyLinePlaceholder":249},[97,61847,61848,61851],{"class":99,"line":1845},[97,61849,61850],{"class":111},"    .avatar",[97,61852,15762],{"class":103},[97,61854,61855,61857,61859,61861,61863],{"class":99,"line":1866},[97,61856,54955],{"class":370},[97,61858,51621],{"class":103},[97,61860,927],{"class":370},[97,61862,51676],{"class":319},[97,61864,1483],{"class":103},[97,61866,61867,61869,61871,61873,61875],{"class":99,"line":1871},[97,61868,54969],{"class":370},[97,61870,51621],{"class":103},[97,61872,927],{"class":370},[97,61874,51676],{"class":319},[97,61876,1483],{"class":103},[97,61878,61879,61881,61883,61885,61887],{"class":99,"line":1885},[97,61880,55318],{"class":370},[97,61882,51621],{"class":103},[97,61884,976],{"class":370},[97,61886,648],{"class":319},[97,61888,1483],{"class":103},[97,61890,61891,61894,61896,61899],{"class":99,"line":1890},[97,61892,61893],{"class":370},"      overflow",[97,61895,51621],{"class":103},[97,61897,61898],{"class":370},"hidden",[97,61900,1483],{"class":103},[97,61902,61903,61906,61908,61911,61913,61916,61918,61921,61923,61925,61928],{"class":99,"line":1919},[97,61904,61905],{"class":370},"      background",[97,61907,51621],{"class":103},[97,61909,61910],{"class":370},"url",[97,61912,323],{"class":103},[97,61914,61915],{"class":5407},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[97,61917,13905],{"class":103},[97,61919,61920],{"class":370},"no-repeat",[97,61922,17334],{"class":370},[97,61924,25168],{"class":103},[97,61926,61927],{"class":370},"cover",[97,61929,1483],{"class":103},[97,61931,61932,61935,61937,61939,61941],{"class":99,"line":1924},[97,61933,61934],{"class":370},"      margin-right",[97,61936,51621],{"class":103},[97,61938,1020],{"class":370},[97,61940,51676],{"class":319},[97,61942,1483],{"class":103},[97,61944,61945],{"class":99,"line":1941},[97,61946,2378],{"class":103},[97,61948,61949],{"class":99,"line":1946},[97,61950,2591],{"emptyLinePlaceholder":249},[97,61952,61953,61955,61958],{"class":99,"line":1951},[97,61954,61788],{"class":111},[97,61956,61957],{"class":107}," textarea",[97,61959,15762],{"class":103},[97,61961,61962,61965,61967,61969],{"class":99,"line":1956},[97,61963,61964],{"class":370},"      outline",[97,61966,51621],{"class":103},[97,61968,54921],{"class":370},[97,61970,1483],{"class":103},[97,61972,61973,61976,61978,61981],{"class":99,"line":1970},[97,61974,61975],{"class":370},"      border-color",[97,61977,51621],{"class":103},[97,61979,61980],{"class":370},"transparent",[97,61982,1483],{"class":103},[97,61984,61985,61988,61990,61992],{"class":99,"line":1975},[97,61986,61987],{"class":370},"      resize",[97,61989,51621],{"class":103},[97,61991,54921],{"class":370},[97,61993,1483],{"class":103},[97,61995,61996,61998,62000,62003],{"class":99,"line":2768},[97,61997,61905],{"class":370},[97,61999,51621],{"class":103},[97,62001,62002],{"class":370},"#f5f5f5",[97,62004,1483],{"class":103},[97,62006,62007,62009,62011,62013,62015],{"class":99,"line":2782},[97,62008,55318],{"class":370},[97,62010,51621],{"class":103},[97,62012,613],{"class":370},[97,62014,51676],{"class":319},[97,62016,1483],{"class":103},[97,62018,62019,62022,62024,62026],{"class":99,"line":2790},[97,62020,62021],{"class":370},"      flex",[97,62023,51621],{"class":103},[97,62025,537],{"class":370},[97,62027,1483],{"class":103},[97,62029,62030,62032,62034,62036,62038],{"class":99,"line":2795},[97,62031,54879],{"class":370},[97,62033,51621],{"class":103},[97,62035,766],{"class":370},[97,62037,51676],{"class":319},[97,62039,1483],{"class":103},[97,62041,62042,62045,62047,62049,62052,62054],{"class":99,"line":2801},[97,62043,62044],{"class":370},"      transition",[97,62046,51621],{"class":103},[97,62048,28311],{"class":370},[97,62050,62051],{"class":370}," 0.5",[97,62053,1015],{"class":319},[97,62055,1483],{"class":103},[97,62057,62058,62060,62062,62064,62066],{"class":99,"line":2807},[97,62059,54969],{"class":370},[97,62061,51621],{"class":103},[97,62063,1270],{"class":370},[97,62065,51676],{"class":319},[97,62067,1483],{"class":103},[97,62069,62070],{"class":99,"line":2812},[97,62071,2378],{"class":103},[97,62073,62074],{"class":99,"line":8139},[97,62075,2591],{"emptyLinePlaceholder":249},[97,62077,62078,62080,62082,62085],{"class":99,"line":8163},[97,62079,61788],{"class":111},[97,62081,61957],{"class":107},[97,62083,62084],{"class":111},":focus",[97,62086,15762],{"class":103},[97,62088,62089,62091,62093,62096],{"class":99,"line":8168},[97,62090,61975],{"class":370},[97,62092,51621],{"class":103},[97,62094,62095],{"class":370},"#e4e4e4",[97,62097,1483],{"class":103},[97,62099,62100,62102,62104,62106],{"class":99,"line":8174},[97,62101,61905],{"class":370},[97,62103,51621],{"class":103},[97,62105,61026],{"class":370},[97,62107,1483],{"class":103},[97,62109,62110,62112,62114,62116,62118],{"class":99,"line":8201},[97,62111,54969],{"class":370},[97,62113,51621],{"class":103},[97,62115,976],{"class":370},[97,62117,51676],{"class":319},[97,62119,1483],{"class":103},[97,62121,62122],{"class":99,"line":8206},[97,62123,2378],{"class":103},[97,62125,62126],{"class":99,"line":8212},[97,62127,2591],{"emptyLinePlaceholder":249},[97,62129,62130,62132,62134],{"class":99,"line":8224},[97,62131,61788],{"class":111},[97,62133,57651],{"class":107},[97,62135,15762],{"class":103},[97,62137,62138,62140,62142,62145],{"class":99,"line":8236},[97,62139,61905],{"class":370},[97,62141,51621],{"class":103},[97,62143,62144],{"class":370},"#00aeec",[97,62146,1483],{"class":103},[97,62148,62149,62151,62153,62155],{"class":99,"line":8248},[97,62150,57600],{"class":370},[97,62152,51621],{"class":103},[97,62154,61026],{"class":370},[97,62156,1483],{"class":103},[97,62158,62159,62162,62164,62166],{"class":99,"line":9907},[97,62160,62161],{"class":370},"      border",[97,62163,51621],{"class":103},[97,62165,54921],{"class":370},[97,62167,1483],{"class":103},[97,62169,62170,62172,62174,62176,62178],{"class":99,"line":9932},[97,62171,55318],{"class":370},[97,62173,51621],{"class":103},[97,62175,613],{"class":370},[97,62177,51676],{"class":319},[97,62179,1483],{"class":103},[97,62181,62182,62185,62187,62189,62191],{"class":99,"line":9955},[97,62183,62184],{"class":370},"      margin-left",[97,62186,51621],{"class":103},[97,62188,766],{"class":370},[97,62190,51676],{"class":319},[97,62192,1483],{"class":103},[97,62194,62195,62197,62199,62201,62203],{"class":99,"line":9979},[97,62196,54955],{"class":370},[97,62198,51621],{"class":103},[97,62200,676],{"class":370},[97,62202,51676],{"class":319},[97,62204,1483],{"class":103},[97,62206,62207,62210,62212,62215],{"class":99,"line":9984},[97,62208,62209],{"class":370},"      cursor",[97,62211,51621],{"class":103},[97,62213,62214],{"class":370},"pointer",[97,62216,1483],{"class":103},[97,62218,62219],{"class":99,"line":9989},[97,62220,2378],{"class":103},[97,62222,62223],{"class":99,"line":9994},[97,62224,2591],{"emptyLinePlaceholder":249},[97,62226,62227,62229,62232],{"class":99,"line":10003},[97,62228,61788],{"class":111},[97,62230,62231],{"class":111}," .total",[97,62233,15762],{"class":103},[97,62235,62236,62238,62240,62242,62244],{"class":99,"line":10008},[97,62237,61934],{"class":370},[97,62239,51621],{"class":103},[97,62241,932],{"class":370},[97,62243,51676],{"class":319},[97,62245,1483],{"class":103},[97,62247,62248,62250,62252,62255],{"class":99,"line":10014},[97,62249,57600],{"class":370},[97,62251,51621],{"class":103},[97,62253,62254],{"class":370},"#999",[97,62256,1483],{"class":103},[97,62258,62259,62262,62264,62266,62268],{"class":99,"line":10035},[97,62260,62261],{"class":370},"      margin-top",[97,62263,51621],{"class":103},[97,62265,639],{"class":370},[97,62267,51676],{"class":319},[97,62269,1483],{"class":103},[97,62271,62272,62275,62277,62279],{"class":99,"line":10041},[97,62273,62274],{"class":370},"      opacity",[97,62276,51621],{"class":103},[97,62278,511],{"class":370},[97,62280,1483],{"class":103},[97,62282,62283,62285,62287,62289,62291,62293],{"class":99,"line":10055},[97,62284,62044],{"class":370},[97,62286,51621],{"class":103},[97,62288,28311],{"class":370},[97,62290,62051],{"class":370},[97,62292,1015],{"class":319},[97,62294,1483],{"class":103},[97,62296,62297],{"class":99,"line":10061},[97,62298,2378],{"class":103},[97,62300,62301],{"class":99,"line":10088},[97,62302,2591],{"emptyLinePlaceholder":249},[97,62304,62305,62308],{"class":99,"line":10097},[97,62306,62307],{"class":111},"    .list",[97,62309,15762],{"class":103},[97,62311,62312,62314,62316,62318,62320],{"class":99,"line":10103},[97,62313,61795],{"class":370},[97,62315,51621],{"class":103},[97,62317,4178],{"class":370},[97,62319,51676],{"class":319},[97,62321,1483],{"class":103},[97,62323,62324,62326,62328,62330,62332],{"class":99,"line":10111},[97,62325,61808],{"class":370},[97,62327,51621],{"class":103},[97,62329,61813],{"class":370},[97,62331,51676],{"class":319},[97,62333,1483],{"class":103},[97,62335,62336,62338,62340,62342],{"class":99,"line":10116},[97,62337,55193],{"class":370},[97,62339,51621],{"class":103},[97,62341,51661],{"class":370},[97,62343,1483],{"class":103},[97,62345,62346],{"class":99,"line":16794},[97,62347,2378],{"class":103},[97,62349,62350],{"class":99,"line":16800},[97,62351,2591],{"emptyLinePlaceholder":249},[97,62353,62354,62356,62359],{"class":99,"line":16823},[97,62355,62307],{"class":111},[97,62357,62358],{"class":111}," .item",[97,62360,15762],{"class":103},[97,62362,62363,62365,62367,62369,62371],{"class":99,"line":16829},[97,62364,54955],{"class":370},[97,62366,51621],{"class":103},[97,62368,631],{"class":370},[97,62370,648],{"class":319},[97,62372,1483],{"class":103},[97,62374,62375,62377,62379,62381],{"class":99,"line":16852},[97,62376,55193],{"class":370},[97,62378,51621],{"class":103},[97,62380,51661],{"class":370},[97,62382,1483],{"class":103},[97,62384,62385],{"class":99,"line":16866},[97,62386,2378],{"class":103},[97,62388,62389],{"class":99,"line":16886},[97,62390,2591],{"emptyLinePlaceholder":249},[97,62392,62393,62395,62397,62400],{"class":99,"line":16892},[97,62394,62307],{"class":111},[97,62396,62358],{"class":111},[97,62398,62399],{"class":111}," .info",[97,62401,15762],{"class":103},[97,62403,62404,62406,62408,62410],{"class":99,"line":16903},[97,62405,62021],{"class":370},[97,62407,51621],{"class":103},[97,62409,537],{"class":370},[97,62411,1483],{"class":103},[97,62413,62414,62417,62419,62421,62423,62426,62429],{"class":99,"line":16926},[97,62415,62416],{"class":370},"      border-bottom",[97,62418,51621],{"class":103},[97,62420,537],{"class":370},[97,62422,51676],{"class":319},[97,62424,62425],{"class":370}," dashed",[97,62427,62428],{"class":370}," #e4e4e4",[97,62430,1483],{"class":103},[97,62432,62433,62436,62438,62440,62442],{"class":99,"line":16948},[97,62434,62435],{"class":370},"      padding-bottom",[97,62437,51621],{"class":103},[97,62439,766],{"class":370},[97,62441,51676],{"class":319},[97,62443,1483],{"class":103},[97,62445,62446],{"class":99,"line":16953},[97,62447,2378],{"class":103},[97,62449,62450],{"class":99,"line":16959},[97,62451,2591],{"emptyLinePlaceholder":249},[97,62453,62454,62456,62458,62460],{"class":99,"line":16973},[97,62455,62307],{"class":111},[97,62457,62358],{"class":111},[97,62459,7016],{"class":107},[97,62461,15762],{"class":103},[97,62463,62464,62466,62468,62470],{"class":99,"line":16986},[97,62465,54890],{"class":370},[97,62467,51621],{"class":103},[97,62469,511],{"class":370},[97,62471,1483],{"class":103},[97,62473,62474],{"class":99,"line":16991},[97,62475,2378],{"class":103},[97,62477,62478],{"class":99,"line":17005},[97,62479,2591],{"emptyLinePlaceholder":249},[97,62481,62482,62484,62486,62489],{"class":99,"line":17010},[97,62483,62307],{"class":111},[97,62485,62358],{"class":111},[97,62487,62488],{"class":111}," .name",[97,62490,15762],{"class":103},[97,62492,62493,62495,62497,62500],{"class":99,"line":17016},[97,62494,57600],{"class":370},[97,62496,51621],{"class":103},[97,62498,62499],{"class":370},"#FB7299",[97,62501,1483],{"class":103},[97,62503,62504,62506,62508,62510,62512],{"class":99,"line":17021},[97,62505,55106],{"class":370},[97,62507,51621],{"class":103},[97,62509,869],{"class":370},[97,62511,51676],{"class":319},[97,62513,1483],{"class":103},[97,62515,62516,62519,62521,62524],{"class":99,"line":17035},[97,62517,62518],{"class":370},"      font-weight",[97,62520,51621],{"class":103},[97,62522,62523],{"class":370},"bold",[97,62525,1483],{"class":103},[97,62527,62528],{"class":99,"line":17040},[97,62529,2378],{"class":103},[97,62531,62532],{"class":99,"line":17045},[97,62533,2591],{"emptyLinePlaceholder":249},[97,62535,62536,62538,62540,62543],{"class":99,"line":17059},[97,62537,62307],{"class":111},[97,62539,62358],{"class":111},[97,62541,62542],{"class":111}," .text",[97,62544,15762],{"class":103},[97,62546,62547,62549,62551,62554],{"class":99,"line":17071},[97,62548,57600],{"class":370},[97,62550,51621],{"class":103},[97,62552,62553],{"class":370},"#333",[97,62555,1483],{"class":103},[97,62557,62558,62560,62562,62564,62566,62568],{"class":99,"line":17076},[97,62559,54879],{"class":370},[97,62561,51621],{"class":103},[97,62563,766],{"class":370},[97,62565,51676],{"class":319},[97,62567,4284],{"class":370},[97,62569,1483],{"class":103},[97,62571,62572],{"class":99,"line":17089},[97,62573,2378],{"class":103},[97,62575,62576],{"class":99,"line":17094},[97,62577,2591],{"emptyLinePlaceholder":249},[97,62579,62580,62582,62584,62587],{"class":99,"line":17099},[97,62581,62307],{"class":111},[97,62583,62358],{"class":111},[97,62585,62586],{"class":111}," .time",[97,62588,15762],{"class":103},[97,62590,62591,62593,62595,62597],{"class":99,"line":17104},[97,62592,57600],{"class":370},[97,62594,51621],{"class":103},[97,62596,62254],{"class":370},[97,62598,1483],{"class":103},[97,62600,62601,62603,62605,62607,62609],{"class":99,"line":17117},[97,62602,55106],{"class":370},[97,62604,51621],{"class":103},[97,62606,818],{"class":370},[97,62608,51676],{"class":319},[97,62610,1483],{"class":103},[97,62612,62613],{"class":99,"line":17122},[97,62614,2378],{"class":103},[97,62616,62617,62619,62621],{"class":99,"line":32823},[97,62618,52601],{"class":103},[97,62620,231],{"class":107},[97,62622,130],{"class":103},[97,62624,62625,62627,62629],{"class":99,"line":32829},[97,62626,51969],{"class":103},[97,62628,51522],{"class":107},[97,62630,130],{"class":103},[97,62632,62633],{"class":99,"line":32835},[97,62634,2591],{"emptyLinePlaceholder":249},[97,62636,62637,62639,62641],{"class":99,"line":32841},[97,62638,104],{"class":103},[97,62640,51984],{"class":107},[97,62642,130],{"class":103},[97,62644,62645,62647,62649,62651,62653,62656],{"class":99,"line":32847},[97,62646,52328],{"class":103},[97,62648,51795],{"class":107},[97,62650,53670],{"class":111},[97,62652,115],{"class":103},[97,62654,62655],{"class":118},"\"wrapper\"",[97,62657,130],{"class":103},[97,62659,62660,62662,62664,62666,62668,62671,62673,62675],{"class":99,"line":32858},[97,62661,51529],{"class":103},[97,62663,761],{"class":107},[97,62665,53670],{"class":111},[97,62667,115],{"class":103},[97,62669,62670],{"class":118},"\"avatar\"",[97,62672,55498],{"class":103},[97,62674,761],{"class":107},[97,62676,130],{"class":103},[97,62678,62679,62681,62683,62685,62687,62690,62692,62694,62697,62699,62701,62703,62706,62708,62711,62713,62715],{"class":99,"line":32864},[97,62680,51529],{"class":103},[97,62682,54472],{"class":107},[97,62684,15149],{"class":111},[97,62686,115],{"class":103},[97,62688,62689],{"class":118},"\"tx\"",[97,62691,61204],{"class":111},[97,62693,115],{"class":103},[97,62695,62696],{"class":118},"\"发一条友善的评论\"",[97,62698,54495],{"class":111},[97,62700,115],{"class":103},[97,62702,3892],{"class":118},[97,62704,62705],{"class":111}," maxlength",[97,62707,115],{"class":103},[97,62709,62710],{"class":118},"\"200\"",[97,62712,55498],{"class":103},[97,62714,54472],{"class":107},[97,62716,130],{"class":103},[97,62718,62719,62721,62723,62726,62728],{"class":99,"line":32884},[97,62720,51529],{"class":103},[97,62722,54071],{"class":107},[97,62724,62725],{"class":103},">发布\u003C\u002F",[97,62727,54071],{"class":107},[97,62729,130],{"class":103},[97,62731,62732,62734,62736],{"class":99,"line":32890},[97,62733,52601],{"class":103},[97,62735,51795],{"class":107},[97,62737,130],{"class":103},[97,62739,62740,62742,62744,62746,62748,62750],{"class":99,"line":32901},[97,62741,52328],{"class":103},[97,62743,51795],{"class":107},[97,62745,53670],{"class":111},[97,62747,115],{"class":103},[97,62749,62655],{"class":118},[97,62751,130],{"class":103},[97,62753,62754,62756,62758,62760,62762,62765,62768,62770],{"class":99,"line":32907},[97,62755,51529],{"class":103},[97,62757,97],{"class":107},[97,62759,53670],{"class":111},[97,62761,115],{"class":103},[97,62763,62764],{"class":118},"\"total\"",[97,62766,62767],{"class":103},">0\u002F200字\u003C\u002F",[97,62769,97],{"class":107},[97,62771,130],{"class":103},[97,62773,62774,62776,62778],{"class":99,"line":32913},[97,62775,52601],{"class":103},[97,62777,51795],{"class":107},[97,62779,130],{"class":103},[97,62781,62782,62784,62786,62788,62790,62793],{"class":99,"line":32919},[97,62783,52328],{"class":103},[97,62785,51795],{"class":107},[97,62787,53670],{"class":111},[97,62789,115],{"class":103},[97,62791,62792],{"class":118},"\"list\"",[97,62794,130],{"class":103},[97,62796,62797,62799,62801,62803,62805,62808,62811,62813,62816],{"class":99,"line":32925},[97,62798,51529],{"class":103},[97,62800,51795],{"class":107},[97,62802,53670],{"class":111},[97,62804,115],{"class":103},[97,62806,62807],{"class":118},"\"item\"",[97,62809,62810],{"class":111}," style",[97,62812,115],{"class":103},[97,62814,62815],{"class":118},"\"display: none;\"",[97,62817,130],{"class":103},[97,62819,62820,62822,62824,62826,62828,62830,62832,62834],{"class":99,"line":32931},[97,62821,55418],{"class":103},[97,62823,761],{"class":107},[97,62825,53670],{"class":111},[97,62827,115],{"class":103},[97,62829,62670],{"class":118},[97,62831,55498],{"class":103},[97,62833,761],{"class":107},[97,62835,130],{"class":103},[97,62837,62838,62840,62842,62844,62846,62849],{"class":99,"line":32937},[97,62839,55418],{"class":103},[97,62841,51795],{"class":107},[97,62843,53670],{"class":111},[97,62845,115],{"class":103},[97,62847,62848],{"class":118},"\"info\"",[97,62850,130],{"class":103},[97,62852,62853,62855,62857,62859,62861,62864,62867,62869],{"class":99,"line":32943},[97,62854,55486],{"class":103},[97,62856,24],{"class":107},[97,62858,53670],{"class":111},[97,62860,115],{"class":103},[97,62862,62863],{"class":118},"\"name\"",[97,62865,62866],{"class":103},">清风徐来\u003C\u002F",[97,62868,24],{"class":107},[97,62870,130],{"class":103},[97,62872,62873,62875,62877,62879,62881,62884,62887,62889],{"class":99,"line":32963},[97,62874,55486],{"class":103},[97,62876,24],{"class":107},[97,62878,53670],{"class":111},[97,62880,115],{"class":103},[97,62882,62883],{"class":118},"\"text\"",[97,62885,62886],{"class":103},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[97,62888,24],{"class":107},[97,62890,130],{"class":103},[97,62892,62893,62895,62897,62899,62901,62904,62907,62909],{"class":99,"line":32969},[97,62894,55486],{"class":103},[97,62896,24],{"class":107},[97,62898,53670],{"class":111},[97,62900,115],{"class":103},[97,62902,62903],{"class":118},"\"time\"",[97,62905,62906],{"class":103},">2022-10-10 20:29:21\u003C\u002F",[97,62908,24],{"class":107},[97,62910,130],{"class":103},[97,62912,62913,62915,62917],{"class":99,"line":32985},[97,62914,55591],{"class":103},[97,62916,51795],{"class":107},[97,62918,130],{"class":103},[97,62920,62921,62923,62925],{"class":99,"line":32991},[97,62922,51960],{"class":103},[97,62924,51795],{"class":107},[97,62926,130],{"class":103},[97,62928,62929,62931,62933],{"class":99,"line":33005},[97,62930,52601],{"class":103},[97,62932,51795],{"class":107},[97,62934,130],{"class":103},[97,62936,62937,62939,62941],{"class":99,"line":33011},[97,62938,52328],{"class":103},[97,62940,51997],{"class":107},[97,62942,130],{"class":103},[97,62944,62945,62947,62950,62952,62954,62956,62958,62961],{"class":99,"line":33026},[97,62946,11412],{"class":319},[97,62948,62949],{"class":370}," tx",[97,62951,13755],{"class":319},[97,62953,54580],{"class":103},[97,62955,54583],{"class":111},[97,62957,323],{"class":103},[97,62959,62960],{"class":118},"'#tx'",[97,62962,329],{"class":103},[97,62964,62965,62967,62970,62972,62974,62976,62978,62981],{"class":99,"line":33032},[97,62966,11412],{"class":319},[97,62968,62969],{"class":370}," total",[97,62971,13755],{"class":319},[97,62973,54580],{"class":103},[97,62975,54583],{"class":111},[97,62977,323],{"class":103},[97,62979,62980],{"class":118},"'.total'",[97,62982,329],{"class":103},[97,62984,62985],{"class":99,"line":33041},[97,62986,62987],{"class":191},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[97,62989,62990,62993,62995,62997,62999,63001,63003],{"class":99,"line":33047},[97,62991,62992],{"class":103},"    tx.",[97,62994,57997],{"class":111},[97,62996,323],{"class":103},[97,62998,61511],{"class":118},[97,63000,12626],{"class":103},[97,63002,54633],{"class":319},[97,63004,54636],{"class":103},[97,63006,63007,63010,63012],{"class":99,"line":33056},[97,63008,63009],{"class":103},"      total.style.opacity ",[97,63011,115],{"class":319},[97,63013,55883],{"class":370},[97,63015,63016],{"class":99,"line":33062},[97,63017,33651],{"class":103},[97,63019,63020],{"class":99,"line":33068},[97,63021,63022],{"class":191},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[97,63024,63025,63027,63029,63031,63033,63035,63037],{"class":99,"line":33077},[97,63026,62992],{"class":103},[97,63028,57997],{"class":111},[97,63030,323],{"class":103},[97,63032,61572],{"class":118},[97,63034,12626],{"class":103},[97,63036,54633],{"class":319},[97,63038,54636],{"class":103},[97,63040,63041,63043,63045],{"class":99,"line":33083},[97,63042,63009],{"class":103},[97,63044,115],{"class":319},[97,63046,47523],{"class":370},[97,63048,63049],{"class":99,"line":33094},[97,63050,33651],{"class":103},[97,63052,63053],{"class":99,"line":33100},[97,63054,63055],{"class":191},"    \u002F\u002F 3. 检测用户输入\n",[97,63057,63058,63060,63062,63064,63067,63069,63071],{"class":99,"line":33119},[97,63059,62992],{"class":103},[97,63061,57997],{"class":111},[97,63063,323],{"class":103},[97,63065,63066],{"class":118},"'input'",[97,63068,12626],{"class":103},[97,63070,54633],{"class":319},[97,63072,54636],{"class":103},[97,63074,63075],{"class":99,"line":33125},[97,63076,63077],{"class":191},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[97,63079,63080,63083,63085,63088,63091,63093,63096,63098,63100],{"class":99,"line":33136},[97,63081,63082],{"class":103},"      total.innerHTML ",[97,63084,115],{"class":319},[97,63086,63087],{"class":118}," `${",[97,63089,63090],{"class":103},"tx",[97,63092,878],{"class":118},[97,63094,63095],{"class":103},"value",[97,63097,878],{"class":118},[97,63099,52152],{"class":370},[97,63101,63102],{"class":118},"}\u002F200字`\n",[97,63104,63105],{"class":99,"line":33142},[97,63106,33651],{"class":103},[97,63108,63109],{"class":99,"line":33162},[97,63110,2591],{"emptyLinePlaceholder":249},[97,63112,63113],{"class":99,"line":33178},[97,63114,63115],{"class":191},"    \u002F\u002F const str = 'andy'\n",[97,63117,63118],{"class":99,"line":33184},[97,63119,63120],{"class":191},"    \u002F\u002F console.log(str.length)\n",[97,63122,63123,63125,63127],{"class":99,"line":33198},[97,63124,52601],{"class":103},[97,63126,51997],{"class":107},[97,63128,130],{"class":103},[97,63130,63131,63133,63135],{"class":99,"line":33204},[97,63132,51969],{"class":103},[97,63134,51984],{"class":107},[97,63136,130],{"class":103},[97,63138,63139],{"class":99,"line":33210},[97,63140,2591],{"emptyLinePlaceholder":249},[97,63142,63143,63145,63147],{"class":99,"line":33221},[97,63144,51969],{"class":103},[97,63146,50825],{"class":107},[97,63148,130],{"class":103},[160,63150,63152],{"id":63151},"_3254-change事件","3.2.5.4 change事件",[24,63154,63155],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[24,63157,63158],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[24,63160,63161],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[87,63163,63165],{"className":50823,"code":63164,"language":50825,"meta":92,"style":92},"\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",[94,63166,63167,63177,63191,63195,63203,63217,63237,63249,63257,63261,63269,63283,63291,63309,63327,63339,63343,63351,63359,63363],{"__ignoreMap":92},[97,63168,63169,63171,63173,63175],{"class":99,"line":100},[97,63170,51487],{"class":103},[97,63172,51490],{"class":107},[97,63174,51493],{"class":111},[97,63176,130],{"class":103},[97,63178,63179,63181,63183,63185,63187,63189],{"class":99,"line":195},[97,63180,104],{"class":103},[97,63182,50825],{"class":107},[97,63184,51504],{"class":111},[97,63186,115],{"class":103},[97,63188,51509],{"class":118},[97,63190,130],{"class":103},[97,63192,63193],{"class":99,"line":241},[97,63194,2591],{"emptyLinePlaceholder":249},[97,63196,63197,63199,63201],{"class":99,"line":1387},[97,63198,104],{"class":103},[97,63200,51522],{"class":107},[97,63202,130],{"class":103},[97,63204,63205,63207,63209,63211,63213,63215],{"class":99,"line":1393},[97,63206,52328],{"class":103},[97,63208,108],{"class":107},[97,63210,51534],{"class":111},[97,63212,115],{"class":103},[97,63214,51539],{"class":118},[97,63216,130],{"class":103},[97,63218,63219,63221,63223,63225,63227,63229,63231,63233,63235],{"class":99,"line":1407},[97,63220,52328],{"class":103},[97,63222,108],{"class":107},[97,63224,112],{"class":111},[97,63226,115],{"class":103},[97,63228,119],{"class":118},[97,63230,122],{"class":111},[97,63232,115],{"class":103},[97,63234,127],{"class":118},[97,63236,130],{"class":103},[97,63238,63239,63241,63243,63245,63247],{"class":99,"line":1413},[97,63240,52328],{"class":103},[97,63242,51591],{"class":107},[97,63244,51594],{"class":103},[97,63246,51591],{"class":107},[97,63248,130],{"class":103},[97,63250,63251,63253,63255],{"class":99,"line":1504},[97,63252,51969],{"class":103},[97,63254,51522],{"class":107},[97,63256,130],{"class":103},[97,63258,63259],{"class":99,"line":1510},[97,63260,2591],{"emptyLinePlaceholder":249},[97,63262,63263,63265,63267],{"class":99,"line":1522},[97,63264,104],{"class":103},[97,63266,51984],{"class":107},[97,63268,130],{"class":103},[97,63270,63271,63273,63275,63277,63279,63281],{"class":99,"line":1804},[97,63272,52328],{"class":103},[97,63274,54005],{"class":107},[97,63276,54008],{"class":111},[97,63278,115],{"class":103},[97,63280,62883],{"class":118},[97,63282,130],{"class":103},[97,63284,63285,63287,63289],{"class":99,"line":1809},[97,63286,52328],{"class":103},[97,63288,51997],{"class":107},[97,63290,130],{"class":103},[97,63292,63293,63295,63297,63299,63301,63303,63305,63307],{"class":99,"line":1815},[97,63294,11412],{"class":319},[97,63296,60789],{"class":370},[97,63298,13755],{"class":319},[97,63300,54580],{"class":103},[97,63302,54583],{"class":111},[97,63304,323],{"class":103},[97,63306,63066],{"class":118},[97,63308,329],{"class":103},[97,63310,63311,63314,63316,63318,63321,63323,63325],{"class":99,"line":1820},[97,63312,63313],{"class":103},"    input.",[97,63315,57997],{"class":111},[97,63317,323],{"class":103},[97,63319,63320],{"class":118},"'change'",[97,63322,12626],{"class":103},[97,63324,54633],{"class":319},[97,63326,54636],{"class":103},[97,63328,63329,63331,63333,63335,63337],{"class":99,"line":1834},[97,63330,58428],{"class":103},[97,63332,58431],{"class":111},[97,63334,323],{"class":103},[97,63336,913],{"class":370},[97,63338,329],{"class":103},[97,63340,63341],{"class":99,"line":1839},[97,63342,33651],{"class":103},[97,63344,63345,63347,63349],{"class":99,"line":1845},[97,63346,52601],{"class":103},[97,63348,51997],{"class":107},[97,63350,130],{"class":103},[97,63352,63353,63355,63357],{"class":99,"line":1866},[97,63354,51969],{"class":103},[97,63356,51984],{"class":107},[97,63358,130],{"class":103},[97,63360,63361],{"class":99,"line":1871},[97,63362,2591],{"emptyLinePlaceholder":249},[97,63364,63365,63367,63369],{"class":99,"line":1885},[97,63366,51969],{"class":103},[97,63368,50825],{"class":107},[97,63370,130],{"class":103},[24,63372,63373],{},"总结：内容发生改变才回去触发",[48,63375,63377],{"id":63376},"_326-事件对象","3.2.6 事件对象",[160,63379,63381],{"id":63380},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[24,63383,63384],{},[19,63385],{"alt":92,"src":63386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[24,63388,63389],{},[19,63390],{"alt":92,"src":63391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[24,63393,63394],{},"点击一次，就输出了事件对象，它是个对象",[24,63396,63397],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[24,63399,63400],{},[19,63401],{"alt":92,"src":63402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[160,63404,63406],{"id":63405},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[24,63408,63409],{},[19,63410],{"alt":92,"src":63411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[24,63413,63414],{},"实现按特殊字符才是实现打印输出效果：",[87,63416,63418],{"className":53251,"code":63417,"language":53253,"meta":92,"style":92},"\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",[94,63419,63420,63428,63433,63447,63455,63460,63465,63470,63475,63480,63485,63490,63495,63500,63504,63508,63516],{"__ignoreMap":92},[97,63421,63422,63424,63426],{"class":99,"line":100},[97,63423,104],{"class":103},[97,63425,51984],{"class":107},[97,63427,130],{"class":103},[97,63429,63430],{"class":99,"line":195},[97,63431,63432],{"class":191},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[97,63434,63435,63437,63439,63441,63443,63445],{"class":99,"line":241},[97,63436,52328],{"class":103},[97,63438,54005],{"class":107},[97,63440,54008],{"class":111},[97,63442,115],{"class":103},[97,63444,62883],{"class":118},[97,63446,130],{"class":103},[97,63448,63449,63451,63453],{"class":99,"line":1387},[97,63450,52328],{"class":103},[97,63452,51997],{"class":107},[97,63454,130],{"class":103},[97,63456,63457],{"class":99,"line":1393},[97,63458,63459],{"class":103},"    \u002F\u002F const btn = document.querySelector('button')\n",[97,63461,63462],{"class":99,"line":1407},[97,63463,63464],{"class":103},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[97,63466,63467],{"class":99,"line":1413},[97,63468,63469],{"class":103},"    \u002F\u002F   console.log(e);\n",[97,63471,63472],{"class":99,"line":1504},[97,63473,63474],{"class":103},"    \u002F\u002F })\n",[97,63476,63477],{"class":99,"line":1510},[97,63478,63479],{"class":103},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[97,63481,63482],{"class":99,"line":1522},[97,63483,63484],{"class":103},"    const input = document.querySelector('input')\n",[97,63486,63487],{"class":99,"line":1804},[97,63488,63489],{"class":103},"    input.addEventListener('keyup', function (e) {\n",[97,63491,63492],{"class":99,"line":1809},[97,63493,63494],{"class":103},"      if (e.key === 'Enter') {\n",[97,63496,63497],{"class":99,"line":1815},[97,63498,63499],{"class":103},"        console.log('我按下了回车键')\n",[97,63501,63502],{"class":99,"line":1820},[97,63503,52582],{"class":103},[97,63505,63506],{"class":99,"line":1834},[97,63507,33651],{"class":103},[97,63509,63510,63512,63514],{"class":99,"line":1839},[97,63511,52601],{"class":103},[97,63513,51997],{"class":107},[97,63515,130],{"class":103},[97,63517,63518,63520,63522],{"class":99,"line":1845},[97,63519,51969],{"class":103},[97,63521,51984],{"class":107},[97,63523,130],{"class":103},[160,63525,63527],{"id":63526},"_3263-trim方法","3.2.6.3 trim方法",[24,63529,63530],{},[19,63531],{"alt":92,"src":63532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[24,63534,63535],{},[19,63536],{"alt":92,"src":63537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[24,63539,63540],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[24,63542,63543],{},"str.trim()",[48,63545,63547],{"id":63546},"_327-环境对象","3.2.7 环境对象",[24,63549,63550],{},[19,63551],{"alt":92,"src":63552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[24,63554,63555],{},[19,63556],{"alt":92,"src":63557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[24,63559,63560],{},[19,63561],{"alt":92,"src":63562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[24,63564,63565],{},"实际函数调用是window.fn()",[24,63567,63568],{},"普通函数里面this指向的是window",[67,63570,63571,63574,63577],{},[70,63572,63573],{},"在普通函数下，this指向的是window",[70,63575,63576],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[70,63578,63579],{},"箭头函数没有this",[24,63581,63582],{},"粗略记法就是：谁调用，this就指向谁",[24,63584,63585],{},[19,63586],{"alt":92,"src":63587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[24,63589,63590],{},[19,63591],{"alt":92,"src":63592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[24,63594,63595],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[24,63597,63598],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[87,63600,63602],{"className":53251,"code":63601,"language":53253,"meta":92,"style":92},"\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",[94,63603,63604,63612,63624,63632,63637,63642,63647,63652,63656,63664],{"__ignoreMap":92},[97,63605,63606,63608,63610],{"class":99,"line":100},[97,63607,104],{"class":103},[97,63609,51984],{"class":107},[97,63611,130],{"class":103},[97,63613,63614,63616,63618,63620,63622],{"class":99,"line":195},[97,63615,52328],{"class":103},[97,63617,54071],{"class":107},[97,63619,54077],{"class":103},[97,63621,54071],{"class":107},[97,63623,130],{"class":103},[97,63625,63626,63628,63630],{"class":99,"line":241},[97,63627,52328],{"class":103},[97,63629,51997],{"class":107},[97,63631,130],{"class":103},[97,63633,63634],{"class":99,"line":1387},[97,63635,63636],{"class":103},"    const button = document.querySelector('button')\n",[97,63638,63639],{"class":99,"line":1393},[97,63640,63641],{"class":103},"    button.addEventListener('click', function () {\n",[97,63643,63644],{"class":99,"line":1407},[97,63645,63646],{"class":103},"      \u002F\u002F console.log(this);\n",[97,63648,63649],{"class":99,"line":1413},[97,63650,63651],{"class":103},"      this.style.color = 'pink'\n",[97,63653,63654],{"class":99,"line":1504},[97,63655,33651],{"class":103},[97,63657,63658,63660,63662],{"class":99,"line":1510},[97,63659,52601],{"class":103},[97,63661,51997],{"class":107},[97,63663,130],{"class":103},[97,63665,63666,63668,63670],{"class":99,"line":1522},[97,63667,51969],{"class":103},[97,63669,51984],{"class":107},[97,63671,130],{"class":103},[48,63673,63675],{"id":63674},"_328-回调函数","3.2.8 回调函数",[24,63677,63678],{},[19,63679],{"alt":92,"src":63680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[24,63682,63683],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[24,63685,11523],{},[67,63687,63688,63691,63694],{},[70,63689,63690],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[70,63692,63693],{},"回调函数本质还是函数，只不过把它当成参数使用",[70,63695,63696],{},"使用匿名函数做为回调函数比较常见",[48,63698,63700],{"id":63699},"_329-tab栏切换","3.2.9 tab栏切换",[24,63702,63703],{},[19,63704],{"alt":92,"src":63705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[87,63707,63709],{"className":50823,"code":63708,"language":50825,"meta":92,"style":92},"\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",[94,63710,63711,63721,63735,63739,63747,63761,63781,63801,63814,63822,63828,63838,63848,63852,63856,63863,63876,63889,63901,63917,63921,63925,63932,63944,63956,63968,63978,63988,63992,63996,64005,64017,64028,64040,64044,64048,64056,64066,64076,64086,64090,64094,64104,64118,64130,64134,64138,64150,64161,64178,64188,64192,64196,64211,64222,64232,64236,64240,64247,64262,64266,64270,64278,64288,64292,64296,64305,64315,64319,64327,64335,64339,64347,64362,64377,64390,64398,64432,64459,64486,64513,64540,64548,64556,64571,64608,64643,64678,64713,64748,64756,64764,64772,64777,64782,64802,64807,64836,64841,64846,64864,64869,64874,64879,64901,64906,64922,64926,64931,64936,64957,64962,64991,64995,65000,65004,65012,65020,65024],{"__ignoreMap":92},[97,63712,63713,63715,63717,63719],{"class":99,"line":100},[97,63714,51487],{"class":103},[97,63716,51490],{"class":107},[97,63718,51493],{"class":111},[97,63720,130],{"class":103},[97,63722,63723,63725,63727,63729,63731,63733],{"class":99,"line":195},[97,63724,104],{"class":103},[97,63726,50825],{"class":107},[97,63728,51504],{"class":111},[97,63730,115],{"class":103},[97,63732,51509],{"class":118},[97,63734,130],{"class":103},[97,63736,63737],{"class":99,"line":241},[97,63738,2591],{"emptyLinePlaceholder":249},[97,63740,63741,63743,63745],{"class":99,"line":1387},[97,63742,104],{"class":103},[97,63744,51522],{"class":107},[97,63746,130],{"class":103},[97,63748,63749,63751,63753,63755,63757,63759],{"class":99,"line":1393},[97,63750,52328],{"class":103},[97,63752,108],{"class":107},[97,63754,51534],{"class":111},[97,63756,115],{"class":103},[97,63758,51539],{"class":118},[97,63760,59311],{"class":103},[97,63762,63763,63765,63767,63769,63771,63773,63775,63777,63779],{"class":99,"line":1407},[97,63764,52328],{"class":103},[97,63766,108],{"class":107},[97,63768,51550],{"class":111},[97,63770,115],{"class":103},[97,63772,51555],{"class":118},[97,63774,122],{"class":111},[97,63776,115],{"class":103},[97,63778,51562],{"class":118},[97,63780,59311],{"class":103},[97,63782,63783,63785,63787,63789,63791,63793,63795,63797,63799],{"class":99,"line":1413},[97,63784,52328],{"class":103},[97,63786,108],{"class":107},[97,63788,112],{"class":111},[97,63790,115],{"class":103},[97,63792,119],{"class":118},[97,63794,122],{"class":111},[97,63796,115],{"class":103},[97,63798,127],{"class":118},[97,63800,59311],{"class":103},[97,63802,63803,63805,63807,63810,63812],{"class":99,"line":1504},[97,63804,52328],{"class":103},[97,63806,51591],{"class":107},[97,63808,63809],{"class":103},">tab栏切换\u003C\u002F",[97,63811,51591],{"class":107},[97,63813,130],{"class":103},[97,63815,63816,63818,63820],{"class":99,"line":1510},[97,63817,52328],{"class":103},[97,63819,231],{"class":107},[97,63821,130],{"class":103},[97,63823,63824,63826],{"class":99,"line":1522},[97,63825,6594],{"class":107},[97,63827,15762],{"class":103},[97,63829,63830,63832,63834,63836],{"class":99,"line":1804},[97,63831,54890],{"class":370},[97,63833,51621],{"class":103},[97,63835,511],{"class":370},[97,63837,1483],{"class":103},[97,63839,63840,63842,63844,63846],{"class":99,"line":1809},[97,63841,54879],{"class":370},[97,63843,51621],{"class":103},[97,63845,511],{"class":370},[97,63847,1483],{"class":103},[97,63849,63850],{"class":99,"line":1815},[97,63851,2378],{"class":103},[97,63853,63854],{"class":99,"line":1820},[97,63855,2591],{"emptyLinePlaceholder":249},[97,63857,63858,63861],{"class":99,"line":1834},[97,63859,63860],{"class":111},"    .tab",[97,63862,15762],{"class":103},[97,63864,63865,63867,63869,63872,63874],{"class":99,"line":1839},[97,63866,54955],{"class":370},[97,63868,51621],{"class":103},[97,63870,63871],{"class":370},"590",[97,63873,51676],{"class":319},[97,63875,1483],{"class":103},[97,63877,63878,63880,63882,63885,63887],{"class":99,"line":1845},[97,63879,54969],{"class":370},[97,63881,51621],{"class":103},[97,63883,63884],{"class":370},"340",[97,63886,51676],{"class":319},[97,63888,1483],{"class":103},[97,63890,63891,63893,63895,63897,63899],{"class":99,"line":1866},[97,63892,54890],{"class":370},[97,63894,51621],{"class":103},[97,63896,1020],{"class":370},[97,63898,51676],{"class":319},[97,63900,1483],{"class":103},[97,63902,63903,63905,63907,63909,63911,63913,63915],{"class":99,"line":1871},[97,63904,62161],{"class":370},[97,63906,51621],{"class":103},[97,63908,537],{"class":370},[97,63910,51676],{"class":319},[97,63912,51705],{"class":370},[97,63914,62428],{"class":370},[97,63916,1483],{"class":103},[97,63918,63919],{"class":99,"line":1885},[97,63920,2378],{"class":103},[97,63922,63923],{"class":99,"line":1890},[97,63924,2591],{"emptyLinePlaceholder":249},[97,63926,63927,63930],{"class":99,"line":1919},[97,63928,63929],{"class":111},"    .tab-nav",[97,63931,15762],{"class":103},[97,63933,63934,63936,63938,63940,63942],{"class":99,"line":1924},[97,63935,54955],{"class":370},[97,63937,51621],{"class":103},[97,63939,631],{"class":370},[97,63941,648],{"class":319},[97,63943,1483],{"class":103},[97,63945,63946,63948,63950,63952,63954],{"class":99,"line":1941},[97,63947,54969],{"class":370},[97,63949,51621],{"class":103},[97,63951,1227],{"class":370},[97,63953,51676],{"class":319},[97,63955,1483],{"class":103},[97,63957,63958,63960,63962,63964,63966],{"class":99,"line":1946},[97,63959,57543],{"class":370},[97,63961,51621],{"class":103},[97,63963,1227],{"class":370},[97,63965,51676],{"class":319},[97,63967,1483],{"class":103},[97,63969,63970,63972,63974,63976],{"class":99,"line":1951},[97,63971,55193],{"class":370},[97,63973,51621],{"class":103},[97,63975,51661],{"class":370},[97,63977,1483],{"class":103},[97,63979,63980,63982,63984,63986],{"class":99,"line":1956},[97,63981,55204],{"class":370},[97,63983,51621],{"class":103},[97,63985,51852],{"class":370},[97,63987,1483],{"class":103},[97,63989,63990],{"class":99,"line":1970},[97,63991,2378],{"class":103},[97,63993,63994],{"class":99,"line":1975},[97,63995,2591],{"emptyLinePlaceholder":249},[97,63997,63998,64000,64003],{"class":99,"line":2768},[97,63999,63929],{"class":111},[97,64001,64002],{"class":107}," h3",[97,64004,15762],{"class":103},[97,64006,64007,64009,64011,64013,64015],{"class":99,"line":2782},[97,64008,55106],{"class":370},[97,64010,51621],{"class":103},[97,64012,1120],{"class":370},[97,64014,51676],{"class":319},[97,64016,1483],{"class":103},[97,64018,64019,64021,64023,64026],{"class":99,"line":2790},[97,64020,62518],{"class":370},[97,64022,51621],{"class":103},[97,64024,64025],{"class":370},"normal",[97,64027,1483],{"class":103},[97,64029,64030,64032,64034,64036,64038],{"class":99,"line":2795},[97,64031,62184],{"class":370},[97,64033,51621],{"class":103},[97,64035,1020],{"class":370},[97,64037,51676],{"class":319},[97,64039,1483],{"class":103},[97,64041,64042],{"class":99,"line":2801},[97,64043,2378],{"class":103},[97,64045,64046],{"class":99,"line":2807},[97,64047,2591],{"emptyLinePlaceholder":249},[97,64049,64050,64052,64054],{"class":99,"line":2812},[97,64051,63929],{"class":111},[97,64053,61476],{"class":107},[97,64055,15762],{"class":103},[97,64057,64058,64060,64062,64064],{"class":99,"line":8139},[97,64059,54916],{"class":370},[97,64061,51621],{"class":103},[97,64063,54921],{"class":370},[97,64065,1483],{"class":103},[97,64067,64068,64070,64072,64074],{"class":99,"line":8163},[97,64069,55193],{"class":370},[97,64071,51621],{"class":103},[97,64073,51661],{"class":370},[97,64075,1483],{"class":103},[97,64077,64078,64080,64082,64084],{"class":99,"line":8168},[97,64079,55204],{"class":370},[97,64081,51621],{"class":103},[97,64083,51764],{"class":370},[97,64085,1483],{"class":103},[97,64087,64088],{"class":99,"line":8174},[97,64089,2378],{"class":103},[97,64091,64092],{"class":99,"line":8201},[97,64093,2591],{"emptyLinePlaceholder":249},[97,64095,64096,64098,64100,64102],{"class":99,"line":8206},[97,64097,63929],{"class":111},[97,64099,61476],{"class":107},[97,64101,55259],{"class":107},[97,64103,15762],{"class":103},[97,64105,64106,64108,64110,64112,64114,64116],{"class":99,"line":8212},[97,64107,54890],{"class":370},[97,64109,51621],{"class":103},[97,64111,511],{"class":370},[97,64113,9141],{"class":370},[97,64115,51676],{"class":319},[97,64117,1483],{"class":103},[97,64119,64120,64122,64124,64126,64128],{"class":99,"line":8224},[97,64121,55106],{"class":370},[97,64123,51621],{"class":103},[97,64125,869],{"class":370},[97,64127,51676],{"class":319},[97,64129,1483],{"class":103},[97,64131,64132],{"class":99,"line":8236},[97,64133,2378],{"class":103},[97,64135,64136],{"class":99,"line":8248},[97,64137,2591],{"emptyLinePlaceholder":249},[97,64139,64140,64142,64144,64146,64148],{"class":99,"line":9907},[97,64141,63929],{"class":111},[97,64143,61476],{"class":107},[97,64145,55259],{"class":107},[97,64147,1591],{"class":107},[97,64149,15762],{"class":103},[97,64151,64152,64155,64157,64159],{"class":99,"line":9932},[97,64153,64154],{"class":370},"      text-decoration",[97,64156,51621],{"class":103},[97,64158,54921],{"class":370},[97,64160,1483],{"class":103},[97,64162,64163,64165,64167,64169,64171,64173,64176],{"class":99,"line":9955},[97,64164,62416],{"class":370},[97,64166,51621],{"class":103},[97,64168,398],{"class":370},[97,64170,51676],{"class":319},[97,64172,51705],{"class":370},[97,64174,64175],{"class":370}," transparent",[97,64177,1483],{"class":103},[97,64179,64180,64182,64184,64186],{"class":99,"line":9979},[97,64181,57600],{"class":370},[97,64183,51621],{"class":103},[97,64185,62553],{"class":370},[97,64187,1483],{"class":103},[97,64189,64190],{"class":99,"line":9984},[97,64191,2378],{"class":103},[97,64193,64194],{"class":99,"line":9989},[97,64195,2591],{"emptyLinePlaceholder":249},[97,64197,64198,64200,64202,64204,64206,64209],{"class":99,"line":9994},[97,64199,63929],{"class":111},[97,64201,61476],{"class":107},[97,64203,55259],{"class":107},[97,64205,1591],{"class":107},[97,64207,64208],{"class":111},".active",[97,64210,15762],{"class":103},[97,64212,64213,64215,64217,64220],{"class":99,"line":10003},[97,64214,61975],{"class":370},[97,64216,51621],{"class":103},[97,64218,64219],{"class":370},"#e1251b",[97,64221,1483],{"class":103},[97,64223,64224,64226,64228,64230],{"class":99,"line":10008},[97,64225,57600],{"class":370},[97,64227,51621],{"class":103},[97,64229,64219],{"class":370},[97,64231,1483],{"class":103},[97,64233,64234],{"class":99,"line":10014},[97,64235,2378],{"class":103},[97,64237,64238],{"class":99,"line":10035},[97,64239,2591],{"emptyLinePlaceholder":249},[97,64241,64242,64245],{"class":99,"line":10041},[97,64243,64244],{"class":111},"    .tab-content",[97,64246,15762],{"class":103},[97,64248,64249,64251,64253,64255,64258,64260],{"class":99,"line":10055},[97,64250,54879],{"class":370},[97,64252,51621],{"class":103},[97,64254,511],{"class":370},[97,64256,64257],{"class":370}," 16",[97,64259,51676],{"class":319},[97,64261,1483],{"class":103},[97,64263,64264],{"class":99,"line":10061},[97,64265,2378],{"class":103},[97,64267,64268],{"class":99,"line":10088},[97,64269,2591],{"emptyLinePlaceholder":249},[97,64271,64272,64274,64276],{"class":99,"line":10097},[97,64273,64244],{"class":111},[97,64275,62358],{"class":111},[97,64277,15762],{"class":103},[97,64279,64280,64282,64284,64286],{"class":99,"line":10103},[97,64281,55193],{"class":370},[97,64283,51621],{"class":103},[97,64285,54921],{"class":370},[97,64287,1483],{"class":103},[97,64289,64290],{"class":99,"line":10111},[97,64291,2378],{"class":103},[97,64293,64294],{"class":99,"line":10116},[97,64295,2591],{"emptyLinePlaceholder":249},[97,64297,64298,64300,64303],{"class":99,"line":16794},[97,64299,64244],{"class":111},[97,64301,64302],{"class":111}," .item.active",[97,64304,15762],{"class":103},[97,64306,64307,64309,64311,64313],{"class":99,"line":16800},[97,64308,55193],{"class":370},[97,64310,51621],{"class":103},[97,64312,61053],{"class":370},[97,64314,1483],{"class":103},[97,64316,64317],{"class":99,"line":16823},[97,64318,2378],{"class":103},[97,64320,64321,64323,64325],{"class":99,"line":16829},[97,64322,52601],{"class":103},[97,64324,231],{"class":107},[97,64326,130],{"class":103},[97,64328,64329,64331,64333],{"class":99,"line":16852},[97,64330,51969],{"class":103},[97,64332,51522],{"class":107},[97,64334,130],{"class":103},[97,64336,64337],{"class":99,"line":16866},[97,64338,2591],{"emptyLinePlaceholder":249},[97,64340,64341,64343,64345],{"class":99,"line":16886},[97,64342,104],{"class":103},[97,64344,51984],{"class":107},[97,64346,130],{"class":103},[97,64348,64349,64351,64353,64355,64357,64360],{"class":99,"line":16892},[97,64350,52328],{"class":103},[97,64352,51795],{"class":107},[97,64354,53670],{"class":111},[97,64356,115],{"class":103},[97,64358,64359],{"class":118},"\"tab\"",[97,64361,130],{"class":103},[97,64363,64364,64366,64368,64370,64372,64375],{"class":99,"line":16903},[97,64365,51529],{"class":103},[97,64367,51795],{"class":107},[97,64369,53670],{"class":111},[97,64371,115],{"class":103},[97,64373,64374],{"class":118},"\"tab-nav\"",[97,64376,130],{"class":103},[97,64378,64379,64381,64383,64386,64388],{"class":99,"line":16926},[97,64380,55418],{"class":103},[97,64382,48],{"class":107},[97,64384,64385],{"class":103},">每日特价\u003C\u002F",[97,64387,48],{"class":107},[97,64389,130],{"class":103},[97,64391,64392,64394,64396],{"class":99,"line":16948},[97,64393,55418],{"class":103},[97,64395,67],{"class":107},[97,64397,130],{"class":103},[97,64399,64400,64402,64404,64406,64408,64410,64412,64414,64416,64418,64421,64424,64426,64428,64430],{"class":99,"line":16953},[97,64401,55486],{"class":103},[97,64403,70],{"class":107},[97,64405,61236],{"class":103},[97,64407,558],{"class":107},[97,64409,53670],{"class":111},[97,64411,115],{"class":103},[97,64413,59890],{"class":118},[97,64415,61241],{"class":111},[97,64417,115],{"class":103},[97,64419,64420],{"class":118},"\"javascript:;\"",[97,64422,64423],{"class":103},">精选\u003C\u002F",[97,64425,558],{"class":107},[97,64427,55498],{"class":103},[97,64429,70],{"class":107},[97,64431,130],{"class":103},[97,64433,64434,64436,64438,64440,64442,64444,64446,64448,64451,64453,64455,64457],{"class":99,"line":16959},[97,64435,55486],{"class":103},[97,64437,70],{"class":107},[97,64439,61236],{"class":103},[97,64441,558],{"class":107},[97,64443,61241],{"class":111},[97,64445,115],{"class":103},[97,64447,64420],{"class":118},[97,64449,64450],{"class":103},">美食\u003C\u002F",[97,64452,558],{"class":107},[97,64454,55498],{"class":103},[97,64456,70],{"class":107},[97,64458,130],{"class":103},[97,64460,64461,64463,64465,64467,64469,64471,64473,64475,64478,64480,64482,64484],{"class":99,"line":16973},[97,64462,55486],{"class":103},[97,64464,70],{"class":107},[97,64466,61236],{"class":103},[97,64468,558],{"class":107},[97,64470,61241],{"class":111},[97,64472,115],{"class":103},[97,64474,64420],{"class":118},[97,64476,64477],{"class":103},">百货\u003C\u002F",[97,64479,558],{"class":107},[97,64481,55498],{"class":103},[97,64483,70],{"class":107},[97,64485,130],{"class":103},[97,64487,64488,64490,64492,64494,64496,64498,64500,64502,64505,64507,64509,64511],{"class":99,"line":16986},[97,64489,55486],{"class":103},[97,64491,70],{"class":107},[97,64493,61236],{"class":103},[97,64495,558],{"class":107},[97,64497,61241],{"class":111},[97,64499,115],{"class":103},[97,64501,64420],{"class":118},[97,64503,64504],{"class":103},">个护\u003C\u002F",[97,64506,558],{"class":107},[97,64508,55498],{"class":103},[97,64510,70],{"class":107},[97,64512,130],{"class":103},[97,64514,64515,64517,64519,64521,64523,64525,64527,64529,64532,64534,64536,64538],{"class":99,"line":16991},[97,64516,55486],{"class":103},[97,64518,70],{"class":107},[97,64520,61236],{"class":103},[97,64522,558],{"class":107},[97,64524,61241],{"class":111},[97,64526,115],{"class":103},[97,64528,64420],{"class":118},[97,64530,64531],{"class":103},">预告\u003C\u002F",[97,64533,558],{"class":107},[97,64535,55498],{"class":103},[97,64537,70],{"class":107},[97,64539,130],{"class":103},[97,64541,64542,64544,64546],{"class":99,"line":17005},[97,64543,55591],{"class":103},[97,64545,67],{"class":107},[97,64547,130],{"class":103},[97,64549,64550,64552,64554],{"class":99,"line":17010},[97,64551,51960],{"class":103},[97,64553,51795],{"class":107},[97,64555,130],{"class":103},[97,64557,64558,64560,64562,64564,64566,64569],{"class":99,"line":17016},[97,64559,51529],{"class":103},[97,64561,51795],{"class":107},[97,64563,53670],{"class":111},[97,64565,115],{"class":103},[97,64567,64568],{"class":118},"\"tab-content\"",[97,64570,130],{"class":103},[97,64572,64573,64575,64577,64579,64581,64584,64586,64588,64590,64592,64595,64597,64599,64601,64604,64606],{"class":99,"line":17021},[97,64574,55418],{"class":103},[97,64576,51795],{"class":107},[97,64578,53670],{"class":111},[97,64580,115],{"class":103},[97,64582,64583],{"class":118},"\"item active\"",[97,64585,61236],{"class":103},[97,64587,19],{"class":107},[97,64589,55423],{"class":111},[97,64591,115],{"class":103},[97,64593,64594],{"class":118},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[97,64596,55431],{"class":111},[97,64598,115],{"class":103},[97,64600,7843],{"class":118},[97,64602,64603],{"class":103}," \u002F>\u003C\u002F",[97,64605,51795],{"class":107},[97,64607,130],{"class":103},[97,64609,64610,64612,64614,64616,64618,64620,64622,64624,64626,64628,64631,64633,64635,64637,64639,64641],{"class":99,"line":17035},[97,64611,55418],{"class":103},[97,64613,51795],{"class":107},[97,64615,53670],{"class":111},[97,64617,115],{"class":103},[97,64619,62807],{"class":118},[97,64621,61236],{"class":103},[97,64623,19],{"class":107},[97,64625,55423],{"class":111},[97,64627,115],{"class":103},[97,64629,64630],{"class":118},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[97,64632,55431],{"class":111},[97,64634,115],{"class":103},[97,64636,7843],{"class":118},[97,64638,64603],{"class":103},[97,64640,51795],{"class":107},[97,64642,130],{"class":103},[97,64644,64645,64647,64649,64651,64653,64655,64657,64659,64661,64663,64666,64668,64670,64672,64674,64676],{"class":99,"line":17040},[97,64646,55418],{"class":103},[97,64648,51795],{"class":107},[97,64650,53670],{"class":111},[97,64652,115],{"class":103},[97,64654,62807],{"class":118},[97,64656,61236],{"class":103},[97,64658,19],{"class":107},[97,64660,55423],{"class":111},[97,64662,115],{"class":103},[97,64664,64665],{"class":118},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[97,64667,55431],{"class":111},[97,64669,115],{"class":103},[97,64671,7843],{"class":118},[97,64673,64603],{"class":103},[97,64675,51795],{"class":107},[97,64677,130],{"class":103},[97,64679,64680,64682,64684,64686,64688,64690,64692,64694,64696,64698,64701,64703,64705,64707,64709,64711],{"class":99,"line":17045},[97,64681,55418],{"class":103},[97,64683,51795],{"class":107},[97,64685,53670],{"class":111},[97,64687,115],{"class":103},[97,64689,62807],{"class":118},[97,64691,61236],{"class":103},[97,64693,19],{"class":107},[97,64695,55423],{"class":111},[97,64697,115],{"class":103},[97,64699,64700],{"class":118},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[97,64702,55431],{"class":111},[97,64704,115],{"class":103},[97,64706,7843],{"class":118},[97,64708,64603],{"class":103},[97,64710,51795],{"class":107},[97,64712,130],{"class":103},[97,64714,64715,64717,64719,64721,64723,64725,64727,64729,64731,64733,64736,64738,64740,64742,64744,64746],{"class":99,"line":17059},[97,64716,55418],{"class":103},[97,64718,51795],{"class":107},[97,64720,53670],{"class":111},[97,64722,115],{"class":103},[97,64724,62807],{"class":118},[97,64726,61236],{"class":103},[97,64728,19],{"class":107},[97,64730,55423],{"class":111},[97,64732,115],{"class":103},[97,64734,64735],{"class":118},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[97,64737,55431],{"class":111},[97,64739,115],{"class":103},[97,64741,7843],{"class":118},[97,64743,64603],{"class":103},[97,64745,51795],{"class":107},[97,64747,130],{"class":103},[97,64749,64750,64752,64754],{"class":99,"line":17071},[97,64751,51960],{"class":103},[97,64753,51795],{"class":107},[97,64755,130],{"class":103},[97,64757,64758,64760,64762],{"class":99,"line":17076},[97,64759,52601],{"class":103},[97,64761,51795],{"class":107},[97,64763,130],{"class":103},[97,64765,64766,64768,64770],{"class":99,"line":17089},[97,64767,52328],{"class":103},[97,64769,51997],{"class":107},[97,64771,130],{"class":103},[97,64773,64774],{"class":99,"line":17094},[97,64775,64776],{"class":191},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[97,64778,64779],{"class":99,"line":17099},[97,64780,64781],{"class":191},"    \u002F\u002F 1.1 获取 a 元素 \n",[97,64783,64784,64786,64789,64791,64793,64795,64797,64800],{"class":99,"line":17104},[97,64785,11412],{"class":319},[97,64787,64788],{"class":370}," as",[97,64790,13755],{"class":319},[97,64792,54580],{"class":103},[97,64794,55865],{"class":111},[97,64796,323],{"class":103},[97,64798,64799],{"class":118},"'.tab-nav a'",[97,64801,329],{"class":103},[97,64803,64804],{"class":99,"line":17117},[97,64805,64806],{"class":191},"    \u002F\u002F console.log(as) \n",[97,64808,64809,64811,64813,64815,64817,64819,64821,64823,64825,64828,64830,64832,64834],{"class":99,"line":17122},[97,64810,3392],{"class":319},[97,64812,1850],{"class":103},[97,64814,52031],{"class":319},[97,64816,9629],{"class":103},[97,64818,115],{"class":319},[97,64820,4284],{"class":370},[97,64822,9636],{"class":103},[97,64824,104],{"class":319},[97,64826,64827],{"class":103}," as.",[97,64829,52152],{"class":370},[97,64831,3405],{"class":103},[97,64833,2483],{"class":319},[97,64835,12633],{"class":103},[97,64837,64838],{"class":99,"line":32823},[97,64839,64840],{"class":191},"      \u002F\u002F console.log(as[i])\n",[97,64842,64843],{"class":99,"line":32829},[97,64844,64845],{"class":191},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[97,64847,64848,64851,64853,64855,64858,64860,64862],{"class":99,"line":32835},[97,64849,64850],{"class":103},"      as[i].",[97,64852,57997],{"class":111},[97,64854,323],{"class":103},[97,64856,64857],{"class":118},"'mouseenter'",[97,64859,12626],{"class":103},[97,64861,54633],{"class":319},[97,64863,54636],{"class":103},[97,64865,64866],{"class":99,"line":32841},[97,64867,64868],{"class":191},"        \u002F\u002F console.log('鼠标经过')\n",[97,64870,64871],{"class":99,"line":32847},[97,64872,64873],{"class":191},"        \u002F\u002F 排他思想  \n",[97,64875,64876],{"class":99,"line":32858},[97,64877,64878],{"class":191},"        \u002F\u002F 干掉别人 移除类active\n",[97,64880,64881,64883,64885,64887,64890,64892,64894,64896,64899],{"class":99,"line":32864},[97,64882,52109],{"class":103},[97,64884,54583],{"class":111},[97,64886,323],{"class":103},[97,64888,64889],{"class":118},"'.tab-nav .active'",[97,64891,57187],{"class":103},[97,64893,57190],{"class":111},[97,64895,323],{"class":103},[97,64897,64898],{"class":118},"'active'",[97,64900,329],{"class":103},[97,64902,64903],{"class":99,"line":32884},[97,64904,64905],{"class":191},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[97,64907,64908,64911,64914,64916,64918,64920],{"class":99,"line":32890},[97,64909,64910],{"class":370},"        this",[97,64912,64913],{"class":103},".classList.",[97,64915,5525],{"class":111},[97,64917,323],{"class":103},[97,64919,64898],{"class":118},[97,64921,329],{"class":103},[97,64923,64924],{"class":99,"line":32901},[97,64925,2591],{"emptyLinePlaceholder":249},[97,64927,64928],{"class":99,"line":32907},[97,64929,64930],{"class":191},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[97,64932,64933],{"class":99,"line":32913},[97,64934,64935],{"class":191},"        \u002F\u002F 干掉别人\n",[97,64937,64938,64940,64942,64944,64947,64949,64951,64953,64955],{"class":99,"line":32919},[97,64939,52109],{"class":103},[97,64941,54583],{"class":111},[97,64943,323],{"class":103},[97,64945,64946],{"class":118},"'.tab-content .active'",[97,64948,57187],{"class":103},[97,64950,57190],{"class":111},[97,64952,323],{"class":103},[97,64954,64898],{"class":118},[97,64956,329],{"class":103},[97,64958,64959],{"class":99,"line":32925},[97,64960,64961],{"class":191},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[97,64963,64964,64966,64968,64970,64973,64975,64977,64979,64981,64983,64985,64987,64989],{"class":99,"line":32931},[97,64965,52109],{"class":103},[97,64967,54583],{"class":111},[97,64969,323],{"class":103},[97,64971,64972],{"class":118},"`.tab-content .item:nth-child(${",[97,64974,761],{"class":103},[97,64976,45756],{"class":319},[97,64978,25308],{"class":370},[97,64980,57216],{"class":118},[97,64982,57187],{"class":103},[97,64984,5525],{"class":111},[97,64986,323],{"class":103},[97,64988,64898],{"class":118},[97,64990,329],{"class":103},[97,64992,64993],{"class":99,"line":32937},[97,64994,2591],{"emptyLinePlaceholder":249},[97,64996,64997],{"class":99,"line":32943},[97,64998,64999],{"class":103},"      })\n",[97,65001,65002],{"class":99,"line":32963},[97,65003,2378],{"class":103},[97,65005,65006,65008,65010],{"class":99,"line":32969},[97,65007,52601],{"class":103},[97,65009,51997],{"class":107},[97,65011,130],{"class":103},[97,65013,65014,65016,65018],{"class":99,"line":32985},[97,65015,51969],{"class":103},[97,65017,51984],{"class":107},[97,65019,130],{"class":103},[97,65021,65022],{"class":99,"line":32991},[97,65023,2591],{"emptyLinePlaceholder":249},[97,65025,65026,65028,65030],{"class":99,"line":33005},[97,65027,51969],{"class":103},[97,65029,50825],{"class":107},[97,65031,130],{"class":103},[24,65033,65034],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[24,65036,65037],{},"在监听事件中，this指向的就是他的调用者",[24,65039,65040],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[24,65042,53904],{},[24,65044,65045],{},"(function () {",[24,65047,65048],{},"const list = document.querySelector('.xtx-elevator-list')",[24,65050,65051],{},"list.addEventListener('click', function (e) {",[24,65053,65054],{},"if (e.target.tagName === 'A') {",[24,65056,65057],{},"\u002F\u002F 排他思想",[24,65059,65060],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[24,65062,65063],{},"const old = document.querySelector('.xtx-elevator-list .active')",[24,65065,65066],{},"\u002F\u002F console.log(old);",[24,65068,65069],{},"\u002F\u002F 判断",[24,65071,65072],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[24,65074,65075],{},"if (old) old.classList.remove('active')",[24,65077,65078],{},"e.target.classList.add('active')",[24,65080,1265],{},[24,65082,52648],{},[24,65084,65085],{},"})();",[48,65087,65089],{"id":65088},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[87,65091,65093],{"className":50823,"code":65092,"language":50825,"meta":92,"style":92},"\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",[94,65094,65095,65105,65109,65117,65121,65135,65149,65161,65169,65175,65185,65195,65199,65203,65210,65222,65233,65250,65263,65277,65287,65291,65295,65302,65313,65331,65341,65353,65357,65361,65368,65385,65396,65408,65412,65416,65423,65435,65439,65447,65455,65459,65467,65475,65483,65498,65542,65550,65563,65576,65589,65597,65605,65613,65641,65649,65661,65674,65687,65695,65703,65711,65737,65745,65758,65770,65783,65791,65799,65807,65833,65841,65854,65866,65879,65887,65895,65903,65908,65928,65933,65953,65958,65975,65980,65988,65993,66022,66035,66039,66043,66048,66052,66080,66085,66102,66107,66112,66117,66122,66148,66152,66156,66164,66172,66176],{"__ignoreMap":92},[97,65096,65097,65099,65101,65103],{"class":99,"line":100},[97,65098,51487],{"class":103},[97,65100,51490],{"class":107},[97,65102,51493],{"class":111},[97,65104,130],{"class":103},[97,65106,65107],{"class":99,"line":195},[97,65108,2591],{"emptyLinePlaceholder":249},[97,65110,65111,65113,65115],{"class":99,"line":241},[97,65112,104],{"class":103},[97,65114,50825],{"class":107},[97,65116,130],{"class":103},[97,65118,65119],{"class":99,"line":1387},[97,65120,2591],{"emptyLinePlaceholder":249},[97,65122,65123,65125,65127,65129,65131,65133],{"class":99,"line":1393},[97,65124,104],{"class":103},[97,65126,51522],{"class":107},[97,65128,51504],{"class":111},[97,65130,115],{"class":103},[97,65132,51509],{"class":118},[97,65134,130],{"class":103},[97,65136,65137,65139,65141,65143,65145,65147],{"class":99,"line":1407},[97,65138,52328],{"class":103},[97,65140,108],{"class":107},[97,65142,51534],{"class":111},[97,65144,115],{"class":103},[97,65146,51539],{"class":118},[97,65148,130],{"class":103},[97,65150,65151,65153,65155,65157,65159],{"class":99,"line":1413},[97,65152,52328],{"class":103},[97,65154,51591],{"class":107},[97,65156,55498],{"class":103},[97,65158,51591],{"class":107},[97,65160,130],{"class":103},[97,65162,65163,65165,65167],{"class":99,"line":1504},[97,65164,52328],{"class":103},[97,65166,231],{"class":107},[97,65168,130],{"class":103},[97,65170,65171,65173],{"class":99,"line":1510},[97,65172,6594],{"class":107},[97,65174,15762],{"class":103},[97,65176,65177,65179,65181,65183],{"class":99,"line":1522},[97,65178,54890],{"class":370},[97,65180,51621],{"class":103},[97,65182,511],{"class":370},[97,65184,1483],{"class":103},[97,65186,65187,65189,65191,65193],{"class":99,"line":1804},[97,65188,54879],{"class":370},[97,65190,51621],{"class":103},[97,65192,511],{"class":370},[97,65194,1483],{"class":103},[97,65196,65197],{"class":99,"line":1809},[97,65198,2378],{"class":103},[97,65200,65201],{"class":99,"line":1815},[97,65202,2591],{"emptyLinePlaceholder":249},[97,65204,65205,65208],{"class":99,"line":1820},[97,65206,65207],{"class":107},"    table",[97,65209,15762],{"class":103},[97,65211,65212,65215,65217,65220],{"class":99,"line":1834},[97,65213,65214],{"class":370},"      border-collapse",[97,65216,51621],{"class":103},[97,65218,65219],{"class":370},"collapse",[97,65221,1483],{"class":103},[97,65223,65224,65227,65229,65231],{"class":99,"line":1839},[97,65225,65226],{"class":370},"      border-spacing",[97,65228,51621],{"class":103},[97,65230,511],{"class":370},[97,65232,1483],{"class":103},[97,65234,65235,65237,65239,65241,65243,65245,65248],{"class":99,"line":1845},[97,65236,62161],{"class":370},[97,65238,51621],{"class":103},[97,65240,537],{"class":370},[97,65242,51676],{"class":319},[97,65244,51705],{"class":370},[97,65246,65247],{"class":370}," #c0c0c0",[97,65249,1483],{"class":103},[97,65251,65252,65254,65256,65259,65261],{"class":99,"line":1866},[97,65253,54955],{"class":370},[97,65255,51621],{"class":103},[97,65257,65258],{"class":370},"500",[97,65260,51676],{"class":319},[97,65262,1483],{"class":103},[97,65264,65265,65267,65269,65271,65273,65275],{"class":99,"line":1871},[97,65266,54890],{"class":370},[97,65268,51621],{"class":103},[97,65270,631],{"class":370},[97,65272,51676],{"class":319},[97,65274,51740],{"class":370},[97,65276,1483],{"class":103},[97,65278,65279,65281,65283,65285],{"class":99,"line":1885},[97,65280,57470],{"class":370},[97,65282,51621],{"class":103},[97,65284,51776],{"class":370},[97,65286,1483],{"class":103},[97,65288,65289],{"class":99,"line":1890},[97,65290,2378],{"class":103},[97,65292,65293],{"class":99,"line":1919},[97,65294,2591],{"emptyLinePlaceholder":249},[97,65296,65297,65300],{"class":99,"line":1924},[97,65298,65299],{"class":107},"    th",[97,65301,15762],{"class":103},[97,65303,65304,65306,65308,65311],{"class":99,"line":1941},[97,65305,55068],{"class":370},[97,65307,51621],{"class":103},[97,65309,65310],{"class":370},"#09c",[97,65312,1483],{"class":103},[97,65314,65315,65318,65320,65322,65324,65326,65329],{"class":99,"line":1946},[97,65316,65317],{"class":370},"      font",[97,65319,51621],{"class":103},[97,65321,62523],{"class":370},[97,65323,64257],{"class":370},[97,65325,51676],{"class":319},[97,65327,65328],{"class":118}," \"微软雅黑\"",[97,65330,1483],{"class":103},[97,65332,65333,65335,65337,65339],{"class":99,"line":1951},[97,65334,57600],{"class":370},[97,65336,51621],{"class":103},[97,65338,61026],{"class":370},[97,65340,1483],{"class":103},[97,65342,65343,65345,65347,65349,65351],{"class":99,"line":1956},[97,65344,54969],{"class":370},[97,65346,51621],{"class":103},[97,65348,1120],{"class":370},[97,65350,51676],{"class":319},[97,65352,1483],{"class":103},[97,65354,65355],{"class":99,"line":1970},[97,65356,2378],{"class":103},[97,65358,65359],{"class":99,"line":1975},[97,65360,2591],{"emptyLinePlaceholder":249},[97,65362,65363,65366],{"class":99,"line":2768},[97,65364,65365],{"class":107},"    td",[97,65367,15762],{"class":103},[97,65369,65370,65372,65374,65376,65378,65380,65383],{"class":99,"line":2782},[97,65371,62161],{"class":370},[97,65373,51621],{"class":103},[97,65375,537],{"class":370},[97,65377,51676],{"class":319},[97,65379,51705],{"class":370},[97,65381,65382],{"class":370}," #d0d0d0",[97,65384,1483],{"class":103},[97,65386,65387,65389,65391,65394],{"class":99,"line":2790},[97,65388,57600],{"class":370},[97,65390,51621],{"class":103},[97,65392,65393],{"class":370},"#404060",[97,65395,1483],{"class":103},[97,65397,65398,65400,65402,65404,65406],{"class":99,"line":2795},[97,65399,54879],{"class":370},[97,65401,51621],{"class":103},[97,65403,766],{"class":370},[97,65405,51676],{"class":319},[97,65407,1483],{"class":103},[97,65409,65410],{"class":99,"line":2801},[97,65411,2378],{"class":103},[97,65413,65414],{"class":99,"line":2807},[97,65415,2591],{"emptyLinePlaceholder":249},[97,65417,65418,65421],{"class":99,"line":2812},[97,65419,65420],{"class":111},"    .allCheck",[97,65422,15762],{"class":103},[97,65424,65425,65427,65429,65431,65433],{"class":99,"line":8139},[97,65426,54955],{"class":370},[97,65428,51621],{"class":103},[97,65430,932],{"class":370},[97,65432,51676],{"class":319},[97,65434,1483],{"class":103},[97,65436,65437],{"class":99,"line":8163},[97,65438,2378],{"class":103},[97,65440,65441,65443,65445],{"class":99,"line":8168},[97,65442,52601],{"class":103},[97,65444,231],{"class":107},[97,65446,130],{"class":103},[97,65448,65449,65451,65453],{"class":99,"line":8174},[97,65450,51969],{"class":103},[97,65452,51522],{"class":107},[97,65454,130],{"class":103},[97,65456,65457],{"class":99,"line":8201},[97,65458,2591],{"emptyLinePlaceholder":249},[97,65460,65461,65463,65465],{"class":99,"line":8206},[97,65462,104],{"class":103},[97,65464,51984],{"class":107},[97,65466,130],{"class":103},[97,65468,65469,65471,65473],{"class":99,"line":8212},[97,65470,52328],{"class":103},[97,65472,457],{"class":107},[97,65474,130],{"class":103},[97,65476,65477,65479,65481],{"class":99,"line":8224},[97,65478,51529],{"class":103},[97,65480,463],{"class":107},[97,65482,130],{"class":103},[97,65484,65485,65487,65489,65491,65493,65496],{"class":99,"line":8236},[97,65486,55418],{"class":103},[97,65488,466],{"class":107},[97,65490,53670],{"class":111},[97,65492,115],{"class":103},[97,65494,65495],{"class":118},"\"allCheck\"",[97,65497,130],{"class":103},[97,65499,65500,65502,65504,65506,65508,65510,65512,65514,65516,65518,65520,65523,65526,65528,65530,65532,65535,65538,65540],{"class":99,"line":8248},[97,65501,55486],{"class":103},[97,65503,54005],{"class":107},[97,65505,54008],{"class":111},[97,65507,115],{"class":103},[97,65509,54013],{"class":118},[97,65511,112],{"class":111},[97,65513,115],{"class":103},[97,65515,7843],{"class":118},[97,65517,15149],{"class":111},[97,65519,115],{"class":103},[97,65521,65522],{"class":118},"\"checkAll\"",[97,65524,65525],{"class":103},"> \u003C",[97,65527,97],{"class":107},[97,65529,53670],{"class":111},[97,65531,115],{"class":103},[97,65533,65534],{"class":118},"\"all\"",[97,65536,65537],{"class":103},">全选\u003C\u002F",[97,65539,97],{"class":107},[97,65541,130],{"class":103},[97,65543,65544,65546,65548],{"class":99,"line":9907},[97,65545,55591],{"class":103},[97,65547,466],{"class":107},[97,65549,130],{"class":103},[97,65551,65552,65554,65556,65559,65561],{"class":99,"line":9932},[97,65553,55418],{"class":103},[97,65555,466],{"class":107},[97,65557,65558],{"class":103},">商品\u003C\u002F",[97,65560,466],{"class":107},[97,65562,130],{"class":103},[97,65564,65565,65567,65569,65572,65574],{"class":99,"line":9955},[97,65566,55418],{"class":103},[97,65568,466],{"class":107},[97,65570,65571],{"class":103},">商家\u003C\u002F",[97,65573,466],{"class":107},[97,65575,130],{"class":103},[97,65577,65578,65580,65582,65585,65587],{"class":99,"line":9979},[97,65579,55418],{"class":103},[97,65581,466],{"class":107},[97,65583,65584],{"class":103},">价格\u003C\u002F",[97,65586,466],{"class":107},[97,65588,130],{"class":103},[97,65590,65591,65593,65595],{"class":99,"line":9984},[97,65592,51960],{"class":103},[97,65594,463],{"class":107},[97,65596,130],{"class":103},[97,65598,65599,65601,65603],{"class":99,"line":9989},[97,65600,51529],{"class":103},[97,65602,463],{"class":107},[97,65604,130],{"class":103},[97,65606,65607,65609,65611],{"class":99,"line":9994},[97,65608,55418],{"class":103},[97,65610,509],{"class":107},[97,65612,130],{"class":103},[97,65614,65615,65617,65619,65621,65623,65625,65627,65629,65632,65634,65636,65639],{"class":99,"line":10003},[97,65616,55486],{"class":103},[97,65618,54005],{"class":107},[97,65620,54008],{"class":111},[97,65622,115],{"class":103},[97,65624,54013],{"class":118},[97,65626,112],{"class":111},[97,65628,115],{"class":103},[97,65630,65631],{"class":118},"\"check\"",[97,65633,53670],{"class":111},[97,65635,115],{"class":103},[97,65637,65638],{"class":118},"\"ck\"",[97,65640,130],{"class":103},[97,65642,65643,65645,65647],{"class":99,"line":10008},[97,65644,55591],{"class":103},[97,65646,509],{"class":107},[97,65648,130],{"class":103},[97,65650,65651,65653,65655,65657,65659],{"class":99,"line":10014},[97,65652,55418],{"class":103},[97,65654,509],{"class":107},[97,65656,61357],{"class":103},[97,65658,509],{"class":107},[97,65660,130],{"class":103},[97,65662,65663,65665,65667,65670,65672],{"class":99,"line":10035},[97,65664,55418],{"class":103},[97,65666,509],{"class":107},[97,65668,65669],{"class":103},">小米\u003C\u002F",[97,65671,509],{"class":107},[97,65673,130],{"class":103},[97,65675,65676,65678,65680,65683,65685],{"class":99,"line":10041},[97,65677,55418],{"class":103},[97,65679,509],{"class":107},[97,65681,65682],{"class":103},">￥1999\u003C\u002F",[97,65684,509],{"class":107},[97,65686,130],{"class":103},[97,65688,65689,65691,65693],{"class":99,"line":10055},[97,65690,51960],{"class":103},[97,65692,463],{"class":107},[97,65694,130],{"class":103},[97,65696,65697,65699,65701],{"class":99,"line":10061},[97,65698,51529],{"class":103},[97,65700,463],{"class":107},[97,65702,130],{"class":103},[97,65704,65705,65707,65709],{"class":99,"line":10088},[97,65706,55418],{"class":103},[97,65708,509],{"class":107},[97,65710,130],{"class":103},[97,65712,65713,65715,65717,65719,65721,65723,65725,65727,65729,65731,65733,65735],{"class":99,"line":10097},[97,65714,55486],{"class":103},[97,65716,54005],{"class":107},[97,65718,54008],{"class":111},[97,65720,115],{"class":103},[97,65722,54013],{"class":118},[97,65724,112],{"class":111},[97,65726,115],{"class":103},[97,65728,65631],{"class":118},[97,65730,53670],{"class":111},[97,65732,115],{"class":103},[97,65734,65638],{"class":118},[97,65736,130],{"class":103},[97,65738,65739,65741,65743],{"class":99,"line":10103},[97,65740,55591],{"class":103},[97,65742,509],{"class":107},[97,65744,130],{"class":103},[97,65746,65747,65749,65751,65754,65756],{"class":99,"line":10111},[97,65748,55418],{"class":103},[97,65750,509],{"class":107},[97,65752,65753],{"class":103},">小米净水器\u003C\u002F",[97,65755,509],{"class":107},[97,65757,130],{"class":103},[97,65759,65760,65762,65764,65766,65768],{"class":99,"line":10116},[97,65761,55418],{"class":103},[97,65763,509],{"class":107},[97,65765,65669],{"class":103},[97,65767,509],{"class":107},[97,65769,130],{"class":103},[97,65771,65772,65774,65776,65779,65781],{"class":99,"line":16794},[97,65773,55418],{"class":103},[97,65775,509],{"class":107},[97,65777,65778],{"class":103},">￥4999\u003C\u002F",[97,65780,509],{"class":107},[97,65782,130],{"class":103},[97,65784,65785,65787,65789],{"class":99,"line":16800},[97,65786,51960],{"class":103},[97,65788,463],{"class":107},[97,65790,130],{"class":103},[97,65792,65793,65795,65797],{"class":99,"line":16823},[97,65794,51529],{"class":103},[97,65796,463],{"class":107},[97,65798,130],{"class":103},[97,65800,65801,65803,65805],{"class":99,"line":16829},[97,65802,55418],{"class":103},[97,65804,509],{"class":107},[97,65806,130],{"class":103},[97,65808,65809,65811,65813,65815,65817,65819,65821,65823,65825,65827,65829,65831],{"class":99,"line":16852},[97,65810,55486],{"class":103},[97,65812,54005],{"class":107},[97,65814,54008],{"class":111},[97,65816,115],{"class":103},[97,65818,54013],{"class":118},[97,65820,112],{"class":111},[97,65822,115],{"class":103},[97,65824,65631],{"class":118},[97,65826,53670],{"class":111},[97,65828,115],{"class":103},[97,65830,65638],{"class":118},[97,65832,130],{"class":103},[97,65834,65835,65837,65839],{"class":99,"line":16866},[97,65836,55591],{"class":103},[97,65838,509],{"class":107},[97,65840,130],{"class":103},[97,65842,65843,65845,65847,65850,65852],{"class":99,"line":16886},[97,65844,55418],{"class":103},[97,65846,509],{"class":107},[97,65848,65849],{"class":103},">小米电视\u003C\u002F",[97,65851,509],{"class":107},[97,65853,130],{"class":103},[97,65855,65856,65858,65860,65862,65864],{"class":99,"line":16892},[97,65857,55418],{"class":103},[97,65859,509],{"class":107},[97,65861,65669],{"class":103},[97,65863,509],{"class":107},[97,65865,130],{"class":103},[97,65867,65868,65870,65872,65875,65877],{"class":99,"line":16903},[97,65869,55418],{"class":103},[97,65871,509],{"class":107},[97,65873,65874],{"class":103},">￥5999\u003C\u002F",[97,65876,509],{"class":107},[97,65878,130],{"class":103},[97,65880,65881,65883,65885],{"class":99,"line":16926},[97,65882,51960],{"class":103},[97,65884,463],{"class":107},[97,65886,130],{"class":103},[97,65888,65889,65891,65893],{"class":99,"line":16948},[97,65890,52601],{"class":103},[97,65892,457],{"class":107},[97,65894,130],{"class":103},[97,65896,65897,65899,65901],{"class":99,"line":16953},[97,65898,52328],{"class":103},[97,65900,51997],{"class":107},[97,65902,130],{"class":103},[97,65904,65905],{"class":99,"line":16959},[97,65906,65907],{"class":191},"    \u002F\u002F 1. 获取大复选框\n",[97,65909,65910,65912,65915,65917,65919,65921,65923,65926],{"class":99,"line":16973},[97,65911,11412],{"class":319},[97,65913,65914],{"class":370}," checkAll",[97,65916,13755],{"class":319},[97,65918,54580],{"class":103},[97,65920,54583],{"class":111},[97,65922,323],{"class":103},[97,65924,65925],{"class":118},"'#checkAll'",[97,65927,329],{"class":103},[97,65929,65930],{"class":99,"line":16986},[97,65931,65932],{"class":191},"    \u002F\u002F 2. 获取所有的小复选框\n",[97,65934,65935,65937,65940,65942,65944,65946,65948,65951],{"class":99,"line":16991},[97,65936,11412],{"class":319},[97,65938,65939],{"class":370}," cks",[97,65941,13755],{"class":319},[97,65943,54580],{"class":103},[97,65945,55865],{"class":111},[97,65947,323],{"class":103},[97,65949,65950],{"class":118},"'.ck'",[97,65952,329],{"class":103},[97,65954,65955],{"class":99,"line":17005},[97,65956,65957],{"class":191},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[97,65959,65960,65963,65965,65967,65969,65971,65973],{"class":99,"line":17010},[97,65961,65962],{"class":103},"    checkAll.",[97,65964,57997],{"class":111},[97,65966,323],{"class":103},[97,65968,58002],{"class":118},[97,65970,12626],{"class":103},[97,65972,54633],{"class":319},[97,65974,54636],{"class":103},[97,65976,65977],{"class":99,"line":17016},[97,65978,65979],{"class":191},"      \u002F\u002F 得到当前大复选框的选中状态\n",[97,65981,65982,65985],{"class":99,"line":17021},[97,65983,65984],{"class":191},"      \u002F\u002F console.log(checkAll.checked)",[97,65986,65987],{"class":191},"  \u002F\u002F 得到 是 true 或者是 false\n",[97,65989,65990],{"class":99,"line":17035},[97,65991,65992],{"class":191},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[97,65994,65995,65997,65999,66001,66003,66005,66007,66009,66011,66014,66016,66018,66020],{"class":99,"line":17040},[97,65996,52468],{"class":319},[97,65998,1850],{"class":103},[97,66000,52031],{"class":319},[97,66002,9629],{"class":103},[97,66004,115],{"class":319},[97,66006,4284],{"class":370},[97,66008,9636],{"class":103},[97,66010,104],{"class":319},[97,66012,66013],{"class":103}," cks.",[97,66015,52152],{"class":370},[97,66017,3405],{"class":103},[97,66019,2483],{"class":319},[97,66021,12633],{"class":103},[97,66023,66024,66027,66029,66032],{"class":99,"line":17045},[97,66025,66026],{"class":103},"        cks[i].checked ",[97,66028,115],{"class":319},[97,66030,66031],{"class":370}," this",[97,66033,66034],{"class":103},".checked\n",[97,66036,66037],{"class":99,"line":17059},[97,66038,52582],{"class":103},[97,66040,66041],{"class":99,"line":17071},[97,66042,33651],{"class":103},[97,66044,66045],{"class":99,"line":17076},[97,66046,66047],{"class":191},"    \u002F\u002F 5. 小复选框控制大复选框\n",[97,66049,66050],{"class":99,"line":17089},[97,66051,2591],{"emptyLinePlaceholder":249},[97,66053,66054,66056,66058,66060,66062,66064,66066,66068,66070,66072,66074,66076,66078],{"class":99,"line":17094},[97,66055,3392],{"class":319},[97,66057,1850],{"class":103},[97,66059,52031],{"class":319},[97,66061,9629],{"class":103},[97,66063,115],{"class":319},[97,66065,4284],{"class":370},[97,66067,9636],{"class":103},[97,66069,104],{"class":319},[97,66071,66013],{"class":103},[97,66073,52152],{"class":370},[97,66075,3405],{"class":103},[97,66077,2483],{"class":319},[97,66079,12633],{"class":103},[97,66081,66082],{"class":99,"line":17099},[97,66083,66084],{"class":191},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[97,66086,66087,66090,66092,66094,66096,66098,66100],{"class":99,"line":17104},[97,66088,66089],{"class":103},"      cks[i].",[97,66091,57997],{"class":111},[97,66093,323],{"class":103},[97,66095,58002],{"class":118},[97,66097,12626],{"class":103},[97,66099,54633],{"class":319},[97,66101,54636],{"class":103},[97,66103,66104],{"class":99,"line":17117},[97,66105,66106],{"class":191},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[97,66108,66109],{"class":99,"line":17122},[97,66110,66111],{"class":191},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[97,66113,66114],{"class":99,"line":32823},[97,66115,66116],{"class":191},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[97,66118,66119],{"class":99,"line":32829},[97,66120,66121],{"class":191},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[97,66123,66124,66127,66129,66131,66133,66135,66138,66140,66142,66144,66146],{"class":99,"line":32835},[97,66125,66126],{"class":103},"        checkAll.checked ",[97,66128,115],{"class":319},[97,66130,54580],{"class":103},[97,66132,55865],{"class":111},[97,66134,323],{"class":103},[97,66136,66137],{"class":118},"'.ck:checked'",[97,66139,31016],{"class":103},[97,66141,52152],{"class":370},[97,66143,58090],{"class":319},[97,66145,66013],{"class":103},[97,66147,56015],{"class":370},[97,66149,66150],{"class":99,"line":32841},[97,66151,64999],{"class":103},[97,66153,66154],{"class":99,"line":32847},[97,66155,2378],{"class":103},[97,66157,66158,66160,66162],{"class":99,"line":32858},[97,66159,52601],{"class":103},[97,66161,51997],{"class":107},[97,66163,130],{"class":103},[97,66165,66166,66168,66170],{"class":99,"line":32864},[97,66167,51969],{"class":103},[97,66169,51984],{"class":107},[97,66171,130],{"class":103},[97,66173,66174],{"class":99,"line":32884},[97,66175,2591],{"emptyLinePlaceholder":249},[97,66177,66178,66180,66182],{"class":99,"line":32890},[97,66179,51969],{"class":103},[97,66181,50825],{"class":107},[97,66183,130],{"class":103},[24,66185,66186],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[24,66188,66189],{},"用好之间比较得到的布尔值！！！",[24,66191,66192,66193,66196,66197,1850,66200,904,66202,66205],{},"在 JS 里访问的时候，",[94,66194,66195],{},"checkbox.checked"," 是一个 ",[469,66198,66199],{},"布尔值",[94,66201,1555],{},[94,66203,66204],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[24,66207,66208,66209,66212,66213],{},"HTML 的 ",[94,66210,66211],{},"checked=\"checked\""," 只是 ",[469,66214,66215,66216,66219],{},"初始值；JS 的 ",[94,66217,66218],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[24,66221,66222],{},"：checked是一个伪类选择器",[24,66224,66225],{},[19,66226],{"alt":92,"src":66227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[24,66229,66230,66233],{},[66231,66232],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[24,66235,66236],{},[19,66237],{"alt":92,"src":66238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66240,66242],{"id":66241},"_33-dom事件进阶","3.3 DOM事件进阶",[48,66244,66246],{"id":66245},"_331-事件流","3.3.1 事件流",[24,66248,66249],{},[19,66250],{"alt":92,"src":66251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[160,66253,66255],{"id":66254},"_3311-事件捕获","3.3.1.1 事件捕获",[24,66257,66258],{},[19,66259],{"alt":92,"src":66260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[87,66262,66264],{"className":50823,"code":66263,"language":50825,"meta":92,"style":92},"\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",[94,66265,66266,66276,66290,66294,66302,66316,66336,66348,66356,66363,66375,66387,66397,66401,66405,66412,66424,66436,66446,66450,66458,66466,66470,66478,66493,66512,66520,66528,66548,66568,66584,66595,66603,66620,66631,66639,66656,66667,66675,66683,66691,66695],{"__ignoreMap":92},[97,66267,66268,66270,66272,66274],{"class":99,"line":100},[97,66269,51487],{"class":103},[97,66271,51490],{"class":107},[97,66273,51493],{"class":111},[97,66275,130],{"class":103},[97,66277,66278,66280,66282,66284,66286,66288],{"class":99,"line":195},[97,66279,104],{"class":103},[97,66281,50825],{"class":107},[97,66283,51504],{"class":111},[97,66285,115],{"class":103},[97,66287,51509],{"class":118},[97,66289,130],{"class":103},[97,66291,66292],{"class":99,"line":241},[97,66293,2591],{"emptyLinePlaceholder":249},[97,66295,66296,66298,66300],{"class":99,"line":1387},[97,66297,104],{"class":103},[97,66299,51522],{"class":107},[97,66301,130],{"class":103},[97,66303,66304,66306,66308,66310,66312,66314],{"class":99,"line":1393},[97,66305,52328],{"class":103},[97,66307,108],{"class":107},[97,66309,51534],{"class":111},[97,66311,115],{"class":103},[97,66313,51539],{"class":118},[97,66315,130],{"class":103},[97,66317,66318,66320,66322,66324,66326,66328,66330,66332,66334],{"class":99,"line":1407},[97,66319,52328],{"class":103},[97,66321,108],{"class":107},[97,66323,112],{"class":111},[97,66325,115],{"class":103},[97,66327,119],{"class":118},[97,66329,122],{"class":111},[97,66331,115],{"class":103},[97,66333,127],{"class":118},[97,66335,130],{"class":103},[97,66337,66338,66340,66342,66344,66346],{"class":99,"line":1413},[97,66339,52328],{"class":103},[97,66341,51591],{"class":107},[97,66343,51594],{"class":103},[97,66345,51591],{"class":107},[97,66347,130],{"class":103},[97,66349,66350,66352,66354],{"class":99,"line":1504},[97,66351,52328],{"class":103},[97,66353,231],{"class":107},[97,66355,130],{"class":103},[97,66357,66358,66361],{"class":99,"line":1510},[97,66359,66360],{"class":111},"    .father",[97,66362,15762],{"class":103},[97,66364,66365,66367,66369,66371,66373],{"class":99,"line":1522},[97,66366,54955],{"class":370},[97,66368,51621],{"class":103},[97,66370,65258],{"class":370},[97,66372,51676],{"class":319},[97,66374,1483],{"class":103},[97,66376,66377,66379,66381,66383,66385],{"class":99,"line":1804},[97,66378,54969],{"class":370},[97,66380,51621],{"class":103},[97,66382,65258],{"class":370},[97,66384,51676],{"class":319},[97,66386,1483],{"class":103},[97,66388,66389,66391,66393,66395],{"class":99,"line":1809},[97,66390,55068],{"class":370},[97,66392,51621],{"class":103},[97,66394,51829],{"class":370},[97,66396,1483],{"class":103},[97,66398,66399],{"class":99,"line":1815},[97,66400,2378],{"class":103},[97,66402,66403],{"class":99,"line":1820},[97,66404,2591],{"emptyLinePlaceholder":249},[97,66406,66407,66410],{"class":99,"line":1834},[97,66408,66409],{"class":111},"    .son",[97,66411,15762],{"class":103},[97,66413,66414,66416,66418,66420,66422],{"class":99,"line":1839},[97,66415,54955],{"class":370},[97,66417,51621],{"class":103},[97,66419,1914],{"class":370},[97,66421,51676],{"class":319},[97,66423,1483],{"class":103},[97,66425,66426,66428,66430,66432,66434],{"class":99,"line":1845},[97,66427,54969],{"class":370},[97,66429,51621],{"class":103},[97,66431,1914],{"class":370},[97,66433,51676],{"class":319},[97,66435,1483],{"class":103},[97,66437,66438,66440,66442,66444],{"class":99,"line":1866},[97,66439,55068],{"class":370},[97,66441,51621],{"class":103},[97,66443,55073],{"class":370},[97,66445,1483],{"class":103},[97,66447,66448],{"class":99,"line":1871},[97,66449,2378],{"class":103},[97,66451,66452,66454,66456],{"class":99,"line":1885},[97,66453,52601],{"class":103},[97,66455,231],{"class":107},[97,66457,130],{"class":103},[97,66459,66460,66462,66464],{"class":99,"line":1890},[97,66461,51969],{"class":103},[97,66463,51522],{"class":107},[97,66465,130],{"class":103},[97,66467,66468],{"class":99,"line":1919},[97,66469,2591],{"emptyLinePlaceholder":249},[97,66471,66472,66474,66476],{"class":99,"line":1924},[97,66473,104],{"class":103},[97,66475,51984],{"class":107},[97,66477,130],{"class":103},[97,66479,66480,66482,66484,66486,66488,66491],{"class":99,"line":1941},[97,66481,52328],{"class":103},[97,66483,51795],{"class":107},[97,66485,53670],{"class":111},[97,66487,115],{"class":103},[97,66489,66490],{"class":118},"\"father\"",[97,66492,130],{"class":103},[97,66494,66495,66497,66499,66501,66503,66506,66508,66510],{"class":99,"line":1946},[97,66496,51529],{"class":103},[97,66498,51795],{"class":107},[97,66500,53670],{"class":111},[97,66502,115],{"class":103},[97,66504,66505],{"class":118},"\"son\"",[97,66507,55498],{"class":103},[97,66509,51795],{"class":107},[97,66511,130],{"class":103},[97,66513,66514,66516,66518],{"class":99,"line":1951},[97,66515,52601],{"class":103},[97,66517,51795],{"class":107},[97,66519,130],{"class":103},[97,66521,66522,66524,66526],{"class":99,"line":1956},[97,66523,52328],{"class":103},[97,66525,51997],{"class":107},[97,66527,130],{"class":103},[97,66529,66530,66532,66535,66537,66539,66541,66543,66546],{"class":99,"line":1970},[97,66531,11412],{"class":319},[97,66533,66534],{"class":370}," fa",[97,66536,13755],{"class":319},[97,66538,54580],{"class":103},[97,66540,54583],{"class":111},[97,66542,323],{"class":103},[97,66544,66545],{"class":118},"'.father'",[97,66547,329],{"class":103},[97,66549,66550,66552,66555,66557,66559,66561,66563,66566],{"class":99,"line":1975},[97,66551,11412],{"class":319},[97,66553,66554],{"class":370}," son",[97,66556,13755],{"class":319},[97,66558,54580],{"class":103},[97,66560,54583],{"class":111},[97,66562,323],{"class":103},[97,66564,66565],{"class":118},"'.son'",[97,66567,329],{"class":103},[97,66569,66570,66572,66574,66576,66578,66580,66582],{"class":99,"line":2768},[97,66571,52591],{"class":103},[97,66573,57997],{"class":111},[97,66575,323],{"class":103},[97,66577,58002],{"class":118},[97,66579,12626],{"class":103},[97,66581,54633],{"class":319},[97,66583,54636],{"class":103},[97,66585,66586,66588,66590,66593],{"class":99,"line":2782},[97,66587,59109],{"class":111},[97,66589,323],{"class":103},[97,66591,66592],{"class":118},"'woshiu1'",[97,66594,329],{"class":103},[97,66596,66597,66599,66601],{"class":99,"line":2790},[97,66598,54719],{"class":103},[97,66600,1555],{"class":370},[97,66602,329],{"class":103},[97,66604,66605,66608,66610,66612,66614,66616,66618],{"class":99,"line":2795},[97,66606,66607],{"class":103},"    fa.",[97,66609,57997],{"class":111},[97,66611,323],{"class":103},[97,66613,58002],{"class":118},[97,66615,12626],{"class":103},[97,66617,54633],{"class":319},[97,66619,54636],{"class":103},[97,66621,66622,66624,66626,66629],{"class":99,"line":2801},[97,66623,59109],{"class":111},[97,66625,323],{"class":103},[97,66627,66628],{"class":118},"'1'",[97,66630,329],{"class":103},[97,66632,66633,66635,66637],{"class":99,"line":2807},[97,66634,54719],{"class":103},[97,66636,1555],{"class":370},[97,66638,329],{"class":103},[97,66640,66641,66644,66646,66648,66650,66652,66654],{"class":99,"line":2812},[97,66642,66643],{"class":103},"    son.",[97,66645,57997],{"class":111},[97,66647,323],{"class":103},[97,66649,58002],{"class":118},[97,66651,12626],{"class":103},[97,66653,54633],{"class":319},[97,66655,54636],{"class":103},[97,66657,66658,66660,66662,66665],{"class":99,"line":8139},[97,66659,59109],{"class":111},[97,66661,323],{"class":103},[97,66663,66664],{"class":118},"'2'",[97,66666,329],{"class":103},[97,66668,66669,66671,66673],{"class":99,"line":8163},[97,66670,54719],{"class":103},[97,66672,1555],{"class":370},[97,66674,329],{"class":103},[97,66676,66677,66679,66681],{"class":99,"line":8168},[97,66678,52601],{"class":103},[97,66680,51997],{"class":107},[97,66682,130],{"class":103},[97,66684,66685,66687,66689],{"class":99,"line":8174},[97,66686,51969],{"class":103},[97,66688,51984],{"class":107},[97,66690,130],{"class":103},[97,66692,66693],{"class":99,"line":8201},[97,66694,2591],{"emptyLinePlaceholder":249},[97,66696,66697,66699,66701],{"class":99,"line":8206},[97,66698,51969],{"class":103},[97,66700,50825],{"class":107},[97,66702,130],{"class":103},[24,66704,66705],{},[19,66706],{"alt":92,"src":66707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[24,66709,66710],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[160,66712,66714],{"id":66713},"_3312-事件冒泡","3.3.1.2 事件冒泡",[24,66716,66717],{},[19,66718],{"alt":92,"src":66719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[24,66721,66722],{},"反着来",[24,66724,66725],{},"注意是同名事件，比如都是‘click’",[160,66727,66729],{"id":66728},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[24,66731,66732],{},[19,66733],{"alt":92,"src":66734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[160,66736,66738],{"id":66737},"_3314-解绑事件","3.3.1.4 解绑事件",[24,66740,66741],{},[19,66742],{"alt":92,"src":66743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[24,66745,66746],{},[19,66747],{"alt":92,"src":66748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[160,66750,66752],{"id":66751},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[138,66754,66755],{},[70,66756,66757],{},"事件类型的区别",[24,66759,66760],{},[19,66761],{"alt":92,"src":66762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[24,66764,66765],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[138,66767,66768],{"start":195},[70,66769,66770],{},"注册事件的区别",[24,66772,66773],{},[19,66774],{"alt":92,"src":66775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[160,66777,66779],{"id":66778},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[24,66781,66782],{},[19,66783],{"alt":92,"src":66784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[24,66786,66787],{},[19,66788],{"alt":92,"src":66789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[87,66791,66793],{"className":53251,"code":66792,"language":53253,"meta":92,"style":92},"\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",[94,66794,66795,66803,66820,66843,66851,66856,66861,66866,66870,66878,66886],{"__ignoreMap":92},[97,66796,66797,66799,66801],{"class":99,"line":100},[97,66798,104],{"class":103},[97,66800,51984],{"class":107},[97,66802,130],{"class":103},[97,66804,66805,66807,66810,66813,66815,66818],{"class":99,"line":195},[97,66806,52328],{"class":103},[97,66808,66809],{"class":107},"form",[97,66811,66812],{"class":111}," action",[97,66814,115],{"class":103},[97,66816,66817],{"class":118},"\"http:\u002F\u002Fwww.itcast.cn\"",[97,66819,130],{"class":103},[97,66821,66822,66824,66826,66828,66830,66833,66836,66838,66841],{"class":99,"line":241},[97,66823,51529],{"class":103},[97,66825,54005],{"class":107},[97,66827,54008],{"class":111},[97,66829,115],{"class":103},[97,66831,66832],{"class":118},"\"submit\"",[97,66834,66835],{"class":111}," value",[97,66837,115],{"class":103},[97,66839,66840],{"class":118},"\"免费注册\"",[97,66842,130],{"class":103},[97,66844,66845,66847,66849],{"class":99,"line":1387},[97,66846,51529],{"class":103},[97,66848,51997],{"class":107},[97,66850,130],{"class":103},[97,66852,66853],{"class":99,"line":1393},[97,66854,66855],{"class":103},"      const form = document.querySelector('form')\n",[97,66857,66858],{"class":99,"line":1407},[97,66859,66860],{"class":103},"      form.addEventListener('submit', function (e) {\n",[97,66862,66863],{"class":99,"line":1413},[97,66864,66865],{"class":103},"        e.preventDefault()\n",[97,66867,66868],{"class":99,"line":1504},[97,66869,64999],{"class":103},[97,66871,66872,66874,66876],{"class":99,"line":1510},[97,66873,51960],{"class":103},[97,66875,51997],{"class":107},[97,66877,130],{"class":103},[97,66879,66880,66882,66884],{"class":99,"line":1522},[97,66881,52601],{"class":103},[97,66883,66809],{"class":107},[97,66885,130],{"class":103},[97,66887,66888,66890,66892],{"class":99,"line":1804},[97,66889,51969],{"class":103},[97,66891,51984],{"class":107},[97,66893,130],{"class":103},[24,66895,66896],{},"点击不在跳转！！！",[48,66898,66900],{"id":66899},"_332-事件委托","3.3.2 事件委托",[24,66902,66903],{},[19,66904],{"alt":92,"src":66905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[87,66907,66909],{"className":50823,"code":66908,"language":50825,"meta":92,"style":92},"\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",[94,66910,66911,66921,66935,66939,66947,66961,66981,66993,67001,67005,67013,67021,67033,67045,67057,67069,67081,67094,67102,67110,67115,67134,67155,67160,67165,67170,67175,67184,67188,67198,67202,67207,67212,67226,67236,67240,67244,67252,67260,67264],{"__ignoreMap":92},[97,66912,66913,66915,66917,66919],{"class":99,"line":100},[97,66914,51487],{"class":103},[97,66916,51490],{"class":107},[97,66918,51493],{"class":111},[97,66920,130],{"class":103},[97,66922,66923,66925,66927,66929,66931,66933],{"class":99,"line":195},[97,66924,104],{"class":103},[97,66926,50825],{"class":107},[97,66928,51504],{"class":111},[97,66930,115],{"class":103},[97,66932,51509],{"class":118},[97,66934,130],{"class":103},[97,66936,66937],{"class":99,"line":241},[97,66938,2591],{"emptyLinePlaceholder":249},[97,66940,66941,66943,66945],{"class":99,"line":1387},[97,66942,104],{"class":103},[97,66944,51522],{"class":107},[97,66946,130],{"class":103},[97,66948,66949,66951,66953,66955,66957,66959],{"class":99,"line":1393},[97,66950,52328],{"class":103},[97,66952,108],{"class":107},[97,66954,51534],{"class":111},[97,66956,115],{"class":103},[97,66958,51539],{"class":118},[97,66960,130],{"class":103},[97,66962,66963,66965,66967,66969,66971,66973,66975,66977,66979],{"class":99,"line":1407},[97,66964,52328],{"class":103},[97,66966,108],{"class":107},[97,66968,112],{"class":111},[97,66970,115],{"class":103},[97,66972,119],{"class":118},[97,66974,122],{"class":111},[97,66976,115],{"class":103},[97,66978,127],{"class":118},[97,66980,130],{"class":103},[97,66982,66983,66985,66987,66989,66991],{"class":99,"line":1413},[97,66984,52328],{"class":103},[97,66986,51591],{"class":107},[97,66988,51594],{"class":103},[97,66990,51591],{"class":107},[97,66992,130],{"class":103},[97,66994,66995,66997,66999],{"class":99,"line":1504},[97,66996,51969],{"class":103},[97,66998,51522],{"class":107},[97,67000,130],{"class":103},[97,67002,67003],{"class":99,"line":1510},[97,67004,2591],{"emptyLinePlaceholder":249},[97,67006,67007,67009,67011],{"class":99,"line":1522},[97,67008,104],{"class":103},[97,67010,51984],{"class":107},[97,67012,130],{"class":103},[97,67014,67015,67017,67019],{"class":99,"line":1804},[97,67016,52328],{"class":103},[97,67018,67],{"class":107},[97,67020,130],{"class":103},[97,67022,67023,67025,67027,67029,67031],{"class":99,"line":1809},[97,67024,51529],{"class":103},[97,67026,70],{"class":107},[97,67028,54150],{"class":103},[97,67030,70],{"class":107},[97,67032,130],{"class":103},[97,67034,67035,67037,67039,67041,67043],{"class":99,"line":1815},[97,67036,51529],{"class":103},[97,67038,70],{"class":107},[97,67040,54169],{"class":103},[97,67042,70],{"class":107},[97,67044,130],{"class":103},[97,67046,67047,67049,67051,67053,67055],{"class":99,"line":1820},[97,67048,51529],{"class":103},[97,67050,70],{"class":107},[97,67052,54188],{"class":103},[97,67054,70],{"class":107},[97,67056,130],{"class":103},[97,67058,67059,67061,67063,67065,67067],{"class":99,"line":1834},[97,67060,51529],{"class":103},[97,67062,70],{"class":107},[97,67064,54207],{"class":103},[97,67066,70],{"class":107},[97,67068,130],{"class":103},[97,67070,67071,67073,67075,67077,67079],{"class":99,"line":1839},[97,67072,51529],{"class":103},[97,67074,70],{"class":107},[97,67076,54226],{"class":103},[97,67078,70],{"class":107},[97,67080,130],{"class":103},[97,67082,67083,67085,67087,67090,67092],{"class":99,"line":1845},[97,67084,51529],{"class":103},[97,67086,24],{"class":107},[97,67088,67089],{"class":103},">我不需要变色\u003C\u002F",[97,67091,24],{"class":107},[97,67093,130],{"class":103},[97,67095,67096,67098,67100],{"class":99,"line":1866},[97,67097,52601],{"class":103},[97,67099,67],{"class":107},[97,67101,130],{"class":103},[97,67103,67104,67106,67108],{"class":99,"line":1871},[97,67105,52328],{"class":103},[97,67107,51997],{"class":107},[97,67109,130],{"class":103},[97,67111,67112],{"class":99,"line":1885},[97,67113,67114],{"class":191},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[97,67116,67117,67119,67121,67123,67125,67127,67129,67132],{"class":99,"line":1890},[97,67118,11412],{"class":319},[97,67120,61476],{"class":370},[97,67122,13755],{"class":319},[97,67124,54580],{"class":103},[97,67126,54583],{"class":111},[97,67128,323],{"class":103},[97,67130,67131],{"class":118},"'ul'",[97,67133,329],{"class":103},[97,67135,67136,67139,67141,67143,67145,67147,67149,67151,67153],{"class":99,"line":1919},[97,67137,67138],{"class":103},"    ul.",[97,67140,57997],{"class":111},[97,67142,323],{"class":103},[97,67144,58002],{"class":118},[97,67146,12626],{"class":103},[97,67148,54633],{"class":319},[97,67150,1850],{"class":103},[97,67152,395],{"class":5407},[97,67154,12633],{"class":103},[97,67156,67157],{"class":99,"line":1924},[97,67158,67159],{"class":191},"      \u002F\u002F alert(1)\n",[97,67161,67162],{"class":99,"line":1941},[97,67163,67164],{"class":191},"      \u002F\u002F e.target就是我们点击的对象\n",[97,67166,67167],{"class":99,"line":1946},[97,67168,67169],{"class":191},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[97,67171,67172],{"class":99,"line":1951},[97,67173,67174],{"class":191},"      \u002F\u002F e.target.style.color = 'red'\n",[97,67176,67177,67179,67181],{"class":99,"line":1956},[97,67178,58428],{"class":103},[97,67180,58431],{"class":111},[97,67182,67183],{"class":103},"(e)\n",[97,67185,67186],{"class":99,"line":1970},[97,67187,2591],{"emptyLinePlaceholder":249},[97,67189,67190,67192,67195],{"class":99,"line":1975},[97,67191,58428],{"class":103},[97,67193,67194],{"class":111},"dir",[97,67196,67197],{"class":103},"(e.target)\n",[97,67199,67200],{"class":99,"line":2768},[97,67201,2591],{"emptyLinePlaceholder":249},[97,67203,67204],{"class":99,"line":2782},[97,67205,67206],{"class":191},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[97,67208,67209],{"class":99,"line":2790},[97,67210,67211],{"class":191},"      \u002F\u002F 通过tagName来进行判断\n",[97,67213,67214,67216,67219,67221,67224],{"class":99,"line":2795},[97,67215,54664],{"class":319},[97,67217,67218],{"class":103}," (e.target.tagName ",[97,67220,54670],{"class":319},[97,67222,67223],{"class":118}," 'LI'",[97,67225,12633],{"class":103},[97,67227,67228,67231,67233],{"class":99,"line":2801},[97,67229,67230],{"class":103},"        e.target.style.color ",[97,67232,115],{"class":319},[97,67234,67235],{"class":118}," 'red'\n",[97,67237,67238],{"class":99,"line":2807},[97,67239,52582],{"class":103},[97,67241,67242],{"class":99,"line":2812},[97,67243,33651],{"class":103},[97,67245,67246,67248,67250],{"class":99,"line":8139},[97,67247,52601],{"class":103},[97,67249,51997],{"class":107},[97,67251,130],{"class":103},[97,67253,67254,67256,67258],{"class":99,"line":8163},[97,67255,51969],{"class":103},[97,67257,51984],{"class":107},[97,67259,130],{"class":103},[97,67261,67262],{"class":99,"line":8168},[97,67263,2591],{"emptyLinePlaceholder":249},[97,67265,67266,67268,67270],{"class":99,"line":8174},[97,67267,51969],{"class":103},[97,67269,50825],{"class":107},[97,67271,130],{"class":103},[24,67273,67274],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[24,67276,67277],{},"if(e.target.ragName==='P') {}",[24,67279,67280],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[24,67282,67283],{},"通过事件委托的方式实现tab栏切换改造：",[24,67285,67286],{},"一定要记住自定义属性！！！！！！",[24,67288,67289],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[24,67291,67292],{},"id是自定义的属性名",[24,67294,67295],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[87,67297,67299],{"className":50823,"code":67298,"language":50825,"meta":92,"style":92},"\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",[94,67300,67301,67311,67325,67329,67337,67351,67371,67391,67403,67411,67417,67427,67437,67441,67445,67451,67463,67475,67487,67503,67507,67511,67517,67529,67541,67553,67563,67573,67577,67581,67589,67601,67611,67623,67627,67631,67639,67649,67659,67669,67673,67677,67687,67701,67713,67717,67721,67733,67743,67759,67769,67773,67777,67791,67801,67811,67815,67819,67825,67839,67843,67847,67855,67865,67869,67873,67882,67892,67896,67904,67912,67916,67924,67938,67952,67964,67972,68011,68043,68075,68107,68139,68147,68155,68169,68203,68237,68271,68305,68339,68347,68355,68363,68368,68373,68392,68397,68417,68425,68430,68443,68464,68477,68481,68486,68491,68504,68524,68552,68556,68560,68564,68572,68580,68584],{"__ignoreMap":92},[97,67302,67303,67305,67307,67309],{"class":99,"line":100},[97,67304,51487],{"class":103},[97,67306,51490],{"class":107},[97,67308,51493],{"class":111},[97,67310,130],{"class":103},[97,67312,67313,67315,67317,67319,67321,67323],{"class":99,"line":195},[97,67314,104],{"class":103},[97,67316,50825],{"class":107},[97,67318,51504],{"class":111},[97,67320,115],{"class":103},[97,67322,51509],{"class":118},[97,67324,130],{"class":103},[97,67326,67327],{"class":99,"line":241},[97,67328,2591],{"emptyLinePlaceholder":249},[97,67330,67331,67333,67335],{"class":99,"line":1387},[97,67332,104],{"class":103},[97,67334,51522],{"class":107},[97,67336,130],{"class":103},[97,67338,67339,67341,67343,67345,67347,67349],{"class":99,"line":1393},[97,67340,52328],{"class":103},[97,67342,108],{"class":107},[97,67344,51534],{"class":111},[97,67346,115],{"class":103},[97,67348,51539],{"class":118},[97,67350,59311],{"class":103},[97,67352,67353,67355,67357,67359,67361,67363,67365,67367,67369],{"class":99,"line":1407},[97,67354,52328],{"class":103},[97,67356,108],{"class":107},[97,67358,51550],{"class":111},[97,67360,115],{"class":103},[97,67362,51555],{"class":118},[97,67364,122],{"class":111},[97,67366,115],{"class":103},[97,67368,51562],{"class":118},[97,67370,59311],{"class":103},[97,67372,67373,67375,67377,67379,67381,67383,67385,67387,67389],{"class":99,"line":1413},[97,67374,52328],{"class":103},[97,67376,108],{"class":107},[97,67378,112],{"class":111},[97,67380,115],{"class":103},[97,67382,119],{"class":118},[97,67384,122],{"class":111},[97,67386,115],{"class":103},[97,67388,127],{"class":118},[97,67390,59311],{"class":103},[97,67392,67393,67395,67397,67399,67401],{"class":99,"line":1504},[97,67394,52328],{"class":103},[97,67396,51591],{"class":107},[97,67398,63809],{"class":103},[97,67400,51591],{"class":107},[97,67402,130],{"class":103},[97,67404,67405,67407,67409],{"class":99,"line":1510},[97,67406,52328],{"class":103},[97,67408,231],{"class":107},[97,67410,130],{"class":103},[97,67412,67413,67415],{"class":99,"line":1522},[97,67414,6594],{"class":107},[97,67416,15762],{"class":103},[97,67418,67419,67421,67423,67425],{"class":99,"line":1804},[97,67420,54890],{"class":370},[97,67422,51621],{"class":103},[97,67424,511],{"class":370},[97,67426,1483],{"class":103},[97,67428,67429,67431,67433,67435],{"class":99,"line":1809},[97,67430,54879],{"class":370},[97,67432,51621],{"class":103},[97,67434,511],{"class":370},[97,67436,1483],{"class":103},[97,67438,67439],{"class":99,"line":1815},[97,67440,2378],{"class":103},[97,67442,67443],{"class":99,"line":1820},[97,67444,2591],{"emptyLinePlaceholder":249},[97,67446,67447,67449],{"class":99,"line":1834},[97,67448,63860],{"class":111},[97,67450,15762],{"class":103},[97,67452,67453,67455,67457,67459,67461],{"class":99,"line":1839},[97,67454,54955],{"class":370},[97,67456,51621],{"class":103},[97,67458,63871],{"class":370},[97,67460,51676],{"class":319},[97,67462,1483],{"class":103},[97,67464,67465,67467,67469,67471,67473],{"class":99,"line":1845},[97,67466,54969],{"class":370},[97,67468,51621],{"class":103},[97,67470,63884],{"class":370},[97,67472,51676],{"class":319},[97,67474,1483],{"class":103},[97,67476,67477,67479,67481,67483,67485],{"class":99,"line":1866},[97,67478,54890],{"class":370},[97,67480,51621],{"class":103},[97,67482,1020],{"class":370},[97,67484,51676],{"class":319},[97,67486,1483],{"class":103},[97,67488,67489,67491,67493,67495,67497,67499,67501],{"class":99,"line":1871},[97,67490,62161],{"class":370},[97,67492,51621],{"class":103},[97,67494,537],{"class":370},[97,67496,51676],{"class":319},[97,67498,51705],{"class":370},[97,67500,62428],{"class":370},[97,67502,1483],{"class":103},[97,67504,67505],{"class":99,"line":1885},[97,67506,2378],{"class":103},[97,67508,67509],{"class":99,"line":1890},[97,67510,2591],{"emptyLinePlaceholder":249},[97,67512,67513,67515],{"class":99,"line":1919},[97,67514,63929],{"class":111},[97,67516,15762],{"class":103},[97,67518,67519,67521,67523,67525,67527],{"class":99,"line":1924},[97,67520,54955],{"class":370},[97,67522,51621],{"class":103},[97,67524,631],{"class":370},[97,67526,648],{"class":319},[97,67528,1483],{"class":103},[97,67530,67531,67533,67535,67537,67539],{"class":99,"line":1941},[97,67532,54969],{"class":370},[97,67534,51621],{"class":103},[97,67536,1227],{"class":370},[97,67538,51676],{"class":319},[97,67540,1483],{"class":103},[97,67542,67543,67545,67547,67549,67551],{"class":99,"line":1946},[97,67544,57543],{"class":370},[97,67546,51621],{"class":103},[97,67548,1227],{"class":370},[97,67550,51676],{"class":319},[97,67552,1483],{"class":103},[97,67554,67555,67557,67559,67561],{"class":99,"line":1951},[97,67556,55193],{"class":370},[97,67558,51621],{"class":103},[97,67560,51661],{"class":370},[97,67562,1483],{"class":103},[97,67564,67565,67567,67569,67571],{"class":99,"line":1956},[97,67566,55204],{"class":370},[97,67568,51621],{"class":103},[97,67570,51852],{"class":370},[97,67572,1483],{"class":103},[97,67574,67575],{"class":99,"line":1970},[97,67576,2378],{"class":103},[97,67578,67579],{"class":99,"line":1975},[97,67580,2591],{"emptyLinePlaceholder":249},[97,67582,67583,67585,67587],{"class":99,"line":2768},[97,67584,63929],{"class":111},[97,67586,64002],{"class":107},[97,67588,15762],{"class":103},[97,67590,67591,67593,67595,67597,67599],{"class":99,"line":2782},[97,67592,55106],{"class":370},[97,67594,51621],{"class":103},[97,67596,1120],{"class":370},[97,67598,51676],{"class":319},[97,67600,1483],{"class":103},[97,67602,67603,67605,67607,67609],{"class":99,"line":2790},[97,67604,62518],{"class":370},[97,67606,51621],{"class":103},[97,67608,64025],{"class":370},[97,67610,1483],{"class":103},[97,67612,67613,67615,67617,67619,67621],{"class":99,"line":2795},[97,67614,62184],{"class":370},[97,67616,51621],{"class":103},[97,67618,1020],{"class":370},[97,67620,51676],{"class":319},[97,67622,1483],{"class":103},[97,67624,67625],{"class":99,"line":2801},[97,67626,2378],{"class":103},[97,67628,67629],{"class":99,"line":2807},[97,67630,2591],{"emptyLinePlaceholder":249},[97,67632,67633,67635,67637],{"class":99,"line":2812},[97,67634,63929],{"class":111},[97,67636,61476],{"class":107},[97,67638,15762],{"class":103},[97,67640,67641,67643,67645,67647],{"class":99,"line":8139},[97,67642,54916],{"class":370},[97,67644,51621],{"class":103},[97,67646,54921],{"class":370},[97,67648,1483],{"class":103},[97,67650,67651,67653,67655,67657],{"class":99,"line":8163},[97,67652,55193],{"class":370},[97,67654,51621],{"class":103},[97,67656,51661],{"class":370},[97,67658,1483],{"class":103},[97,67660,67661,67663,67665,67667],{"class":99,"line":8168},[97,67662,55204],{"class":370},[97,67664,51621],{"class":103},[97,67666,51764],{"class":370},[97,67668,1483],{"class":103},[97,67670,67671],{"class":99,"line":8174},[97,67672,2378],{"class":103},[97,67674,67675],{"class":99,"line":8201},[97,67676,2591],{"emptyLinePlaceholder":249},[97,67678,67679,67681,67683,67685],{"class":99,"line":8206},[97,67680,63929],{"class":111},[97,67682,61476],{"class":107},[97,67684,55259],{"class":107},[97,67686,15762],{"class":103},[97,67688,67689,67691,67693,67695,67697,67699],{"class":99,"line":8212},[97,67690,54890],{"class":370},[97,67692,51621],{"class":103},[97,67694,511],{"class":370},[97,67696,9141],{"class":370},[97,67698,51676],{"class":319},[97,67700,1483],{"class":103},[97,67702,67703,67705,67707,67709,67711],{"class":99,"line":8224},[97,67704,55106],{"class":370},[97,67706,51621],{"class":103},[97,67708,869],{"class":370},[97,67710,51676],{"class":319},[97,67712,1483],{"class":103},[97,67714,67715],{"class":99,"line":8236},[97,67716,2378],{"class":103},[97,67718,67719],{"class":99,"line":8248},[97,67720,2591],{"emptyLinePlaceholder":249},[97,67722,67723,67725,67727,67729,67731],{"class":99,"line":9907},[97,67724,63929],{"class":111},[97,67726,61476],{"class":107},[97,67728,55259],{"class":107},[97,67730,1591],{"class":107},[97,67732,15762],{"class":103},[97,67734,67735,67737,67739,67741],{"class":99,"line":9932},[97,67736,64154],{"class":370},[97,67738,51621],{"class":103},[97,67740,54921],{"class":370},[97,67742,1483],{"class":103},[97,67744,67745,67747,67749,67751,67753,67755,67757],{"class":99,"line":9955},[97,67746,62416],{"class":370},[97,67748,51621],{"class":103},[97,67750,398],{"class":370},[97,67752,51676],{"class":319},[97,67754,51705],{"class":370},[97,67756,64175],{"class":370},[97,67758,1483],{"class":103},[97,67760,67761,67763,67765,67767],{"class":99,"line":9979},[97,67762,57600],{"class":370},[97,67764,51621],{"class":103},[97,67766,62553],{"class":370},[97,67768,1483],{"class":103},[97,67770,67771],{"class":99,"line":9984},[97,67772,2378],{"class":103},[97,67774,67775],{"class":99,"line":9989},[97,67776,2591],{"emptyLinePlaceholder":249},[97,67778,67779,67781,67783,67785,67787,67789],{"class":99,"line":9994},[97,67780,63929],{"class":111},[97,67782,61476],{"class":107},[97,67784,55259],{"class":107},[97,67786,1591],{"class":107},[97,67788,64208],{"class":111},[97,67790,15762],{"class":103},[97,67792,67793,67795,67797,67799],{"class":99,"line":10003},[97,67794,61975],{"class":370},[97,67796,51621],{"class":103},[97,67798,64219],{"class":370},[97,67800,1483],{"class":103},[97,67802,67803,67805,67807,67809],{"class":99,"line":10008},[97,67804,57600],{"class":370},[97,67806,51621],{"class":103},[97,67808,64219],{"class":370},[97,67810,1483],{"class":103},[97,67812,67813],{"class":99,"line":10014},[97,67814,2378],{"class":103},[97,67816,67817],{"class":99,"line":10035},[97,67818,2591],{"emptyLinePlaceholder":249},[97,67820,67821,67823],{"class":99,"line":10041},[97,67822,64244],{"class":111},[97,67824,15762],{"class":103},[97,67826,67827,67829,67831,67833,67835,67837],{"class":99,"line":10055},[97,67828,54879],{"class":370},[97,67830,51621],{"class":103},[97,67832,511],{"class":370},[97,67834,64257],{"class":370},[97,67836,51676],{"class":319},[97,67838,1483],{"class":103},[97,67840,67841],{"class":99,"line":10061},[97,67842,2378],{"class":103},[97,67844,67845],{"class":99,"line":10088},[97,67846,2591],{"emptyLinePlaceholder":249},[97,67848,67849,67851,67853],{"class":99,"line":10097},[97,67850,64244],{"class":111},[97,67852,62358],{"class":111},[97,67854,15762],{"class":103},[97,67856,67857,67859,67861,67863],{"class":99,"line":10103},[97,67858,55193],{"class":370},[97,67860,51621],{"class":103},[97,67862,54921],{"class":370},[97,67864,1483],{"class":103},[97,67866,67867],{"class":99,"line":10111},[97,67868,2378],{"class":103},[97,67870,67871],{"class":99,"line":10116},[97,67872,2591],{"emptyLinePlaceholder":249},[97,67874,67875,67877,67880],{"class":99,"line":16794},[97,67876,64244],{"class":111},[97,67878,67879],{"class":111}," .active",[97,67881,15762],{"class":103},[97,67883,67884,67886,67888,67890],{"class":99,"line":16800},[97,67885,55193],{"class":370},[97,67887,51621],{"class":103},[97,67889,61053],{"class":370},[97,67891,1483],{"class":103},[97,67893,67894],{"class":99,"line":16823},[97,67895,2378],{"class":103},[97,67897,67898,67900,67902],{"class":99,"line":16829},[97,67899,52601],{"class":103},[97,67901,231],{"class":107},[97,67903,130],{"class":103},[97,67905,67906,67908,67910],{"class":99,"line":16852},[97,67907,51969],{"class":103},[97,67909,51522],{"class":107},[97,67911,130],{"class":103},[97,67913,67914],{"class":99,"line":16866},[97,67915,2591],{"emptyLinePlaceholder":249},[97,67917,67918,67920,67922],{"class":99,"line":16886},[97,67919,104],{"class":103},[97,67921,51984],{"class":107},[97,67923,130],{"class":103},[97,67925,67926,67928,67930,67932,67934,67936],{"class":99,"line":16892},[97,67927,52328],{"class":103},[97,67929,51795],{"class":107},[97,67931,53670],{"class":111},[97,67933,115],{"class":103},[97,67935,64359],{"class":118},[97,67937,130],{"class":103},[97,67939,67940,67942,67944,67946,67948,67950],{"class":99,"line":16903},[97,67941,51529],{"class":103},[97,67943,51795],{"class":107},[97,67945,53670],{"class":111},[97,67947,115],{"class":103},[97,67949,64374],{"class":118},[97,67951,130],{"class":103},[97,67953,67954,67956,67958,67960,67962],{"class":99,"line":16926},[97,67955,55418],{"class":103},[97,67957,48],{"class":107},[97,67959,64385],{"class":103},[97,67961,48],{"class":107},[97,67963,130],{"class":103},[97,67965,67966,67968,67970],{"class":99,"line":16948},[97,67967,55418],{"class":103},[97,67969,67],{"class":107},[97,67971,130],{"class":103},[97,67973,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996,67998,68001,68003,68005,68007,68009],{"class":99,"line":16953},[97,67975,55486],{"class":103},[97,67977,70],{"class":107},[97,67979,61236],{"class":103},[97,67981,558],{"class":107},[97,67983,53670],{"class":111},[97,67985,115],{"class":103},[97,67987,59890],{"class":118},[97,67989,61241],{"class":111},[97,67991,115],{"class":103},[97,67993,64420],{"class":118},[97,67995,54135],{"class":111},[97,67997,115],{"class":103},[97,67999,68000],{"class":118},"\"0\"",[97,68002,64423],{"class":103},[97,68004,558],{"class":107},[97,68006,55498],{"class":103},[97,68008,70],{"class":107},[97,68010,130],{"class":103},[97,68012,68013,68015,68017,68019,68021,68023,68025,68027,68029,68031,68033,68035,68037,68039,68041],{"class":99,"line":16959},[97,68014,55486],{"class":103},[97,68016,70],{"class":107},[97,68018,61236],{"class":103},[97,68020,558],{"class":107},[97,68022,61241],{"class":111},[97,68024,115],{"class":103},[97,68026,64420],{"class":118},[97,68028,54135],{"class":111},[97,68030,115],{"class":103},[97,68032,3869],{"class":118},[97,68034,64450],{"class":103},[97,68036,558],{"class":107},[97,68038,55498],{"class":103},[97,68040,70],{"class":107},[97,68042,130],{"class":103},[97,68044,68045,68047,68049,68051,68053,68055,68057,68059,68061,68063,68065,68067,68069,68071,68073],{"class":99,"line":16973},[97,68046,55486],{"class":103},[97,68048,70],{"class":107},[97,68050,61236],{"class":103},[97,68052,558],{"class":107},[97,68054,61241],{"class":111},[97,68056,115],{"class":103},[97,68058,64420],{"class":118},[97,68060,54135],{"class":111},[97,68062,115],{"class":103},[97,68064,3892],{"class":118},[97,68066,64477],{"class":103},[97,68068,558],{"class":107},[97,68070,55498],{"class":103},[97,68072,70],{"class":107},[97,68074,130],{"class":103},[97,68076,68077,68079,68081,68083,68085,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105],{"class":99,"line":16986},[97,68078,55486],{"class":103},[97,68080,70],{"class":107},[97,68082,61236],{"class":103},[97,68084,558],{"class":107},[97,68086,61241],{"class":111},[97,68088,115],{"class":103},[97,68090,64420],{"class":118},[97,68092,54135],{"class":111},[97,68094,115],{"class":103},[97,68096,3905],{"class":118},[97,68098,64504],{"class":103},[97,68100,558],{"class":107},[97,68102,55498],{"class":103},[97,68104,70],{"class":107},[97,68106,130],{"class":103},[97,68108,68109,68111,68113,68115,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135,68137],{"class":99,"line":16991},[97,68110,55486],{"class":103},[97,68112,70],{"class":107},[97,68114,61236],{"class":103},[97,68116,558],{"class":107},[97,68118,61241],{"class":111},[97,68120,115],{"class":103},[97,68122,64420],{"class":118},[97,68124,54135],{"class":111},[97,68126,115],{"class":103},[97,68128,3918],{"class":118},[97,68130,64531],{"class":103},[97,68132,558],{"class":107},[97,68134,55498],{"class":103},[97,68136,70],{"class":107},[97,68138,130],{"class":103},[97,68140,68141,68143,68145],{"class":99,"line":17005},[97,68142,55591],{"class":103},[97,68144,67],{"class":107},[97,68146,130],{"class":103},[97,68148,68149,68151,68153],{"class":99,"line":17010},[97,68150,51960],{"class":103},[97,68152,51795],{"class":107},[97,68154,130],{"class":103},[97,68156,68157,68159,68161,68163,68165,68167],{"class":99,"line":17016},[97,68158,51529],{"class":103},[97,68160,51795],{"class":107},[97,68162,53670],{"class":111},[97,68164,115],{"class":103},[97,68166,64568],{"class":118},[97,68168,130],{"class":103},[97,68170,68171,68173,68175,68177,68179,68181,68183,68185,68187,68189,68191,68193,68195,68197,68199,68201],{"class":99,"line":17021},[97,68172,55418],{"class":103},[97,68174,51795],{"class":107},[97,68176,53670],{"class":111},[97,68178,115],{"class":103},[97,68180,64583],{"class":118},[97,68182,61236],{"class":103},[97,68184,19],{"class":107},[97,68186,55423],{"class":111},[97,68188,115],{"class":103},[97,68190,64594],{"class":118},[97,68192,55431],{"class":111},[97,68194,115],{"class":103},[97,68196,7843],{"class":118},[97,68198,64603],{"class":103},[97,68200,51795],{"class":107},[97,68202,130],{"class":103},[97,68204,68205,68207,68209,68211,68213,68215,68217,68219,68221,68223,68225,68227,68229,68231,68233,68235],{"class":99,"line":17035},[97,68206,55418],{"class":103},[97,68208,51795],{"class":107},[97,68210,53670],{"class":111},[97,68212,115],{"class":103},[97,68214,62807],{"class":118},[97,68216,61236],{"class":103},[97,68218,19],{"class":107},[97,68220,55423],{"class":111},[97,68222,115],{"class":103},[97,68224,64630],{"class":118},[97,68226,55431],{"class":111},[97,68228,115],{"class":103},[97,68230,7843],{"class":118},[97,68232,64603],{"class":103},[97,68234,51795],{"class":107},[97,68236,130],{"class":103},[97,68238,68239,68241,68243,68245,68247,68249,68251,68253,68255,68257,68259,68261,68263,68265,68267,68269],{"class":99,"line":17040},[97,68240,55418],{"class":103},[97,68242,51795],{"class":107},[97,68244,53670],{"class":111},[97,68246,115],{"class":103},[97,68248,62807],{"class":118},[97,68250,61236],{"class":103},[97,68252,19],{"class":107},[97,68254,55423],{"class":111},[97,68256,115],{"class":103},[97,68258,64665],{"class":118},[97,68260,55431],{"class":111},[97,68262,115],{"class":103},[97,68264,7843],{"class":118},[97,68266,64603],{"class":103},[97,68268,51795],{"class":107},[97,68270,130],{"class":103},[97,68272,68273,68275,68277,68279,68281,68283,68285,68287,68289,68291,68293,68295,68297,68299,68301,68303],{"class":99,"line":17045},[97,68274,55418],{"class":103},[97,68276,51795],{"class":107},[97,68278,53670],{"class":111},[97,68280,115],{"class":103},[97,68282,62807],{"class":118},[97,68284,61236],{"class":103},[97,68286,19],{"class":107},[97,68288,55423],{"class":111},[97,68290,115],{"class":103},[97,68292,64700],{"class":118},[97,68294,55431],{"class":111},[97,68296,115],{"class":103},[97,68298,7843],{"class":118},[97,68300,64603],{"class":103},[97,68302,51795],{"class":107},[97,68304,130],{"class":103},[97,68306,68307,68309,68311,68313,68315,68317,68319,68321,68323,68325,68327,68329,68331,68333,68335,68337],{"class":99,"line":17059},[97,68308,55418],{"class":103},[97,68310,51795],{"class":107},[97,68312,53670],{"class":111},[97,68314,115],{"class":103},[97,68316,62807],{"class":118},[97,68318,61236],{"class":103},[97,68320,19],{"class":107},[97,68322,55423],{"class":111},[97,68324,115],{"class":103},[97,68326,64735],{"class":118},[97,68328,55431],{"class":111},[97,68330,115],{"class":103},[97,68332,7843],{"class":118},[97,68334,64603],{"class":103},[97,68336,51795],{"class":107},[97,68338,130],{"class":103},[97,68340,68341,68343,68345],{"class":99,"line":17071},[97,68342,51960],{"class":103},[97,68344,51795],{"class":107},[97,68346,130],{"class":103},[97,68348,68349,68351,68353],{"class":99,"line":17076},[97,68350,52601],{"class":103},[97,68352,51795],{"class":107},[97,68354,130],{"class":103},[97,68356,68357,68359,68361],{"class":99,"line":17089},[97,68358,52328],{"class":103},[97,68360,51997],{"class":107},[97,68362,130],{"class":103},[97,68364,68365],{"class":99,"line":17094},[97,68366,68367],{"class":191},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[97,68369,68370],{"class":99,"line":17099},[97,68371,68372],{"class":191},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[97,68374,68375,68377,68379,68381,68383,68385,68387,68390],{"class":99,"line":17104},[97,68376,11412],{"class":319},[97,68378,61476],{"class":370},[97,68380,13755],{"class":319},[97,68382,54580],{"class":103},[97,68384,54583],{"class":111},[97,68386,323],{"class":103},[97,68388,68389],{"class":118},"'.tab-nav ul'",[97,68391,329],{"class":103},[97,68393,68394],{"class":99,"line":17117},[97,68395,68396],{"class":191},"    \u002F\u002F 2.添加事件\n",[97,68398,68399,68401,68403,68405,68407,68409,68411,68413,68415],{"class":99,"line":17122},[97,68400,67138],{"class":103},[97,68402,57997],{"class":111},[97,68404,323],{"class":103},[97,68406,58002],{"class":118},[97,68408,12626],{"class":103},[97,68410,54633],{"class":319},[97,68412,1850],{"class":103},[97,68414,395],{"class":5407},[97,68416,12633],{"class":103},[97,68418,68419,68421,68423],{"class":99,"line":32823},[97,68420,58428],{"class":103},[97,68422,67194],{"class":111},[97,68424,67197],{"class":103},[97,68426,68427],{"class":99,"line":32829},[97,68428,68429],{"class":191},"      \u002F\u002Fe.targer是我们点击的对象\n",[97,68431,68432,68434,68436,68438,68441],{"class":99,"line":32835},[97,68433,54664],{"class":319},[97,68435,67218],{"class":103},[97,68437,54670],{"class":319},[97,68439,68440],{"class":118}," 'A'",[97,68442,12633],{"class":103},[97,68444,68445,68447,68449,68451,68454,68456,68458,68460,68462],{"class":99,"line":32841},[97,68446,52109],{"class":103},[97,68448,54583],{"class":111},[97,68450,323],{"class":103},[97,68452,68453],{"class":118},"'.active'",[97,68455,57187],{"class":103},[97,68457,57190],{"class":111},[97,68459,323],{"class":103},[97,68461,64898],{"class":118},[97,68463,329],{"class":103},[97,68465,68466,68469,68471,68473,68475],{"class":99,"line":32847},[97,68467,68468],{"class":103},"        e.target.classList.",[97,68470,5525],{"class":111},[97,68472,323],{"class":103},[97,68474,64898],{"class":118},[97,68476,329],{"class":103},[97,68478,68479],{"class":99,"line":32858},[97,68480,2591],{"emptyLinePlaceholder":249},[97,68482,68483],{"class":99,"line":32864},[97,68484,68485],{"class":191},"        \u002F\u002F 下面大盒子模块\n",[97,68487,68488],{"class":99,"line":32884},[97,68489,68490],{"class":191},"        \u002F\u002F console.log(e.target.dataset.id)\n",[97,68492,68493,68495,68497,68499,68501],{"class":99,"line":32890},[97,68494,61454],{"class":319},[97,68496,3223],{"class":370},[97,68498,13755],{"class":319},[97,68500,45756],{"class":319},[97,68502,68503],{"class":103},"e.target.dataset.id\n",[97,68505,68506,68508,68510,68512,68514,68516,68518,68520,68522],{"class":99,"line":32901},[97,68507,52109],{"class":103},[97,68509,54583],{"class":111},[97,68511,323],{"class":103},[97,68513,64946],{"class":118},[97,68515,57187],{"class":103},[97,68517,57190],{"class":111},[97,68519,323],{"class":103},[97,68521,64898],{"class":118},[97,68523,329],{"class":103},[97,68525,68526,68528,68530,68532,68534,68536,68538,68540,68542,68544,68546,68548,68550],{"class":99,"line":32907},[97,68527,52109],{"class":103},[97,68529,54583],{"class":111},[97,68531,323],{"class":103},[97,68533,64972],{"class":118},[97,68535,761],{"class":103},[97,68537,45756],{"class":319},[97,68539,25308],{"class":370},[97,68541,57216],{"class":118},[97,68543,57187],{"class":103},[97,68545,5525],{"class":111},[97,68547,323],{"class":103},[97,68549,64898],{"class":118},[97,68551,329],{"class":103},[97,68553,68554],{"class":99,"line":32913},[97,68555,2591],{"emptyLinePlaceholder":249},[97,68557,68558],{"class":99,"line":32919},[97,68559,52582],{"class":103},[97,68561,68562],{"class":99,"line":32925},[97,68563,33651],{"class":103},[97,68565,68566,68568,68570],{"class":99,"line":32931},[97,68567,52601],{"class":103},[97,68569,51997],{"class":107},[97,68571,130],{"class":103},[97,68573,68574,68576,68578],{"class":99,"line":32937},[97,68575,51969],{"class":103},[97,68577,51984],{"class":107},[97,68579,130],{"class":103},[97,68581,68582],{"class":99,"line":32943},[97,68583,2591],{"emptyLinePlaceholder":249},[97,68585,68586,68588,68590],{"class":99,"line":32963},[97,68587,51969],{"class":103},[97,68589,50825],{"class":107},[97,68591,130],{"class":103},[48,68593,68595],{"id":68594},"_333-页面加载事件","3.3.3 页面加载事件",[138,68597,68598],{},[70,68599,68600],{},"load",[24,68602,68603],{},[19,68604],{"alt":92,"src":68605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[24,68607,68608],{},"window代表整个窗口，比document还要大",[24,68610,68611],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[24,68613,68614],{},"img.addEventListener('load', function () {",[24,68616,68617],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[24,68619,52648],{},[138,68621,68622],{"start":195},[70,68623,68624],{},"DOMContentLoaded",[24,68626,68627],{},[19,68628],{"alt":92,"src":68629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[24,68631,68632],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[48,68634,68636],{"id":68635},"_334-元素滚动事件","3.3.4 元素滚动事件",[24,68638,68639],{},[19,68640],{"alt":92,"src":68641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[24,68643,68644],{},[19,68645],{"alt":92,"src":68646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[24,68648,68649],{},[19,68650],{"alt":92,"src":68651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[24,68653,68654],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[24,68656,68657],{},"获得的是数字型数据，不带单位",[24,68659,68660],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[24,68662,68663],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[24,68665,68666],{},"它是通过document.documentElement来获取",[24,68668,68669],{},[19,68670],{"alt":92,"src":68671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[24,68673,68674],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[48,68676,68678],{"id":68677},"_335-页面缩放事件","3.3.5 页面缩放事件",[24,68680,68681],{},[19,68682],{"alt":92,"src":68683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[24,68685,68686],{},[19,68687],{"alt":92,"src":68688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[48,68690,68692],{"id":68691},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[24,68694,68695],{},[19,68696],{"alt":92,"src":68697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[24,68699,68700],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[24,68702,68703],{},[19,68704],{"alt":92,"src":68705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[24,68707,68708],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[24,68710,68711],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[24,68713,68714],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[24,68716,68717],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[24,68719,68720],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[24,68722,68723],{},[19,68724],{"alt":92,"src":68725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[24,68727,68728],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[24,68730,68731],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[24,68733,68734],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[24,68736,68737],{},"e.pageX-box.getBoundingClientRect()",[48,68739,68741],{"id":68740},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[24,68743,68744],{},[19,68745],{"alt":92,"src":68746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[24,68748,68749],{},"这个是相对于视口来说的，它是个方法，不是属性值",[48,68751,68753],{"id":68752},"_338-总结","3.3.8 总结",[24,68755,68756],{},[19,68757],{"alt":92,"src":68758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[24,68760,68761],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[24,68763,68764],{},"修改盒子的宽高只能通过width和height来实现",[48,68766,68768],{"id":68767},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[87,68770,68772],{"className":50823,"code":68771,"language":50825,"meta":92,"style":92},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[94,68773,68774,68779,68784,68789,68794],{"__ignoreMap":92},[97,68775,68776],{"class":99,"line":100},[97,68777,68778],{"class":103},"\u002F* 页面滑动 *\u002F\n",[97,68780,68781],{"class":99,"line":195},[97,68782,68783],{"class":103},"html {\n",[97,68785,68786],{"class":99,"line":241},[97,68787,68788],{"class":103},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[97,68790,68791],{"class":99,"line":1387},[97,68792,68793],{"class":103},"  scroll-behavior: smooth;\n",[97,68795,68796],{"class":99,"line":1393},[97,68797,1757],{"class":103},[24,68799,68800],{},"默认是auto",[48,68802,68804],{"id":68803},"_3310-日期对象","3.3.10 日期对象",[160,68806,68808],{"id":68807},"_33101-实例化","3.3.10.1 实例化",[24,68810,68811],{},[19,68812],{"alt":92,"src":68813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[160,68815,68817],{"id":68816},"_33102-时期对象方法","3.3.10.2 时期对象方法",[24,68819,68820],{},[19,68821],{"alt":92,"src":68822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[24,68824,68825],{},"月份+1",[24,68827,68828],{},"老外认为第一天为0，星期天",[24,68830,68831],{},"方法使用的时候必须要跟括号",[24,68833,68834],{},"快速获得日期",[24,68836,68837],{},"\u002F\u002F 得到年月日",[24,68839,68840],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[24,68842,68843],{},"\u002F\u002F 得到当地日期",[24,68845,68846],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[24,68848,68849],{},"\u002F\u002F 得到当地时间",[24,68851,68852],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[24,68854,68855],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[24,68857,68858],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51997,68860,68861],{},"\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",[24,68863,68864],{},"学会去封装函数！",[160,68866,68868],{"id":68867},"_33103-时间戳","3.3.10.3 时间戳",[24,68870,68871],{},[19,68872],{"alt":92,"src":68873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[24,68875,68876],{},[19,68877],{"alt":92,"src":68878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[24,68880,68881],{},"三种方法记住一个就可以",[48,68883,68885],{"id":68884},"_3311-节点操作","3.3.11 节点操作",[160,68887,68889],{"id":68888},"_33111-dom节点","3.3.11.1 DOM节点",[24,68891,68892],{},[19,68893],{"alt":92,"src":68894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[24,68896,68897],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[160,68899,68901],{"id":68900},"_33112-查找节点","3.3.11.2 查找节点",[24,68903,68904],{},"前边的document.querySelector()是获取的元素",[24,68906,68907],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[24,68909,68910],{},[19,68911],{"alt":92,"src":68912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[138,68914,68915],{},[70,68916,68917],{},"父节点",[24,68919,68920],{},[19,68921],{"alt":92,"src":68922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[138,68924,68925],{"start":195},[70,68926,68927],{},"子节点",[24,68929,68930],{},[19,68931],{"alt":92,"src":68932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[24,68934,68935],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[24,68937,68938],{},"children获得的是伪数组，是亲儿子",[138,68940,68941],{"start":241},[70,68942,68943],{},"兄弟节点",[24,68945,68946],{},[19,68947],{"alt":92,"src":68948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[160,68950,68952],{"id":68951},"_33113-增加节点","3.3.11.3 增加节点",[24,68954,68955],{},[19,68956],{"alt":92,"src":68957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[24,68959,68960],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[24,68962,68963],{},[19,68964],{"alt":92,"src":68965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[24,68967,68968],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[24,68970,68971],{},"下面是写法的部分展示，就按照下边的格式来写",[24,68973,68974],{},"例：",[51997,68976,68977],{},"\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",[24,68979,68980],{},[19,68981],{"alt":92,"src":68982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[24,68984,68985],{},"false只克隆标签，里边的内容不会克隆过来",[87,68987,68989],{"className":50823,"code":68988,"language":50825,"meta":92,"style":92},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[94,68990,68991],{"__ignoreMap":92},[97,68992,68993],{"class":99,"line":100},[97,68994,68988],{"class":103},[160,68996,68998],{"id":68997},"_33114-删除节点","3.3.11.4 删除节点",[24,69000,69001],{},[19,69002],{"alt":92,"src":69003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[24,69005,69006],{},"父亲删儿子",[24,69008,69009],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[48,69011,69013],{"id":69012},"_3312-m端事件","3.3.12 M端事件",[24,69015,69016],{},"M端就是移动端",[24,69018,69019],{},[19,69020],{"alt":92,"src":69021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[48,69023,69025],{"id":69024},"_3313-插件","3.3.13 插件",[24,69027,69028],{},"要熟悉官网！！！",[24,69030,69031],{},[558,69032,69033],{"href":69033,"rel":69034},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24054],[24,69036,69037],{},[558,69038,69039],{"href":69039,"rel":69040},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24054],[48,69042,69044],{"id":69043},"_3314-学生信息表","3.3.14 学生信息表",[138,69046,69047,69050,69053,69056,69059,69062,69065,69068],{},[70,69048,69049],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[70,69051,69052],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[70,69054,69055],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[70,69057,69058],{},"用好表单元素自带的属性，value,name等",[70,69060,69061],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[70,69063,69064],{},"不要忘记事件对象",[70,69066,69067],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[70,69069,69070],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[24,69072,69073],{},"结构：",[87,69075,69077],{"className":50823,"code":69076,"language":50825,"meta":92,"style":92},"\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",[94,69078,69079,69089,69103,69107,69115,69129,69149,69170,69183,69207,69215,69219,69227,69240,69261,69289,69317,69322,69344,69364,69383,69391,69419,69441,69461,69481,69501,69521,69541,69549,69569,69577,69581,69594,69602,69610,69618,69631,69644,69657,69670,69683,69696,69709,69717,69725,69733,69738,69743,69748,69753,69758,69763,69768,69773,69778,69783,69788,69793,69798,69806,69814,69822,69826,69846,69865,69885,69905,69925,69945,69949,69954,69974,69979,69989,69994,69999,70019,70041,70046,70056,70060,70064,70069,70074,70103,70117,70132,70136,70140,70144,70149,70160,70173,70178,70183,70188,70193,70198,70202,70207,70212,70221,70226,70231,70243,70248,70255,70259,70264,70274,70279,70289,70294,70322,70343,70353,70373,70391,70408,70425,70442,70459,70463,70473,70478,70483,70488,70499,70503,70507,70511,70516,70521,70542,70554,70559,70564,70569,70583,70588,70595,70599,70603,70611,70615,70623,70627],{"__ignoreMap":92},[97,69080,69081,69083,69085,69087],{"class":99,"line":100},[97,69082,51487],{"class":103},[97,69084,51490],{"class":107},[97,69086,51493],{"class":111},[97,69088,130],{"class":103},[97,69090,69091,69093,69095,69097,69099,69101],{"class":99,"line":195},[97,69092,104],{"class":103},[97,69094,50825],{"class":107},[97,69096,51504],{"class":111},[97,69098,115],{"class":103},[97,69100,51509],{"class":118},[97,69102,130],{"class":103},[97,69104,69105],{"class":99,"line":241},[97,69106,2591],{"emptyLinePlaceholder":249},[97,69108,69109,69111,69113],{"class":99,"line":1387},[97,69110,104],{"class":103},[97,69112,51522],{"class":107},[97,69114,130],{"class":103},[97,69116,69117,69119,69121,69123,69125,69127],{"class":99,"line":1393},[97,69118,52328],{"class":103},[97,69120,108],{"class":107},[97,69122,51534],{"class":111},[97,69124,115],{"class":103},[97,69126,51539],{"class":118},[97,69128,59311],{"class":103},[97,69130,69131,69133,69135,69137,69139,69141,69143,69145,69147],{"class":99,"line":1407},[97,69132,52328],{"class":103},[97,69134,108],{"class":107},[97,69136,112],{"class":111},[97,69138,115],{"class":103},[97,69140,119],{"class":118},[97,69142,122],{"class":111},[97,69144,115],{"class":103},[97,69146,127],{"class":118},[97,69148,59311],{"class":103},[97,69150,69151,69153,69155,69157,69159,69161,69163,69165,69168],{"class":99,"line":1413},[97,69152,52328],{"class":103},[97,69154,108],{"class":107},[97,69156,51550],{"class":111},[97,69158,115],{"class":103},[97,69160,51555],{"class":118},[97,69162,122],{"class":111},[97,69164,115],{"class":103},[97,69166,69167],{"class":118},"\"ie=edge\"",[97,69169,59311],{"class":103},[97,69171,69172,69174,69176,69179,69181],{"class":99,"line":1504},[97,69173,52328],{"class":103},[97,69175,51591],{"class":107},[97,69177,69178],{"class":103},">学生信息管理\u003C\u002F",[97,69180,51591],{"class":107},[97,69182,130],{"class":103},[97,69184,69185,69187,69190,69193,69195,69198,69200,69202,69205],{"class":99,"line":1510},[97,69186,52328],{"class":103},[97,69188,69189],{"class":107},"link",[97,69191,69192],{"class":111}," rel",[97,69194,115],{"class":103},[97,69196,69197],{"class":118},"\"stylesheet\"",[97,69199,61241],{"class":111},[97,69201,115],{"class":103},[97,69203,69204],{"class":118},"\"css\u002Findex.css\"",[97,69206,59311],{"class":103},[97,69208,69209,69211,69213],{"class":99,"line":1522},[97,69210,51969],{"class":103},[97,69212,51522],{"class":107},[97,69214,130],{"class":103},[97,69216,69217],{"class":99,"line":1804},[97,69218,2591],{"emptyLinePlaceholder":249},[97,69220,69221,69223,69225],{"class":99,"line":1809},[97,69222,104],{"class":103},[97,69224,51984],{"class":107},[97,69226,130],{"class":103},[97,69228,69229,69231,69233,69236,69238],{"class":99,"line":1815},[97,69230,52328],{"class":103},[97,69232,10],{"class":107},[97,69234,69235],{"class":103},">新增学员\u003C\u002F",[97,69237,10],{"class":107},[97,69239,130],{"class":103},[97,69241,69242,69244,69246,69248,69250,69252,69255,69257,69259],{"class":99,"line":1820},[97,69243,52328],{"class":103},[97,69245,66809],{"class":107},[97,69247,53670],{"class":111},[97,69249,115],{"class":103},[97,69251,62848],{"class":118},[97,69253,69254],{"class":111}," autocomplete",[97,69256,115],{"class":103},[97,69258,31966],{"class":118},[97,69260,130],{"class":103},[97,69262,69263,69266,69268,69270,69272,69274,69276,69278,69281,69283,69285,69287],{"class":99,"line":1834},[97,69264,69265],{"class":103},"    姓名：\u003C",[97,69267,54005],{"class":107},[97,69269,54008],{"class":111},[97,69271,115],{"class":103},[97,69273,62883],{"class":118},[97,69275,53670],{"class":111},[97,69277,115],{"class":103},[97,69279,69280],{"class":118},"\"uname\"",[97,69282,112],{"class":111},[97,69284,115],{"class":103},[97,69286,69280],{"class":118},[97,69288,59311],{"class":103},[97,69290,69291,69294,69296,69298,69300,69302,69304,69306,69309,69311,69313,69315],{"class":99,"line":1839},[97,69292,69293],{"class":103},"    年龄：\u003C",[97,69295,54005],{"class":107},[97,69297,54008],{"class":111},[97,69299,115],{"class":103},[97,69301,62883],{"class":118},[97,69303,53670],{"class":111},[97,69305,115],{"class":103},[97,69307,69308],{"class":118},"\"age\"",[97,69310,112],{"class":111},[97,69312,115],{"class":103},[97,69314,69308],{"class":118},[97,69316,59311],{"class":103},[97,69318,69319],{"class":99,"line":1845},[97,69320,69321],{"class":103},"    性别:\n",[97,69323,69324,69326,69329,69331,69333,69336,69338,69340,69342],{"class":99,"line":1866},[97,69325,51529],{"class":103},[97,69327,69328],{"class":107},"select",[97,69330,112],{"class":111},[97,69332,115],{"class":103},[97,69334,69335],{"class":118},"\"gender\"",[97,69337,53670],{"class":111},[97,69339,115],{"class":103},[97,69341,69335],{"class":118},[97,69343,130],{"class":103},[97,69345,69346,69348,69351,69353,69355,69357,69360,69362],{"class":99,"line":1871},[97,69347,55418],{"class":103},[97,69349,69350],{"class":107},"option",[97,69352,66835],{"class":111},[97,69354,115],{"class":103},[97,69356,10152],{"class":118},[97,69358,69359],{"class":103},">男\u003C\u002F",[97,69361,69350],{"class":107},[97,69363,130],{"class":103},[97,69365,69366,69368,69370,69372,69374,69376,69379,69381],{"class":99,"line":1885},[97,69367,55418],{"class":103},[97,69369,69350],{"class":107},[97,69371,66835],{"class":111},[97,69373,115],{"class":103},[97,69375,10221],{"class":118},[97,69377,69378],{"class":103},">女\u003C\u002F",[97,69380,69350],{"class":107},[97,69382,130],{"class":103},[97,69384,69385,69387,69389],{"class":99,"line":1890},[97,69386,51960],{"class":103},[97,69388,69328],{"class":107},[97,69390,130],{"class":103},[97,69392,69393,69396,69398,69400,69402,69404,69406,69408,69411,69413,69415,69417],{"class":99,"line":1919},[97,69394,69395],{"class":103},"    薪资：\u003C",[97,69397,54005],{"class":107},[97,69399,54008],{"class":111},[97,69401,115],{"class":103},[97,69403,62883],{"class":118},[97,69405,53670],{"class":111},[97,69407,115],{"class":103},[97,69409,69410],{"class":118},"\"salary\"",[97,69412,112],{"class":111},[97,69414,115],{"class":103},[97,69416,69410],{"class":118},[97,69418,59311],{"class":103},[97,69420,69421,69424,69426,69428,69430,69433,69435,69437,69439],{"class":99,"line":1924},[97,69422,69423],{"class":103},"    就业城市：\u003C",[97,69425,69328],{"class":107},[97,69427,112],{"class":111},[97,69429,115],{"class":103},[97,69431,69432],{"class":118},"\"city\"",[97,69434,53670],{"class":111},[97,69436,115],{"class":103},[97,69438,69432],{"class":118},[97,69440,130],{"class":103},[97,69442,69443,69445,69447,69449,69451,69454,69457,69459],{"class":99,"line":1941},[97,69444,55418],{"class":103},[97,69446,69350],{"class":107},[97,69448,66835],{"class":111},[97,69450,115],{"class":103},[97,69452,69453],{"class":118},"\"北京\"",[97,69455,69456],{"class":103},">北京\u003C\u002F",[97,69458,69350],{"class":107},[97,69460,130],{"class":103},[97,69462,69463,69465,69467,69469,69471,69474,69477,69479],{"class":99,"line":1946},[97,69464,55418],{"class":103},[97,69466,69350],{"class":107},[97,69468,66835],{"class":111},[97,69470,115],{"class":103},[97,69472,69473],{"class":118},"\"上海\"",[97,69475,69476],{"class":103},">上海\u003C\u002F",[97,69478,69350],{"class":107},[97,69480,130],{"class":103},[97,69482,69483,69485,69487,69489,69491,69494,69497,69499],{"class":99,"line":1951},[97,69484,55418],{"class":103},[97,69486,69350],{"class":107},[97,69488,66835],{"class":111},[97,69490,115],{"class":103},[97,69492,69493],{"class":118},"\"广州\"",[97,69495,69496],{"class":103},">广州\u003C\u002F",[97,69498,69350],{"class":107},[97,69500,130],{"class":103},[97,69502,69503,69505,69507,69509,69511,69514,69517,69519],{"class":99,"line":1956},[97,69504,55418],{"class":103},[97,69506,69350],{"class":107},[97,69508,66835],{"class":111},[97,69510,115],{"class":103},[97,69512,69513],{"class":118},"\"深圳\"",[97,69515,69516],{"class":103},">深圳\u003C\u002F",[97,69518,69350],{"class":107},[97,69520,130],{"class":103},[97,69522,69523,69525,69527,69529,69531,69534,69537,69539],{"class":99,"line":1970},[97,69524,55418],{"class":103},[97,69526,69350],{"class":107},[97,69528,66835],{"class":111},[97,69530,115],{"class":103},[97,69532,69533],{"class":118},"\"曹县\"",[97,69535,69536],{"class":103},">曹县\u003C\u002F",[97,69538,69350],{"class":107},[97,69540,130],{"class":103},[97,69542,69543,69545,69547],{"class":99,"line":1975},[97,69544,51960],{"class":103},[97,69546,69328],{"class":107},[97,69548,130],{"class":103},[97,69550,69551,69553,69555,69557,69559,69562,69565,69567],{"class":99,"line":2768},[97,69552,51529],{"class":103},[97,69554,54071],{"class":107},[97,69556,53670],{"class":111},[97,69558,115],{"class":103},[97,69560,69561],{"class":118},"\"add\"",[97,69563,69564],{"class":103},">录入\u003C\u002F",[97,69566,54071],{"class":107},[97,69568,130],{"class":103},[97,69570,69571,69573,69575],{"class":99,"line":2782},[97,69572,52601],{"class":103},[97,69574,66809],{"class":107},[97,69576,130],{"class":103},[97,69578,69579],{"class":99,"line":2790},[97,69580,2591],{"emptyLinePlaceholder":249},[97,69582,69583,69585,69587,69590,69592],{"class":99,"line":2795},[97,69584,52328],{"class":103},[97,69586,10],{"class":107},[97,69588,69589],{"class":103},">就业榜\u003C\u002F",[97,69591,10],{"class":107},[97,69593,130],{"class":103},[97,69595,69596,69598,69600],{"class":99,"line":2801},[97,69597,52328],{"class":103},[97,69599,457],{"class":107},[97,69601,130],{"class":103},[97,69603,69604,69606,69608],{"class":99,"line":2807},[97,69605,51529],{"class":103},[97,69607,460],{"class":107},[97,69609,130],{"class":103},[97,69611,69612,69614,69616],{"class":99,"line":2812},[97,69613,55418],{"class":103},[97,69615,463],{"class":107},[97,69617,130],{"class":103},[97,69619,69620,69622,69624,69627,69629],{"class":99,"line":8139},[97,69621,55486],{"class":103},[97,69623,466],{"class":107},[97,69625,69626],{"class":103},">序号\u003C\u002F",[97,69628,466],{"class":107},[97,69630,130],{"class":103},[97,69632,69633,69635,69637,69640,69642],{"class":99,"line":8163},[97,69634,55486],{"class":103},[97,69636,466],{"class":107},[97,69638,69639],{"class":103},">姓名\u003C\u002F",[97,69641,466],{"class":107},[97,69643,130],{"class":103},[97,69645,69646,69648,69650,69653,69655],{"class":99,"line":8168},[97,69647,55486],{"class":103},[97,69649,466],{"class":107},[97,69651,69652],{"class":103},">年龄\u003C\u002F",[97,69654,466],{"class":107},[97,69656,130],{"class":103},[97,69658,69659,69661,69663,69666,69668],{"class":99,"line":8174},[97,69660,55486],{"class":103},[97,69662,466],{"class":107},[97,69664,69665],{"class":103},">性别\u003C\u002F",[97,69667,466],{"class":107},[97,69669,130],{"class":103},[97,69671,69672,69674,69676,69679,69681],{"class":99,"line":8201},[97,69673,55486],{"class":103},[97,69675,466],{"class":107},[97,69677,69678],{"class":103},">薪资\u003C\u002F",[97,69680,466],{"class":107},[97,69682,130],{"class":103},[97,69684,69685,69687,69689,69692,69694],{"class":99,"line":8206},[97,69686,55486],{"class":103},[97,69688,466],{"class":107},[97,69690,69691],{"class":103},">就业城市\u003C\u002F",[97,69693,466],{"class":107},[97,69695,130],{"class":103},[97,69697,69698,69700,69702,69705,69707],{"class":99,"line":8212},[97,69699,55486],{"class":103},[97,69701,466],{"class":107},[97,69703,69704],{"class":103},">操作\u003C\u002F",[97,69706,466],{"class":107},[97,69708,130],{"class":103},[97,69710,69711,69713,69715],{"class":99,"line":8224},[97,69712,55591],{"class":103},[97,69714,463],{"class":107},[97,69716,130],{"class":103},[97,69718,69719,69721,69723],{"class":99,"line":8236},[97,69720,51960],{"class":103},[97,69722,460],{"class":107},[97,69724,130],{"class":103},[97,69726,69727,69729,69731],{"class":99,"line":8248},[97,69728,51529],{"class":103},[97,69730,504],{"class":107},[97,69732,130],{"class":103},[97,69734,69735],{"class":99,"line":9907},[97,69736,69737],{"class":191},"      \u003C!-- \n",[97,69739,69740],{"class":99,"line":9932},[97,69741,69742],{"class":191},"        \u003Ctr>\n",[97,69744,69745],{"class":99,"line":9955},[97,69746,69747],{"class":191},"          \u003Ctd>1001\u003C\u002Ftd>\n",[97,69749,69750],{"class":99,"line":9979},[97,69751,69752],{"class":191},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[97,69754,69755],{"class":99,"line":9984},[97,69756,69757],{"class":191},"          \u003Ctd>19\u003C\u002Ftd>\n",[97,69759,69760],{"class":99,"line":9989},[97,69761,69762],{"class":191},"          \u003Ctd>男\u003C\u002Ftd>\n",[97,69764,69765],{"class":99,"line":9994},[97,69766,69767],{"class":191},"          \u003Ctd>15000\u003C\u002Ftd>\n",[97,69769,69770],{"class":99,"line":10003},[97,69771,69772],{"class":191},"          \u003Ctd>上海\u003C\u002Ftd>\n",[97,69774,69775],{"class":99,"line":10008},[97,69776,69777],{"class":191},"          \u003Ctd>\n",[97,69779,69780],{"class":99,"line":10014},[97,69781,69782],{"class":191},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[97,69784,69785],{"class":99,"line":10035},[97,69786,69787],{"class":191},"          \u003C\u002Ftd>\n",[97,69789,69790],{"class":99,"line":10041},[97,69791,69792],{"class":191},"        \u003C\u002Ftr> \n",[97,69794,69795],{"class":99,"line":10055},[97,69796,69797],{"class":191},"        -->\n",[97,69799,69800,69802,69804],{"class":99,"line":10061},[97,69801,51960],{"class":103},[97,69803,504],{"class":107},[97,69805,130],{"class":103},[97,69807,69808,69810,69812],{"class":99,"line":10088},[97,69809,52601],{"class":103},[97,69811,457],{"class":107},[97,69813,130],{"class":103},[97,69815,69816,69818,69820],{"class":99,"line":10097},[97,69817,52328],{"class":103},[97,69819,51997],{"class":107},[97,69821,130],{"class":103},[97,69823,69824],{"class":99,"line":10103},[97,69825,60142],{"class":191},[97,69827,69828,69830,69833,69835,69837,69839,69841,69844],{"class":99,"line":10111},[97,69829,11412],{"class":319},[97,69831,69832],{"class":370}," uname",[97,69834,13755],{"class":319},[97,69836,54580],{"class":103},[97,69838,54583],{"class":111},[97,69840,323],{"class":103},[97,69842,69843],{"class":118},"'.uname'",[97,69845,329],{"class":103},[97,69847,69848,69850,69852,69854,69856,69858,69860,69863],{"class":99,"line":10116},[97,69849,11412],{"class":319},[97,69851,15879],{"class":370},[97,69853,13755],{"class":319},[97,69855,54580],{"class":103},[97,69857,54583],{"class":111},[97,69859,323],{"class":103},[97,69861,69862],{"class":118},"'.age'",[97,69864,329],{"class":103},[97,69866,69867,69869,69872,69874,69876,69878,69880,69883],{"class":99,"line":16794},[97,69868,11412],{"class":319},[97,69870,69871],{"class":370}," gender",[97,69873,13755],{"class":319},[97,69875,54580],{"class":103},[97,69877,54583],{"class":111},[97,69879,323],{"class":103},[97,69881,69882],{"class":118},"'.gender'",[97,69884,329],{"class":103},[97,69886,69887,69889,69892,69894,69896,69898,69900,69903],{"class":99,"line":16800},[97,69888,11412],{"class":319},[97,69890,69891],{"class":370}," salary",[97,69893,13755],{"class":319},[97,69895,54580],{"class":103},[97,69897,54583],{"class":111},[97,69899,323],{"class":103},[97,69901,69902],{"class":118},"'.salary'",[97,69904,329],{"class":103},[97,69906,69907,69909,69912,69914,69916,69918,69920,69923],{"class":99,"line":16823},[97,69908,11412],{"class":319},[97,69910,69911],{"class":370}," city",[97,69913,13755],{"class":319},[97,69915,54580],{"class":103},[97,69917,54583],{"class":111},[97,69919,323],{"class":103},[97,69921,69922],{"class":118},"'.city'",[97,69924,329],{"class":103},[97,69926,69927,69929,69932,69934,69936,69938,69940,69943],{"class":99,"line":16829},[97,69928,11412],{"class":319},[97,69930,69931],{"class":370}," tbody",[97,69933,13755],{"class":319},[97,69935,54580],{"class":103},[97,69937,54583],{"class":111},[97,69939,323],{"class":103},[97,69941,69942],{"class":118},"'tbody'",[97,69944,329],{"class":103},[97,69946,69947],{"class":99,"line":16852},[97,69948,2591],{"emptyLinePlaceholder":249},[97,69950,69951],{"class":99,"line":16866},[97,69952,69953],{"class":191},"    \u002F\u002F 获取所有带有name属性的元素\n",[97,69955,69956,69958,69961,69963,69965,69967,69969,69972],{"class":99,"line":16886},[97,69957,11412],{"class":319},[97,69959,69960],{"class":370}," items",[97,69962,13755],{"class":319},[97,69964,54580],{"class":103},[97,69966,55865],{"class":111},[97,69968,323],{"class":103},[97,69970,69971],{"class":118},"'[name]'",[97,69973,329],{"class":103},[97,69975,69976],{"class":99,"line":16892},[97,69977,69978],{"class":191},"    \u002F\u002F 声明一个空的数组\n",[97,69980,69981,69983,69985,69987],{"class":99,"line":16903},[97,69982,11412],{"class":319},[97,69984,57879],{"class":370},[97,69986,13755],{"class":319},[97,69988,52022],{"class":103},[97,69990,69991],{"class":99,"line":16926},[97,69992,69993],{"class":191},"    \u002F\u002F 1.录入模块\n",[97,69995,69996],{"class":99,"line":16948},[97,69997,69998],{"class":191},"    \u002F\u002F 1.1这是一个表单提交事件\n",[97,70000,70001,70003,70006,70008,70010,70012,70014,70017],{"class":99,"line":16953},[97,70002,11412],{"class":319},[97,70004,70005],{"class":370}," info",[97,70007,13755],{"class":319},[97,70009,54580],{"class":103},[97,70011,54583],{"class":111},[97,70013,323],{"class":103},[97,70015,70016],{"class":118},"'.info'",[97,70018,329],{"class":103},[97,70020,70021,70024,70026,70028,70031,70033,70035,70037,70039],{"class":99,"line":16959},[97,70022,70023],{"class":103},"    info.",[97,70025,57997],{"class":111},[97,70027,323],{"class":103},[97,70029,70030],{"class":118},"'submit'",[97,70032,12626],{"class":103},[97,70034,54633],{"class":319},[97,70036,1850],{"class":103},[97,70038,395],{"class":5407},[97,70040,12633],{"class":103},[97,70042,70043],{"class":99,"line":16973},[97,70044,70045],{"class":191},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[97,70047,70048,70051,70054],{"class":99,"line":16986},[97,70049,70050],{"class":103},"      e.",[97,70052,70053],{"class":111},"preventDefault",[97,70055,2167],{"class":103},[97,70057,70058],{"class":99,"line":16991},[97,70059,60196],{"class":191},[97,70061,70062],{"class":99,"line":17005},[97,70063,2591],{"emptyLinePlaceholder":249},[97,70065,70066],{"class":99,"line":17010},[97,70067,70068],{"class":191},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[97,70070,70071],{"class":99,"line":17016},[97,70072,70073],{"class":191},"      \u002F\u002F 先遍历循环\n",[97,70075,70076,70078,70080,70082,70084,70086,70088,70090,70092,70095,70097,70099,70101],{"class":99,"line":17021},[97,70077,52468],{"class":319},[97,70079,1850],{"class":103},[97,70081,52031],{"class":319},[97,70083,9629],{"class":103},[97,70085,115],{"class":319},[97,70087,4284],{"class":370},[97,70089,9636],{"class":103},[97,70091,104],{"class":319},[97,70093,70094],{"class":103}," items.",[97,70096,52152],{"class":370},[97,70098,3405],{"class":103},[97,70100,2483],{"class":319},[97,70102,12633],{"class":103},[97,70104,70105,70107,70110,70112,70115],{"class":99,"line":17035},[97,70106,2688],{"class":319},[97,70108,70109],{"class":103}," (items[i].value ",[97,70111,54670],{"class":319},[97,70113,70114],{"class":118}," ''",[97,70116,12633],{"class":103},[97,70118,70119,70122,70125,70127,70130],{"class":99,"line":17040},[97,70120,70121],{"class":319},"          return",[97,70123,70124],{"class":111}," alert",[97,70126,323],{"class":103},[97,70128,70129],{"class":118},"'输入内容不能为空'",[97,70131,329],{"class":103},[97,70133,70134],{"class":99,"line":17045},[97,70135,2720],{"class":103},[97,70137,70138],{"class":99,"line":17059},[97,70139,52582],{"class":103},[97,70141,70142],{"class":99,"line":17071},[97,70143,2591],{"emptyLinePlaceholder":249},[97,70145,70146],{"class":99,"line":17076},[97,70147,70148],{"class":191},"      \u002F\u002F 创建新的对象\n",[97,70150,70151,70153,70156,70158],{"class":99,"line":17089},[97,70152,58412],{"class":319},[97,70154,70155],{"class":370}," obj",[97,70157,13755],{"class":319},[97,70159,15762],{"class":103},[97,70161,70162,70165,70167,70169,70171],{"class":99,"line":17094},[97,70163,70164],{"class":103},"        stuID: arr.",[97,70166,52152],{"class":370},[97,70168,45756],{"class":319},[97,70170,25308],{"class":370},[97,70172,31656],{"class":103},[97,70174,70175],{"class":99,"line":17099},[97,70176,70177],{"class":103},"        uname: uname.value,\n",[97,70179,70180],{"class":99,"line":17104},[97,70181,70182],{"class":103},"        age: age.value,\n",[97,70184,70185],{"class":99,"line":17117},[97,70186,70187],{"class":103},"        gender: gender.value,\n",[97,70189,70190],{"class":99,"line":17122},[97,70191,70192],{"class":103},"        salary: salary.value,\n",[97,70194,70195],{"class":99,"line":32823},[97,70196,70197],{"class":103},"        city: city.value\n",[97,70199,70200],{"class":99,"line":32829},[97,70201,52582],{"class":103},[97,70203,70204],{"class":99,"line":32835},[97,70205,70206],{"class":191},"      \u002F\u002F console.log(obj);\n",[97,70208,70209],{"class":99,"line":32841},[97,70210,70211],{"class":191},"      \u002F\u002F 追加到数组里面\n",[97,70213,70214,70216,70218],{"class":99,"line":32847},[97,70215,58191],{"class":103},[97,70217,52068],{"class":111},[97,70219,70220],{"class":103},"(obj)\n",[97,70222,70223],{"class":99,"line":32858},[97,70224,70225],{"class":191},"      \u002F\u002F console.log(arr);\n",[97,70227,70228],{"class":99,"line":32864},[97,70229,70230],{"class":191},"      \u002F\u002F 清空表单  reset重置表单\n",[97,70232,70233,70236,70238,70241],{"class":99,"line":32884},[97,70234,70235],{"class":370},"      this",[97,70237,878],{"class":103},[97,70239,70240],{"class":111},"reset",[97,70242,2167],{"class":103},[97,70244,70245],{"class":99,"line":32890},[97,70246,70247],{"class":191},"      \u002F\u002F 调用渲染函数\n",[97,70249,70250,70253],{"class":99,"line":32901},[97,70251,70252],{"class":111},"      render",[97,70254,2167],{"class":103},[97,70256,70257],{"class":99,"line":32907},[97,70258,33651],{"class":103},[97,70260,70261],{"class":99,"line":32913},[97,70262,70263],{"class":191},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[97,70265,70266,70269,70272],{"class":99,"line":32919},[97,70267,70268],{"class":319},"    function",[97,70270,70271],{"class":111}," render",[97,70273,11044],{"class":103},[97,70275,70276],{"class":99,"line":32925},[97,70277,70278],{"class":191},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[97,70280,70281,70284,70286],{"class":99,"line":32931},[97,70282,70283],{"class":103},"      tbody.innerHTML ",[97,70285,115],{"class":319},[97,70287,70288],{"class":118}," ''\n",[97,70290,70291],{"class":99,"line":32937},[97,70292,70293],{"class":191},"      \u002F\u002F 遍历数组\n",[97,70295,70296,70298,70300,70302,70304,70306,70308,70310,70312,70314,70316,70318,70320],{"class":99,"line":32943},[97,70297,52468],{"class":319},[97,70299,1850],{"class":103},[97,70301,52031],{"class":319},[97,70303,9629],{"class":103},[97,70305,115],{"class":319},[97,70307,4284],{"class":370},[97,70309,9636],{"class":103},[97,70311,104],{"class":319},[97,70313,52149],{"class":103},[97,70315,52152],{"class":370},[97,70317,3405],{"class":103},[97,70319,2483],{"class":319},[97,70321,12633],{"class":103},[97,70323,70324,70326,70329,70331,70333,70336,70338,70341],{"class":99,"line":32963},[97,70325,61454],{"class":319},[97,70327,70328],{"class":370}," tr",[97,70330,13755],{"class":319},[97,70332,54580],{"class":103},[97,70334,70335],{"class":111},"createElement",[97,70337,323],{"class":103},[97,70339,70340],{"class":118},"'tr'",[97,70342,329],{"class":103},[97,70344,70345,70348,70350],{"class":99,"line":32969},[97,70346,70347],{"class":103},"        tr.innerHTML ",[97,70349,115],{"class":319},[97,70351,70352],{"class":118}," `\n",[97,70354,70355,70358,70360,70362,70364,70367,70370],{"class":99,"line":32985},[97,70356,70357],{"class":118},"        \u003Ctd>${",[97,70359,4071],{"class":103},[97,70361,1210],{"class":118},[97,70363,761],{"class":103},[97,70365,70366],{"class":118},"].",[97,70368,70369],{"class":103},"stuID",[97,70371,70372],{"class":118},"}\u003C\u002Ftd>\n",[97,70374,70375,70378,70380,70382,70384,70386,70389],{"class":99,"line":32991},[97,70376,70377],{"class":118},"          \u003Ctd>${",[97,70379,4071],{"class":103},[97,70381,1210],{"class":118},[97,70383,761],{"class":103},[97,70385,70366],{"class":118},[97,70387,70388],{"class":103},"uname",[97,70390,70372],{"class":118},[97,70392,70393,70395,70397,70399,70401,70403,70406],{"class":99,"line":33005},[97,70394,70377],{"class":118},[97,70396,4071],{"class":103},[97,70398,1210],{"class":118},[97,70400,761],{"class":103},[97,70402,70366],{"class":118},[97,70404,70405],{"class":103},"age",[97,70407,70372],{"class":118},[97,70409,70410,70412,70414,70416,70418,70420,70423],{"class":99,"line":33011},[97,70411,70377],{"class":118},[97,70413,4071],{"class":103},[97,70415,1210],{"class":118},[97,70417,761],{"class":103},[97,70419,70366],{"class":118},[97,70421,70422],{"class":103},"gender",[97,70424,70372],{"class":118},[97,70426,70427,70429,70431,70433,70435,70437,70440],{"class":99,"line":33026},[97,70428,70377],{"class":118},[97,70430,4071],{"class":103},[97,70432,1210],{"class":118},[97,70434,761],{"class":103},[97,70436,70366],{"class":118},[97,70438,70439],{"class":103},"salary",[97,70441,70372],{"class":118},[97,70443,70444,70446,70448,70450,70452,70454,70457],{"class":99,"line":33032},[97,70445,70377],{"class":118},[97,70447,4071],{"class":103},[97,70449,1210],{"class":118},[97,70451,761],{"class":103},[97,70453,70366],{"class":118},[97,70455,70456],{"class":103},"city",[97,70458,70372],{"class":118},[97,70460,70461],{"class":99,"line":33041},[97,70462,69777],{"class":118},[97,70464,70465,70468,70470],{"class":99,"line":33047},[97,70466,70467],{"class":118},"            \u003Ca href=\"javascript:\" data-id=${",[97,70469,761],{"class":103},[97,70471,70472],{"class":118},"}>删除\u003C\u002Fa>\n",[97,70474,70475],{"class":99,"line":33056},[97,70476,70477],{"class":118},"          \u003C\u002Ftd> \n",[97,70479,70480],{"class":99,"line":33062},[97,70481,70482],{"class":118},"          `\n",[97,70484,70485],{"class":99,"line":33068},[97,70486,70487],{"class":191},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[97,70489,70490,70493,70496],{"class":99,"line":33077},[97,70491,70492],{"class":103},"        tbody.",[97,70494,70495],{"class":111},"appendChild",[97,70497,70498],{"class":103},"(tr)\n",[97,70500,70501],{"class":99,"line":33083},[97,70502,52582],{"class":103},[97,70504,70505],{"class":99,"line":33094},[97,70506,2378],{"class":103},[97,70508,70509],{"class":99,"line":33100},[97,70510,2591],{"emptyLinePlaceholder":249},[97,70512,70513],{"class":99,"line":33119},[97,70514,70515],{"class":191},"    \u002F\u002F 3.删除委托\n",[97,70517,70518],{"class":99,"line":33125},[97,70519,70520],{"class":191},"    \u002F\u002F 3.1 事件委托 tbody\n",[97,70522,70523,70526,70528,70530,70532,70534,70536,70538,70540],{"class":99,"line":33136},[97,70524,70525],{"class":103},"    tbody.",[97,70527,57997],{"class":111},[97,70529,323],{"class":103},[97,70531,58002],{"class":118},[97,70533,12626],{"class":103},[97,70535,54633],{"class":319},[97,70537,1850],{"class":103},[97,70539,395],{"class":5407},[97,70541,12633],{"class":103},[97,70543,70544,70546,70548,70550,70552],{"class":99,"line":33142},[97,70545,54664],{"class":319},[97,70547,67218],{"class":103},[97,70549,54670],{"class":319},[97,70551,68440],{"class":118},[97,70553,12633],{"class":103},[97,70555,70556],{"class":99,"line":33162},[97,70557,70558],{"class":191},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[97,70560,70561],{"class":99,"line":33178},[97,70562,70563],{"class":191},"        \u002F\u002F console.log(e.target.dataset.id);\n",[97,70565,70566],{"class":99,"line":33184},[97,70567,70568],{"class":191},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[97,70570,70571,70574,70576,70579,70581],{"class":99,"line":33198},[97,70572,70573],{"class":103},"        arr.",[97,70575,58194],{"class":111},[97,70577,70578],{"class":103},"(e.target.dataset.id, ",[97,70580,537],{"class":370},[97,70582,329],{"class":103},[97,70584,70585],{"class":99,"line":33204},[97,70586,70587],{"class":191},"        \u002F\u002F 重新渲染一次\n",[97,70589,70590,70593],{"class":99,"line":33210},[97,70591,70592],{"class":111},"        render",[97,70594,2167],{"class":103},[97,70596,70597],{"class":99,"line":33221},[97,70598,52582],{"class":103},[97,70600,70601],{"class":99,"line":33227},[97,70602,33651],{"class":103},[97,70604,70605,70607,70609],{"class":99,"line":33233},[97,70606,52601],{"class":103},[97,70608,51997],{"class":107},[97,70610,130],{"class":103},[97,70612,70613],{"class":99,"line":33243},[97,70614,2591],{"emptyLinePlaceholder":249},[97,70616,70617,70619,70621],{"class":99,"line":33249},[97,70618,51969],{"class":103},[97,70620,51984],{"class":107},[97,70622,130],{"class":103},[97,70624,70625],{"class":99,"line":33260},[97,70626,2591],{"emptyLinePlaceholder":249},[97,70628,70629,70631,70633],{"class":99,"line":33266},[97,70630,51969],{"class":103},[97,70632,50825],{"class":107},[97,70634,130],{"class":103},[24,70636,70637],{},"样式：",[87,70639,70643],{"className":70640,"code":70641,"language":70642,"meta":92,"style":92},"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",[94,70644,70645,70650,70660,70669,70673,70677,70682,70692,70697,70701,70706,70716,70721,70730,70734,70738,70743,70748,70758,70768,70773,70777,70782,70791,70801,70806,70816,70826,70830,70835,70843,70847,70852,70857,70862,70870,70879,70883,70888,70897,70901,70906,70915,70919,70924,70933,70942,70950,70954,70959,70968,70978,70987,70997,71003,71012,71022,71032,71036,71041,71050,71058,71068,71076,71085,71094,71104,71112,71116,71121,71130],{"__ignoreMap":92},[97,70646,70647],{"class":99,"line":100},[97,70648,70649],{"class":103},"* {\n",[97,70651,70652,70655,70657],{"class":99,"line":195},[97,70653,70654],{"class":107},"  margin",[97,70656,51621],{"class":103},[97,70658,70659],{"class":118},"0;\n",[97,70661,70662,70665,70667],{"class":99,"line":241},[97,70663,70664],{"class":118},"  padding",[97,70666,51621],{"class":103},[97,70668,70659],{"class":118},[97,70670,70671],{"class":99,"line":1387},[97,70672,1757],{"class":103},[97,70674,70675],{"class":99,"line":1393},[97,70676,2591],{"emptyLinePlaceholder":249},[97,70678,70679],{"class":99,"line":1407},[97,70680,70681],{"class":118},"a {\n",[97,70683,70684,70687,70689],{"class":99,"line":1413},[97,70685,70686],{"class":107},"  text-decoration",[97,70688,51621],{"class":103},[97,70690,70691],{"class":118},"none;\n",[97,70693,70694],{"class":99,"line":1504},[97,70695,70696],{"class":118},"  color:#721c24;\n",[97,70698,70699],{"class":99,"line":1510},[97,70700,1757],{"class":103},[97,70702,70703],{"class":99,"line":1522},[97,70704,70705],{"class":118},"h1 {\n",[97,70707,70708,70711,70713],{"class":99,"line":1804},[97,70709,70710],{"class":107},"  text-align",[97,70712,51621],{"class":103},[97,70714,70715],{"class":118},"center;\n",[97,70717,70718],{"class":99,"line":1809},[97,70719,70720],{"class":118},"  color:#333;\n",[97,70722,70723,70725,70727],{"class":99,"line":1815},[97,70724,70654],{"class":107},[97,70726,51621],{"class":103},[97,70728,70729],{"class":118},"20px 0;\n",[97,70731,70732],{"class":99,"line":1820},[97,70733,2865],{"class":103},[97,70735,70736],{"class":99,"line":1834},[97,70737,1757],{"class":103},[97,70739,70740],{"class":99,"line":1839},[97,70741,70742],{"class":118},"table {\n",[97,70744,70745],{"class":99,"line":1845},[97,70746,70747],{"class":118},"  margin:0 auto;\n",[97,70749,70750,70753,70755],{"class":99,"line":1866},[97,70751,70752],{"class":107},"  width",[97,70754,51621],{"class":103},[97,70756,70757],{"class":118},"800px;\n",[97,70759,70760,70763,70765],{"class":99,"line":1871},[97,70761,70762],{"class":107},"  border-collapse",[97,70764,51621],{"class":103},[97,70766,70767],{"class":118},"collapse;\n",[97,70769,70770],{"class":99,"line":1885},[97,70771,70772],{"class":118},"  color:#004085;\n",[97,70774,70775],{"class":99,"line":1890},[97,70776,1757],{"class":103},[97,70778,70779],{"class":99,"line":1919},[97,70780,70781],{"class":118},"th {\n",[97,70783,70784,70786,70788],{"class":99,"line":1924},[97,70785,70664],{"class":107},[97,70787,51621],{"class":103},[97,70789,70790],{"class":118},"10px;\n",[97,70792,70793,70796,70798],{"class":99,"line":1941},[97,70794,70795],{"class":107},"  background",[97,70797,51621],{"class":103},[97,70799,70800],{"class":191},"#cfe5ff;\n",[97,70802,70803],{"class":99,"line":1946},[97,70804,70805],{"class":103},"  \n",[97,70807,70808,70811,70813],{"class":99,"line":1951},[97,70809,70810],{"class":107},"  font-size",[97,70812,51621],{"class":103},[97,70814,70815],{"class":118},"20px;\n",[97,70817,70818,70821,70823],{"class":99,"line":1956},[97,70819,70820],{"class":107},"  font-weight",[97,70822,51621],{"class":103},[97,70824,70825],{"class":118},"400;\n",[97,70827,70828],{"class":99,"line":1970},[97,70829,1757],{"class":103},[97,70831,70832],{"class":99,"line":1975},[97,70833,70834],{"class":118},"td,th {\n",[97,70836,70837,70840],{"class":99,"line":2768},[97,70838,70839],{"class":118},"  border:1px solid",[97,70841,70842],{"class":191}," #b8daff;\n",[97,70844,70845],{"class":99,"line":2782},[97,70846,1757],{"class":103},[97,70848,70849],{"class":99,"line":2790},[97,70850,70851],{"class":118},"td {\n",[97,70853,70854],{"class":99,"line":2795},[97,70855,70856],{"class":118},"  padding:10px;\n",[97,70858,70859],{"class":99,"line":2801},[97,70860,70861],{"class":118},"  color:#666;\n",[97,70863,70864,70866,70868],{"class":99,"line":2807},[97,70865,70710],{"class":107},[97,70867,51621],{"class":103},[97,70869,70715],{"class":118},[97,70871,70872,70874,70876],{"class":99,"line":2812},[97,70873,70810],{"class":107},[97,70875,51621],{"class":103},[97,70877,70878],{"class":118},"16px;\n",[97,70880,70881],{"class":99,"line":8139},[97,70882,1757],{"class":103},[97,70884,70885],{"class":99,"line":8163},[97,70886,70887],{"class":118},"tbody tr {\n",[97,70889,70890,70892,70894],{"class":99,"line":8168},[97,70891,70795],{"class":107},[97,70893,51621],{"class":103},[97,70895,70896],{"class":191},"#fff;\n",[97,70898,70899],{"class":99,"line":8174},[97,70900,1757],{"class":103},[97,70902,70903],{"class":99,"line":8201},[97,70904,70905],{"class":118},"tbody tr:hover {\n",[97,70907,70908,70910,70912],{"class":99,"line":8206},[97,70909,70795],{"class":107},[97,70911,51621],{"class":103},[97,70913,70914],{"class":191},"#e1ecf8;\n",[97,70916,70917],{"class":99,"line":8212},[97,70918,1757],{"class":103},[97,70920,70921],{"class":99,"line":8224},[97,70922,70923],{"class":118},".info {\n",[97,70925,70926,70928,70930],{"class":99,"line":8236},[97,70927,70752],{"class":107},[97,70929,51621],{"class":103},[97,70931,70932],{"class":118},"900px;\n",[97,70934,70935,70937,70939],{"class":99,"line":8248},[97,70936,70654],{"class":107},[97,70938,51621],{"class":103},[97,70940,70941],{"class":118},"50px auto;\n",[97,70943,70944,70946,70948],{"class":99,"line":9907},[97,70945,70710],{"class":107},[97,70947,51621],{"class":103},[97,70949,70715],{"class":118},[97,70951,70952],{"class":99,"line":9932},[97,70953,1757],{"class":103},[97,70955,70956],{"class":99,"line":9955},[97,70957,70958],{"class":118},".info  input, .info select {\n",[97,70960,70961,70963,70965],{"class":99,"line":9979},[97,70962,70752],{"class":107},[97,70964,51621],{"class":103},[97,70966,70967],{"class":118},"80px;\n",[97,70969,70970,70973,70975],{"class":99,"line":9984},[97,70971,70972],{"class":107},"  height",[97,70974,51621],{"class":103},[97,70976,70977],{"class":118},"27px;\n",[97,70979,70980,70983,70985],{"class":99,"line":9989},[97,70981,70982],{"class":107},"  outline",[97,70984,51621],{"class":103},[97,70986,70691],{"class":118},[97,70988,70989,70992,70994],{"class":99,"line":9994},[97,70990,70991],{"class":107},"  border-radius",[97,70993,51621],{"class":103},[97,70995,70996],{"class":118},"5px;\n",[97,70998,70999,71001],{"class":99,"line":10003},[97,71000,70839],{"class":118},[97,71002,70842],{"class":191},[97,71004,71005,71008,71010],{"class":99,"line":10008},[97,71006,71007],{"class":107},"  padding-left",[97,71009,51621],{"class":103},[97,71011,70996],{"class":118},[97,71013,71014,71017,71019],{"class":99,"line":10014},[97,71015,71016],{"class":107},"  box-sizing",[97,71018,51621],{"class":103},[97,71020,71021],{"class":118},"border-box;\n",[97,71023,71024,71027,71029],{"class":99,"line":10035},[97,71025,71026],{"class":107},"  margin-right",[97,71028,51621],{"class":103},[97,71030,71031],{"class":118},"15px;\n",[97,71033,71034],{"class":99,"line":10041},[97,71035,1757],{"class":103},[97,71037,71038],{"class":99,"line":10055},[97,71039,71040],{"class":118},".info button {\n",[97,71042,71043,71045,71047],{"class":99,"line":10061},[97,71044,70752],{"class":107},[97,71046,51621],{"class":103},[97,71048,71049],{"class":118},"60px;\n",[97,71051,71052,71054,71056],{"class":99,"line":10088},[97,71053,70972],{"class":107},[97,71055,51621],{"class":103},[97,71057,70977],{"class":118},[97,71059,71060,71063,71065],{"class":99,"line":10097},[97,71061,71062],{"class":107},"  background-color",[97,71064,51621],{"class":103},[97,71066,71067],{"class":191},"#004085;\n",[97,71069,71070,71072,71074],{"class":99,"line":10103},[97,71071,70982],{"class":107},[97,71073,51621],{"class":103},[97,71075,70691],{"class":118},[97,71077,71078,71081,71083],{"class":99,"line":10111},[97,71079,71080],{"class":107},"  border",[97,71082,51621],{"class":103},[97,71084,70659],{"class":118},[97,71086,71087,71090,71092],{"class":99,"line":10116},[97,71088,71089],{"class":107},"  color",[97,71091,51621],{"class":103},[97,71093,70896],{"class":191},[97,71095,71096,71099,71101],{"class":99,"line":16794},[97,71097,71098],{"class":107},"  cursor",[97,71100,51621],{"class":103},[97,71102,71103],{"class":118},"pointer;\n",[97,71105,71106,71108,71110],{"class":99,"line":16800},[97,71107,70991],{"class":107},[97,71109,51621],{"class":103},[97,71111,70996],{"class":118},[97,71113,71114],{"class":99,"line":16823},[97,71115,1757],{"class":103},[97,71117,71118],{"class":99,"line":16829},[97,71119,71120],{"class":118},".info .age {\n",[97,71122,71123,71125,71127],{"class":99,"line":16852},[97,71124,70752],{"class":107},[97,71126,51621],{"class":103},[97,71128,71129],{"class":118},"50px;\n",[97,71131,71132],{"class":99,"line":16866},[97,71133,1757],{"class":103},[24,71135,71136],{},"思路：",[24,71138,71139],{},[19,71140],{"alt":92,"src":71141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[24,71143,71144],{},[19,71145],{"alt":92,"src":71146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[24,71148,71149],{},[19,71150],{"alt":92,"src":71151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[48,71153,71155],{"id":71154},"_3315-重绘回流","3.3.15 重绘回流",[24,71157,71158],{},[19,71159],{"alt":92,"src":71160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[24,71162,71163],{},[19,71164],{"alt":92,"src":71165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[24,71167,71168],{},[19,71169],{"alt":92,"src":71170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71172,71174],{"id":71173},"_34-bom","3.4 BOM",[24,71176,71177],{},[19,71178],{"alt":92,"src":71179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[24,71181,71182],{},"平时写的document省略了window而已，实际上是window.document",[24,71184,71185],{},"函数也是这样，调用的时候实际为window.fn()",[24,71187,71188],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[24,71190,71191],{},"window大部分情况下可以省略",[48,71193,71195],{"id":71194},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[24,71197,71198],{},"只执行一次",[24,71200,71201],{},[19,71202],{"alt":92,"src":71203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[24,71205,71206],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[24,71208,71209],{},[19,71210],{"alt":92,"src":71211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[48,71213,71215],{"id":71214},"_342-js执行机制","3.4.2 JS执行机制",[24,71217,71218],{},[19,71219],{"alt":92,"src":71220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[24,71222,71223],{},"两个的结果都是1111 3333 2222",[24,71225,71226],{},[19,71227],{"alt":92,"src":71228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[24,71230,71231],{},[19,71232],{"alt":92,"src":71233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[24,71235,71236],{},[19,71237],{"alt":92,"src":71238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[24,71240,71241],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[24,71243,71244],{},"工作流程：",[24,71246,71247],{},[19,71248],{"alt":92,"src":71249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[24,71251,71252],{},[19,71253],{"alt":92,"src":71254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[24,71256,71257],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[24,71259,71260],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[48,71262,71264],{"id":71263},"_343-location对象","3.4.3 location对象",[24,71266,71267],{},"location对象属于window这个全局对象下的，可以 省略window",[24,71269,71270],{},[19,71271],{"alt":92,"src":71272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[24,71274,71275],{},"href可以跳转页面",[138,71277,71278],{},[70,71279,71280],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[24,71282,71283],{},"search得到提交信息之后网站后边的地址",[24,71285,71286],{},[19,71287],{"alt":92,"src":71288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[24,71290,71291],{},[19,71292],{"alt":92,"src":71293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[138,71295,71296],{"start":195},[70,71297,71298],{},"hash:这个获取单页面应用#后边的地址",[24,71300,71301],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[24,71303,71304],{},[19,71305],{"alt":92,"src":71306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[87,71308,71310],{"className":53251,"code":71309,"language":53253,"meta":92,"style":92},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[94,71311,71312,71332,71352],{"__ignoreMap":92},[97,71313,71314,71316,71318,71320,71322,71325,71328,71330],{"class":99,"line":100},[97,71315,52328],{"class":103},[97,71317,558],{"class":107},[97,71319,61241],{"class":111},[97,71321,115],{"class":103},[97,71323,71324],{"class":118},"\"#\u002Fmy\"",[97,71326,71327],{"class":103},">我的\u003C\u002F",[97,71329,558],{"class":107},[97,71331,130],{"class":103},[97,71333,71334,71336,71338,71340,71342,71345,71348,71350],{"class":99,"line":195},[97,71335,52328],{"class":103},[97,71337,558],{"class":107},[97,71339,61241],{"class":111},[97,71341,115],{"class":103},[97,71343,71344],{"class":118},"\"#\u002Ffriend\"",[97,71346,71347],{"class":103},">关注\u003C\u002F",[97,71349,558],{"class":107},[97,71351,130],{"class":103},[97,71353,71354,71356,71358,71360,71362,71365,71368,71370],{"class":99,"line":241},[97,71355,52328],{"class":103},[97,71357,558],{"class":107},[97,71359,61241],{"class":111},[97,71361,115],{"class":103},[97,71363,71364],{"class":118},"\"#\u002Fdownload\"",[97,71366,71367],{"class":103},">下载\u003C\u002F",[97,71369,558],{"class":107},[97,71371,130],{"class":103},[24,71373,71374],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[138,71376,71377],{"start":241},[70,71378,71379,71380,71382,71383,71385],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53900,71381],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53900,71384],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[48,71387,71389],{"id":71388},"_345-navigator对象","3.4.5 navigator对象",[24,71391,71392],{},[19,71393],{"alt":92,"src":71394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[87,71396,71400],{"className":71397,"code":71398,"language":71399,"meta":92,"style":92},"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",[94,71401,71402,71407,71418,71430,71435,71486,71527,71532,71545,71557,71562],{"__ignoreMap":92},[97,71403,71404],{"class":99,"line":100},[97,71405,71406],{"class":191},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[97,71408,71409,71411,71413,71415],{"class":99,"line":195},[97,71410,546],{"class":319},[97,71412,323],{"class":103},[97,71414,54633],{"class":319},[97,71416,71417],{"class":103}," () { \n",[97,71419,71420,71422,71425,71427],{"class":99,"line":241},[97,71421,6983],{"class":319},[97,71423,71424],{"class":370}," userAgent",[97,71426,13755],{"class":319},[97,71428,71429],{"class":103}," navigator.userAgent \n",[97,71431,71432],{"class":99,"line":1387},[97,71433,71434],{"class":191},"\u002F\u002F 验证是否为Android或iPhone \n",[97,71436,71437,71439,71442,71444,71447,71450,71452,71454,71457,71459,71462,71466,71468,71470,71472,71475,71477,71479,71481,71483],{"class":99,"line":1393},[97,71438,6983],{"class":319},[97,71440,71441],{"class":370}," android",[97,71443,13755],{"class":319},[97,71445,71446],{"class":103}," userAgent.",[97,71448,71449],{"class":111},"match",[97,71451,323],{"class":103},[97,71453,904],{"class":118},[97,71455,71456],{"class":48167},"(Android);",[97,71458,1305],{"class":319},[97,71460,71461],{"class":370},"[\\s",[97,71463,71465],{"class":71464},"snhLl","\\\u002F",[97,71467,1259],{"class":370},[97,71469,801],{"class":319},[97,71471,323],{"class":48167},[97,71473,71474],{"class":370},"[\\d.]",[97,71476,801],{"class":319},[97,71478,749],{"class":48167},[97,71480,1305],{"class":319},[97,71482,904],{"class":118},[97,71484,71485],{"class":103},") \n",[97,71487,71488,71490,71493,71495,71497,71499,71501,71503,71506,71509,71512,71514,71516,71519,71521,71523,71525],{"class":99,"line":1407},[97,71489,6983],{"class":319},[97,71491,71492],{"class":370}," iphone",[97,71494,13755],{"class":319},[97,71496,71446],{"class":103},[97,71498,71449],{"class":111},[97,71500,323],{"class":103},[97,71502,904],{"class":118},[97,71504,71505],{"class":48167},"(iPhone",[97,71507,71508],{"class":370},"\\s",[97,71510,71511],{"class":48167},"OS)",[97,71513,71508],{"class":370},[97,71515,323],{"class":48167},[97,71517,71518],{"class":370},"[\\d_]",[97,71520,801],{"class":319},[97,71522,749],{"class":48167},[97,71524,904],{"class":118},[97,71526,71485],{"class":103},[97,71528,71529],{"class":99,"line":1413},[97,71530,71531],{"class":191},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[97,71533,71534,71536,71539,71542],{"class":99,"line":1504},[97,71535,1723],{"class":319},[97,71537,71538],{"class":103}," (android ",[97,71540,71541],{"class":319},"||",[97,71543,71544],{"class":103}," iphone) { \n",[97,71546,71547,71550,71552,71555],{"class":99,"line":1510},[97,71548,71549],{"class":103},"location.href ",[97,71551,115],{"class":319},[97,71553,71554],{"class":118}," 'http:\u002F\u002Fm.itcast.cn'",[97,71556,2865],{"class":103},[97,71558,71559],{"class":99,"line":1522},[97,71560,71561],{"class":103},"} \n",[97,71563,71564],{"class":99,"line":1804},[97,71565,71566],{"class":103},"})()\n",[48,71568,71570],{"id":71569},"_346-histroy对象","3.4.6 histroy对象",[24,71572,71573],{},[19,71574],{"alt":92,"src":71575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[24,71577,71578],{},"浏览器地址的前进与后退!!!",[24,71580,71581],{},"history.back() 等效于 history.go(-1)",[24,71583,71584],{},"history.forward() 等效于 history.go(1)",[14,71586,71588],{"id":71587},"_35-本地存储","3.5 本地存储",[138,71590,71591,71594,71597],{},[70,71592,71593],{},"数据存储在用户浏览器中",[70,71595,71596],{},"设置、读取方便、甚至页面刷新不丢失数据",[70,71598,71599],{},"容量较大，sessionStorage和localStorage约 5M 左右",[48,71601,71603],{"id":71602},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[24,71605,71606],{},"只能存储字符串",[24,71608,71609],{},[19,71610],{"alt":92,"src":71611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[24,71613,71614],{},[19,71615],{"alt":92,"src":71616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[24,71618,71619],{},"键值对要加引号,不然就会当变量来看了",[24,71621,71622],{},"localStorage.setItem('uname', 'pink')",[24,71624,71625],{},"刷新之后信息不再丢失",[24,71627,71628],{},"操作key,value会跟着变",[24,71630,71631],{},"删除只删除键就可以,即名字",[24,71633,71622],{},[24,71635,71636],{},"改:",[24,71638,71639],{},"localStorage.setItem('uname','red')",[24,71641,71642],{},"有这个键就是改,没有这个键就是改",[24,71644,71645],{},[19,71646],{"alt":92,"src":71647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[24,71649,71650],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[24,71652,71653],{},[19,71654],{"alt":92,"src":71655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[24,71657,71658],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[48,71660,71662],{"id":71661},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[24,71664,71665],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[24,71667,71668],{},"特性:",[138,71670,71671,71674,71677,71680],{},[70,71672,71673],{},"生命周期为关闭浏览器窗口",[70,71675,71676],{},"在同一个窗口(页面)下数据可以共享",[70,71678,71679],{},"以键值对的形式存储使用",[70,71681,71682],{},"用法跟localStorage 基本相同",[48,71684,71686],{"id":71685},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[24,71688,71689],{},"本地只能存储字符串,无法直接存储复杂数据类型",[87,71691,71693],{"className":53251,"code":71692,"language":53253,"meta":92,"style":92},"\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",[94,71694,71695,71703,71708,71713,71718,71723,71727,71732,71737],{"__ignoreMap":92},[97,71696,71697,71699,71701],{"class":99,"line":100},[97,71698,104],{"class":103},[97,71700,51997],{"class":107},[97,71702,130],{"class":103},[97,71704,71705],{"class":99,"line":195},[97,71706,71707],{"class":103},"    const obj = {\n",[97,71709,71710],{"class":99,"line":241},[97,71711,71712],{"class":103},"      uname: 'pink老师',\n",[97,71714,71715],{"class":99,"line":1387},[97,71716,71717],{"class":103},"      age: 18,\n",[97,71719,71720],{"class":99,"line":1393},[97,71721,71722],{"class":103},"      gender: '女'\n",[97,71724,71725],{"class":99,"line":1407},[97,71726,2378],{"class":103},[97,71728,71729],{"class":99,"line":1413},[97,71730,71731],{"class":103},"    \u002F\u002F 存储复杂数据类型\n",[97,71733,71734],{"class":99,"line":1504},[97,71735,71736],{"class":103},"    localStorage.setItem('obj', obj)\n",[97,71738,71739,71741,71743],{"class":99,"line":1510},[97,71740,52601],{"class":103},[97,71742,51997],{"class":107},[97,71744,130],{"class":103},[24,71746,71747],{},[19,71748],{"alt":92,"src":71749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[24,71751,71752],{},"如果获取一下数据:",[24,71754,71755],{},"log(localStorage.getItem('obj'))",[24,71757,71758],{},[19,71759],{"alt":92,"src":71760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[24,71762,71763],{},"发现直接存对象是使用不了的!!!",[160,71765,71767],{"id":71766},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[24,71769,71770],{},[19,71771],{"alt":92,"src":71772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[87,71774,71776],{"className":50823,"code":71775,"language":50825,"meta":92,"style":92},"\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",[94,71777,71778,71786,71796,71806,71815,71823,71827,71831,71857,71876,71884,71888,71893,71898],{"__ignoreMap":92},[97,71779,71780,71782,71784],{"class":99,"line":100},[97,71781,104],{"class":103},[97,71783,51997],{"class":107},[97,71785,130],{"class":103},[97,71787,71788,71790,71792,71794],{"class":99,"line":195},[97,71789,11412],{"class":319},[97,71791,70155],{"class":370},[97,71793,13755],{"class":319},[97,71795,15762],{"class":103},[97,71797,71798,71801,71804],{"class":99,"line":241},[97,71799,71800],{"class":103},"      uname: ",[97,71802,71803],{"class":118},"'pink老师'",[97,71805,31656],{"class":103},[97,71807,71808,71811,71813],{"class":99,"line":1387},[97,71809,71810],{"class":103},"      age: ",[97,71812,970],{"class":370},[97,71814,31656],{"class":103},[97,71816,71817,71820],{"class":99,"line":1393},[97,71818,71819],{"class":103},"      gender: ",[97,71821,71822],{"class":118},"'女'\n",[97,71824,71825],{"class":99,"line":1407},[97,71826,2378],{"class":103},[97,71828,71829],{"class":99,"line":1413},[97,71830,71731],{"class":191},[97,71832,71833,71836,71839,71841,71844,71846,71849,71851,71854],{"class":99,"line":1504},[97,71834,71835],{"class":103},"  localStorage.",[97,71837,71838],{"class":111},"setItem",[97,71840,323],{"class":103},[97,71842,71843],{"class":118},"'obj'",[97,71845,12626],{"class":103},[97,71847,71848],{"class":370},"JSON",[97,71850,878],{"class":103},[97,71852,71853],{"class":111},"stringify",[97,71855,71856],{"class":103},"(obj))\n",[97,71858,71859,71862,71864,71867,71870,71872,71874],{"class":99,"line":1510},[97,71860,71861],{"class":103},"  console.",[97,71863,58431],{"class":111},[97,71865,71866],{"class":103},"(localStorage.",[97,71868,71869],{"class":111},"getItem",[97,71871,323],{"class":103},[97,71873,71843],{"class":118},[97,71875,30687],{"class":103},[97,71877,71878,71880,71882],{"class":99,"line":1522},[97,71879,52601],{"class":103},[97,71881,51997],{"class":107},[97,71883,130],{"class":103},[97,71885,71886],{"class":99,"line":1804},[97,71887,70805],{"class":103},[97,71889,71890],{"class":99,"line":1809},[97,71891,71892],{"class":103},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[97,71894,71895],{"class":99,"line":1815},[97,71896,71897],{"class":103},"  类型是字符串的\n",[97,71899,71900],{"class":99,"line":1820},[97,71901,71902],{"class":103},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[160,71904,71906],{"id":71905},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[24,71908,71909],{},[19,71910],{"alt":92,"src":71911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[24,71913,71914],{},[19,71915],{"alt":92,"src":71916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[87,71918,71920],{"className":53251,"code":71919,"language":53253,"meta":92,"style":92},"  \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",[94,71921,71922,71930,71934,71938,71942,71946,71950,71955,71960,71965,71970,71975,71980,71985,71990],{"__ignoreMap":92},[97,71923,71924,71926,71928],{"class":99,"line":100},[97,71925,52328],{"class":103},[97,71927,51997],{"class":107},[97,71929,130],{"class":103},[97,71931,71932],{"class":99,"line":195},[97,71933,71707],{"class":103},[97,71935,71936],{"class":99,"line":241},[97,71937,71712],{"class":103},[97,71939,71940],{"class":99,"line":1387},[97,71941,71717],{"class":103},[97,71943,71944],{"class":99,"line":1393},[97,71945,71722],{"class":103},[97,71947,71948],{"class":99,"line":1407},[97,71949,2378],{"class":103},[97,71951,71952],{"class":99,"line":1413},[97,71953,71954],{"class":103},"    \u002F\u002F 1.存储复杂数据类型\n",[97,71956,71957],{"class":99,"line":1504},[97,71958,71959],{"class":103},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[97,71961,71962],{"class":99,"line":1510},[97,71963,71964],{"class":103},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[97,71966,71967],{"class":99,"line":1522},[97,71968,71969],{"class":103},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[97,71971,71972],{"class":99,"line":1804},[97,71973,71974],{"class":103},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[97,71976,71977],{"class":99,"line":1809},[97,71978,71979],{"class":103},"    \u002F\u002F 取\n",[97,71981,71982],{"class":99,"line":1815},[97,71983,71984],{"class":103},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[97,71986,71987],{"class":99,"line":1820},[97,71988,71989],{"class":103},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[97,71991,71992,71994,71996],{"class":99,"line":1834},[97,71993,52601],{"class":103},[97,71995,51997],{"class":107},[97,71997,130],{"class":103},[24,71999,72000],{},[19,72001],{"alt":92,"src":72002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[48,72004,72006],{"id":72005},"_356-数组map方法","3.5.6 数组map方法",[24,72008,72009],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[24,72011,72012],{},[19,72013],{"alt":92,"src":72014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[24,72016,72017],{},[19,72018],{"alt":92,"src":72019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[24,72021,72022,72025],{},[469,72023,72024],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[24,72027,72028],{},"map有返回值，但是forEach没有返回值",[24,72030,72031],{},"map是个方法。用的时候要加 ()",[24,72033,72034],{},"map返回的是一个数组",[48,72036,72038],{"id":72037},"_357-数组中join方法","3.5.7 数组中join方法",[24,72040,72041],{},[19,72042],{"alt":92,"src":72043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[24,72045,72046],{},"类似于python中拼接字符串一样！",[138,72048,72049,72052,72055],{},[70,72050,72051],{},"小括号为空则逗号分开",[70,72053,72054],{},"小括号为空字符串 ''，则元素之间没有分隔符",[70,72056,72057],{},"小括号用啥符号就用进行分割",[48,72059,72061],{"id":72060},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[138,72063,72064,72067,72070,72073,72076],{},[70,72065,72066],{},"记住本地时间获取快速方式：new Date().toDateString()",[70,72068,72069],{},"尽量减少DOM操作，用好map+join的渲染方式",[70,72071,72072],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[70,72074,72075],{},"return可以实现函数的结束",[70,72077,72078],{},"禁止跳转是 preventDefault() 不要忘记",[87,72080,72082],{"className":50823,"code":72081,"language":50825,"meta":92,"style":92},"\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",[94,72083,72084,72094,72108,72112,72120,72134,72154,72166,72174,72180,72190,72200,72204,72208,72214,72224,72236,72240,72244,72251,72263,72277,72287,72291,72295,72302,72309,72316,72328,72340,72350,72362,72366,72370,72377,72384,72396,72408,72418,72430,72460,72464,72468,72475,72487,72499,72523,72533,72543,72547,72551,72559,72570,72582,72594,72606,72623,72635,72647,72651,72655,72662,72674,72686,72698,72709,72727,72740,72752,72776,72787,72791,72795,72803,72813,72817,72821,72827,72839,72850,72860,72864,72868,72874,72896,72900,72904,72910,72916,72928,72938,72950,72980,72993,73010,73014,73018,73029,73051,73061,73065,73069,73082,73092,73104,73116,73128,73140,73150,73160,73170,73181,73194,73198,73206,73214,73218,73226,73239,73259,73292,73325,73358,73384,73402,73420,73428,73454,73472,73490,73508,73526,73544,73552,73560,73578,73586,73615,73623,73631,73639,73652,73664,73676,73688,73700,73712,73725,73737,73745,73753,73761,73766,73771,73775,73779,73783,73787,73791,73795,73800,73805,73810,73815,73823,73831,73839,73844,73849,73854,73859,73864,73869,73874,73879,73884,73889,73894,73899,73904,73909,73913,73918,73923,73933,73942,73946,73951,73960,73976,74018,74058,74097,74162,74170,74174,74179,74197,74205,74210,74215,74245,74251,74256,74269,74281,74293,74305,74317,74329,74341,74345,74355,74359,74364,74369,74373,74382,74386,74391,74396,74415,74420,74440,74444,74449,74453,74458,74476,74494,74512,74531,74550,74569,74574,74580,74601,74607,74616,74622,74628,74634,74661,74674,74679,74689,74695,74701,74707,74713,74718,74724,74730,74736,74742,74775,74780,74785,74790,74795,74801,74807,74813,74824,74829,74835,74842,74856,74862,74886,74891,74896,74902,74908,74929,74935,74948,74954,74960,74966,74972,74977,74983,74989,74995,75013,75027,75033,75041,75047,75069,75074,75079,75084,75089,75094,75103,75112,75117],{"__ignoreMap":92},[97,72085,72086,72088,72090,72092],{"class":99,"line":100},[97,72087,51487],{"class":103},[97,72089,51490],{"class":107},[97,72091,51493],{"class":111},[97,72093,130],{"class":103},[97,72095,72096,72098,72100,72102,72104,72106],{"class":99,"line":195},[97,72097,104],{"class":103},[97,72099,50825],{"class":107},[97,72101,51504],{"class":111},[97,72103,115],{"class":103},[97,72105,51509],{"class":118},[97,72107,130],{"class":103},[97,72109,72110],{"class":99,"line":241},[97,72111,2591],{"emptyLinePlaceholder":249},[97,72113,72114,72116,72118],{"class":99,"line":1387},[97,72115,104],{"class":103},[97,72117,51522],{"class":107},[97,72119,130],{"class":103},[97,72121,72122,72124,72126,72128,72130,72132],{"class":99,"line":1393},[97,72123,52328],{"class":103},[97,72125,108],{"class":107},[97,72127,51534],{"class":111},[97,72129,115],{"class":103},[97,72131,51539],{"class":118},[97,72133,130],{"class":103},[97,72135,72136,72138,72140,72142,72144,72146,72148,72150,72152],{"class":99,"line":1407},[97,72137,52328],{"class":103},[97,72139,108],{"class":107},[97,72141,112],{"class":111},[97,72143,115],{"class":103},[97,72145,119],{"class":118},[97,72147,122],{"class":111},[97,72149,115],{"class":103},[97,72151,127],{"class":118},[97,72153,130],{"class":103},[97,72155,72156,72158,72160,72162,72164],{"class":99,"line":1413},[97,72157,52328],{"class":103},[97,72159,51591],{"class":107},[97,72161,51594],{"class":103},[97,72163,51591],{"class":107},[97,72165,130],{"class":103},[97,72167,72168,72170,72172],{"class":99,"line":1504},[97,72169,52328],{"class":103},[97,72171,231],{"class":107},[97,72173,130],{"class":103},[97,72175,72176,72178],{"class":99,"line":1510},[97,72177,6594],{"class":107},[97,72179,15762],{"class":103},[97,72181,72182,72184,72186,72188],{"class":99,"line":1522},[97,72183,54879],{"class":370},[97,72185,51621],{"class":103},[97,72187,511],{"class":370},[97,72189,1483],{"class":103},[97,72191,72192,72194,72196,72198],{"class":99,"line":1804},[97,72193,54890],{"class":370},[97,72195,51621],{"class":103},[97,72197,511],{"class":370},[97,72199,1483],{"class":103},[97,72201,72202],{"class":99,"line":1809},[97,72203,2378],{"class":103},[97,72205,72206],{"class":99,"line":1815},[97,72207,2591],{"emptyLinePlaceholder":249},[97,72209,72210,72212],{"class":99,"line":1820},[97,72211,57463],{"class":107},[97,72213,15762],{"class":103},[97,72215,72216,72218,72220,72222],{"class":99,"line":1834},[97,72217,57470],{"class":370},[97,72219,51621],{"class":103},[97,72221,51776],{"class":370},[97,72223,1483],{"class":103},[97,72225,72226,72228,72230,72232,72234],{"class":99,"line":1839},[97,72227,62261],{"class":370},[97,72229,51621],{"class":103},[97,72231,1020],{"class":370},[97,72233,51676],{"class":319},[97,72235,1483],{"class":103},[97,72237,72238],{"class":99,"line":1845},[97,72239,2378],{"class":103},[97,72241,72242],{"class":99,"line":1866},[97,72243,2591],{"emptyLinePlaceholder":249},[97,72245,72246,72249],{"class":99,"line":1871},[97,72247,72248],{"class":111},"    .info",[97,72250,15762],{"class":103},[97,72252,72253,72255,72257,72259,72261],{"class":99,"line":1885},[97,72254,54955],{"class":370},[97,72256,51621],{"class":103},[97,72258,51673],{"class":370},[97,72260,51676],{"class":319},[97,72262,1483],{"class":103},[97,72264,72265,72267,72269,72271,72273,72275],{"class":99,"line":1890},[97,72266,54890],{"class":370},[97,72268,51621],{"class":103},[97,72270,766],{"class":370},[97,72272,51676],{"class":319},[97,72274,51740],{"class":370},[97,72276,1483],{"class":103},[97,72278,72279,72281,72283,72285],{"class":99,"line":1919},[97,72280,57470],{"class":370},[97,72282,51621],{"class":103},[97,72284,51776],{"class":370},[97,72286,1483],{"class":103},[97,72288,72289],{"class":99,"line":1924},[97,72290,2378],{"class":103},[97,72292,72293],{"class":99,"line":1941},[97,72294,2591],{"emptyLinePlaceholder":249},[97,72296,72297,72300],{"class":99,"line":1946},[97,72298,72299],{"class":111},"    .uname",[97,72301,31656],{"class":103},[97,72303,72304,72307],{"class":99,"line":1951},[97,72305,72306],{"class":111},"    .age",[97,72308,31656],{"class":103},[97,72310,72311,72314],{"class":99,"line":1956},[97,72312,72313],{"class":111},"    .salary",[97,72315,15762],{"class":103},[97,72317,72318,72320,72322,72324,72326],{"class":99,"line":1970},[97,72319,54955],{"class":370},[97,72321,51621],{"class":103},[97,72323,631],{"class":370},[97,72325,51676],{"class":319},[97,72327,1483],{"class":103},[97,72329,72330,72332,72334,72336,72338],{"class":99,"line":1975},[97,72331,54969],{"class":370},[97,72333,51621],{"class":103},[97,72335,1020],{"class":370},[97,72337,51676],{"class":319},[97,72339,1483],{"class":103},[97,72341,72342,72344,72346,72348],{"class":99,"line":2768},[97,72343,61964],{"class":370},[97,72345,51621],{"class":103},[97,72347,54921],{"class":370},[97,72349,1483],{"class":103},[97,72351,72352,72354,72356,72358,72360],{"class":99,"line":2782},[97,72353,61934],{"class":370},[97,72355,51621],{"class":103},[97,72357,895],{"class":370},[97,72359,51676],{"class":319},[97,72361,1483],{"class":103},[97,72363,72364],{"class":99,"line":2790},[97,72365,2378],{"class":103},[97,72367,72368],{"class":99,"line":2795},[97,72369,2591],{"emptyLinePlaceholder":249},[97,72371,72372,72375],{"class":99,"line":2801},[97,72373,72374],{"class":111},"    .gender",[97,72376,31656],{"class":103},[97,72378,72379,72382],{"class":99,"line":2807},[97,72380,72381],{"class":111},"    .city",[97,72383,15762],{"class":103},[97,72385,72386,72388,72390,72392,72394],{"class":99,"line":2812},[97,72387,54955],{"class":370},[97,72389,51621],{"class":103},[97,72391,631],{"class":370},[97,72393,51676],{"class":319},[97,72395,1483],{"class":103},[97,72397,72398,72400,72402,72404,72406],{"class":99,"line":8139},[97,72399,54969],{"class":370},[97,72401,51621],{"class":103},[97,72403,1145],{"class":370},[97,72405,51676],{"class":319},[97,72407,1483],{"class":103},[97,72409,72410,72412,72414,72416],{"class":99,"line":8163},[97,72411,61964],{"class":370},[97,72413,51621],{"class":103},[97,72415,54921],{"class":370},[97,72417,1483],{"class":103},[97,72419,72420,72422,72424,72426,72428],{"class":99,"line":8168},[97,72421,61934],{"class":370},[97,72423,51621],{"class":103},[97,72425,895],{"class":370},[97,72427,51676],{"class":319},[97,72429,1483],{"class":103},[97,72431,72432,72434,72436,72438,72440,72442,72445,72447,72449,72451,72454,72456,72458],{"class":99,"line":8174},[97,72433,62161],{"class":370},[97,72435,51621],{"class":103},[97,72437,537],{"class":370},[97,72439,51676],{"class":319},[97,72441,51705],{"class":370},[97,72443,72444],{"class":370}," rgb",[97,72446,323],{"class":103},[97,72448,1914],{"class":370},[97,72450,12626],{"class":103},[97,72452,72453],{"class":370},"197",[97,72455,12626],{"class":103},[97,72457,72453],{"class":370},[97,72459,2910],{"class":103},[97,72461,72462],{"class":99,"line":8201},[97,72463,2378],{"class":103},[97,72465,72466],{"class":99,"line":8206},[97,72467,2591],{"emptyLinePlaceholder":249},[97,72469,72470,72473],{"class":99,"line":8212},[97,72471,72472],{"class":107},"    button",[97,72474,15762],{"class":103},[97,72476,72477,72479,72481,72483,72485],{"class":99,"line":8224},[97,72478,54969],{"class":370},[97,72480,51621],{"class":103},[97,72482,1145],{"class":370},[97,72484,51676],{"class":319},[97,72486,1483],{"class":103},[97,72488,72489,72491,72493,72495,72497],{"class":99,"line":8236},[97,72490,54955],{"class":370},[97,72492,51621],{"class":103},[97,72494,804],{"class":370},[97,72496,51676],{"class":319},[97,72498,1483],{"class":103},[97,72500,72501,72503,72505,72508,72510,72512,72514,72517,72519,72521],{"class":99,"line":8248},[97,72502,55068],{"class":370},[97,72504,51621],{"class":103},[97,72506,72507],{"class":370},"rgb",[97,72509,323],{"class":103},[97,72511,1288],{"class":370},[97,72513,12626],{"class":103},[97,72515,72516],{"class":370},"187",[97,72518,12626],{"class":103},[97,72520,619],{"class":370},[97,72522,2910],{"class":103},[97,72524,72525,72527,72529,72531],{"class":99,"line":9907},[97,72526,57600],{"class":370},[97,72528,51621],{"class":103},[97,72530,61026],{"class":370},[97,72532,1483],{"class":103},[97,72534,72535,72537,72539,72541],{"class":99,"line":9932},[97,72536,62161],{"class":370},[97,72538,51621],{"class":103},[97,72540,511],{"class":370},[97,72542,1483],{"class":103},[97,72544,72545],{"class":99,"line":9955},[97,72546,2378],{"class":103},[97,72548,72549],{"class":99,"line":9979},[97,72550,2591],{"emptyLinePlaceholder":249},[97,72552,72553,72555,72557],{"class":99,"line":9984},[97,72554,72472],{"class":107},[97,72556,51872],{"class":107},[97,72558,15762],{"class":103},[97,72560,72561,72563,72565,72568],{"class":99,"line":9989},[97,72562,55193],{"class":370},[97,72564,51621],{"class":103},[97,72566,72567],{"class":370},"inline-block",[97,72569,1483],{"class":103},[97,72571,72572,72574,72576,72578,72580],{"class":99,"line":9994},[97,72573,54955],{"class":370},[97,72575,51621],{"class":103},[97,72577,766],{"class":370},[97,72579,51676],{"class":319},[97,72581,1483],{"class":103},[97,72583,72584,72586,72588,72590,72592],{"class":99,"line":10003},[97,72585,54969],{"class":370},[97,72587,51621],{"class":103},[97,72589,766],{"class":370},[97,72591,51676],{"class":319},[97,72593,1483],{"class":103},[97,72595,72596,72598,72600,72602,72604],{"class":99,"line":10008},[97,72597,57543],{"class":370},[97,72599,51621],{"class":103},[97,72601,792],{"class":370},[97,72603,51676],{"class":319},[97,72605,1483],{"class":103},[97,72607,72608,72610,72612,72614,72616,72618,72621],{"class":99,"line":10014},[97,72609,62161],{"class":370},[97,72611,51621],{"class":103},[97,72613,537],{"class":370},[97,72615,51676],{"class":319},[97,72617,51705],{"class":370},[97,72619,72620],{"class":370}," #fff",[97,72622,1483],{"class":103},[97,72624,72625,72627,72629,72631,72633],{"class":99,"line":10035},[97,72626,55318],{"class":370},[97,72628,51621],{"class":103},[97,72630,639],{"class":370},[97,72632,51676],{"class":319},[97,72634,1483],{"class":103},[97,72636,72637,72639,72641,72643,72645],{"class":99,"line":10041},[97,72638,61934],{"class":370},[97,72640,51621],{"class":103},[97,72642,537],{"class":370},[97,72644,51676],{"class":319},[97,72646,1483],{"class":103},[97,72648,72649],{"class":99,"line":10055},[97,72650,2378],{"class":103},[97,72652,72653],{"class":99,"line":10061},[97,72654,2591],{"emptyLinePlaceholder":249},[97,72656,72657,72660],{"class":99,"line":10088},[97,72658,72659],{"class":111},"    .total",[97,72661,15762],{"class":103},[97,72663,72664,72666,72668,72670,72672],{"class":99,"line":10097},[97,72665,54955],{"class":370},[97,72667,51621],{"class":103},[97,72669,61813],{"class":370},[97,72671,51676],{"class":319},[97,72673,1483],{"class":103},[97,72675,72676,72678,72680,72682,72684],{"class":99,"line":10103},[97,72677,54969],{"class":370},[97,72679,51621],{"class":103},[97,72681,721],{"class":370},[97,72683,51676],{"class":319},[97,72685,1483],{"class":103},[97,72687,72688,72690,72692,72694,72696],{"class":99,"line":10111},[97,72689,57543],{"class":370},[97,72691,51621],{"class":103},[97,72693,721],{"class":370},[97,72695,51676],{"class":319},[97,72697,1483],{"class":103},[97,72699,72700,72702,72704,72707],{"class":99,"line":10116},[97,72701,57470],{"class":370},[97,72703,51621],{"class":103},[97,72705,72706],{"class":370},"right",[97,72708,1483],{"class":103},[97,72710,72711,72713,72715,72717,72719,72721,72723,72725],{"class":99,"line":16794},[97,72712,54890],{"class":370},[97,72714,51621],{"class":103},[97,72716,721],{"class":370},[97,72718,51676],{"class":319},[97,72720,51740],{"class":370},[97,72722,2229],{"class":370},[97,72724,51676],{"class":319},[97,72726,1483],{"class":103},[97,72728,72729,72732,72734,72736,72738],{"class":99,"line":16800},[97,72730,72731],{"class":370},"      padding-right",[97,72733,51621],{"class":103},[97,72735,766],{"class":370},[97,72737,51676],{"class":319},[97,72739,1483],{"class":103},[97,72741,72742,72744,72746,72748,72750],{"class":99,"line":16823},[97,72743,55106],{"class":370},[97,72745,51621],{"class":103},[97,72747,843],{"class":370},[97,72749,51676],{"class":319},[97,72751,1483],{"class":103},[97,72753,72754,72756,72758,72760,72762,72765,72767,72770,72772,72774],{"class":99,"line":16829},[97,72755,55068],{"class":370},[97,72757,51621],{"class":103},[97,72759,72507],{"class":370},[97,72761,323],{"class":103},[97,72763,72764],{"class":370},"237",[97,72766,12626],{"class":103},[97,72768,72769],{"class":370},"235",[97,72771,12626],{"class":103},[97,72773,72769],{"class":370},[97,72775,2910],{"class":103},[97,72777,72778,72781,72783,72785],{"class":99,"line":16852},[97,72779,72780],{"class":370},"      box-sizing",[97,72782,51621],{"class":103},[97,72784,60689],{"class":370},[97,72786,1483],{"class":103},[97,72788,72789],{"class":99,"line":16866},[97,72790,2378],{"class":103},[97,72792,72793],{"class":99,"line":16886},[97,72794,2591],{"emptyLinePlaceholder":249},[97,72796,72797,72799,72801],{"class":99,"line":16892},[97,72798,72659],{"class":111},[97,72800,51872],{"class":107},[97,72802,15762],{"class":103},[97,72804,72805,72807,72809,72811],{"class":99,"line":16903},[97,72806,57600],{"class":370},[97,72808,51621],{"class":103},[97,72810,57605],{"class":370},[97,72812,1483],{"class":103},[97,72814,72815],{"class":99,"line":16926},[97,72816,2378],{"class":103},[97,72818,72819],{"class":99,"line":16948},[97,72820,2591],{"emptyLinePlaceholder":249},[97,72822,72823,72825],{"class":99,"line":16953},[97,72824,65207],{"class":107},[97,72826,15762],{"class":103},[97,72828,72829,72831,72833,72835,72837],{"class":99,"line":16959},[97,72830,54955],{"class":370},[97,72832,51621],{"class":103},[97,72834,61813],{"class":370},[97,72836,51676],{"class":319},[97,72838,1483],{"class":103},[97,72840,72841,72843,72845,72848],{"class":99,"line":16973},[97,72842,54890],{"class":370},[97,72844,51621],{"class":103},[97,72846,72847],{"class":370},"auto",[97,72849,1483],{"class":103},[97,72851,72852,72854,72856,72858],{"class":99,"line":16986},[97,72853,65214],{"class":370},[97,72855,51621],{"class":103},[97,72857,65219],{"class":370},[97,72859,1483],{"class":103},[97,72861,72862],{"class":99,"line":16991},[97,72863,2378],{"class":103},[97,72865,72866],{"class":99,"line":17005},[97,72867,2591],{"emptyLinePlaceholder":249},[97,72869,72870,72872],{"class":99,"line":17010},[97,72871,65299],{"class":107},[97,72873,15762],{"class":103},[97,72875,72876,72878,72880,72882,72884,72886,72888,72890,72892,72894],{"class":99,"line":17016},[97,72877,55068],{"class":370},[97,72879,51621],{"class":103},[97,72881,72507],{"class":370},[97,72883,323],{"class":103},[97,72885,72764],{"class":370},[97,72887,12626],{"class":103},[97,72889,72769],{"class":370},[97,72891,12626],{"class":103},[97,72893,72769],{"class":370},[97,72895,2910],{"class":103},[97,72897,72898],{"class":99,"line":17021},[97,72899,2378],{"class":103},[97,72901,72902],{"class":99,"line":17035},[97,72903,2591],{"emptyLinePlaceholder":249},[97,72905,72906,72908],{"class":99,"line":17040},[97,72907,65299],{"class":107},[97,72909,31656],{"class":103},[97,72911,72912,72914],{"class":99,"line":17045},[97,72913,65365],{"class":107},[97,72915,15762],{"class":103},[97,72917,72918,72920,72922,72924,72926],{"class":99,"line":17059},[97,72919,54969],{"class":370},[97,72921,51621],{"class":103},[97,72923,593],{"class":370},[97,72925,51676],{"class":319},[97,72927,1483],{"class":103},[97,72929,72930,72932,72934,72936],{"class":99,"line":17071},[97,72931,57470],{"class":370},[97,72933,51621],{"class":103},[97,72935,23925],{"class":370},[97,72937,1483],{"class":103},[97,72939,72940,72942,72944,72946,72948],{"class":99,"line":17076},[97,72941,55106],{"class":370},[97,72943,51621],{"class":103},[97,72945,869],{"class":370},[97,72947,51676],{"class":319},[97,72949,1483],{"class":103},[97,72951,72952,72954,72956,72958,72960,72962,72964,72966,72969,72971,72974,72976,72978],{"class":99,"line":17089},[97,72953,62161],{"class":370},[97,72955,51621],{"class":103},[97,72957,537],{"class":370},[97,72959,51676],{"class":319},[97,72961,51705],{"class":370},[97,72963,72444],{"class":370},[97,72965,323],{"class":103},[97,72967,72968],{"class":370},"228",[97,72970,12626],{"class":103},[97,72972,72973],{"class":370},"225",[97,72975,12626],{"class":103},[97,72977,72973],{"class":370},[97,72979,2910],{"class":103},[97,72981,72982,72985,72987,72989,72991],{"class":99,"line":17094},[97,72983,72984],{"class":370},"      padding-left",[97,72986,51621],{"class":103},[97,72988,639],{"class":370},[97,72990,51676],{"class":319},[97,72992,1483],{"class":103},[97,72994,72995,72997,72999,73001,73004,73006,73008],{"class":99,"line":17099},[97,72996,62044],{"class":370},[97,72998,51621],{"class":103},[97,73000,28311],{"class":370},[97,73002,73003],{"class":370}," linear",[97,73005,62051],{"class":370},[97,73007,1015],{"class":319},[97,73009,1483],{"class":103},[97,73011,73012],{"class":99,"line":17104},[97,73013,2378],{"class":103},[97,73015,73016],{"class":99,"line":17117},[97,73017,2591],{"emptyLinePlaceholder":249},[97,73019,73020,73023,73025,73027],{"class":99,"line":17122},[97,73021,73022],{"class":107},"    tbody",[97,73024,70328],{"class":107},[97,73026,61124],{"class":111},[97,73028,15762],{"class":103},[97,73030,73031,73033,73035,73037,73039,73041,73043,73045,73047,73049],{"class":99,"line":32823},[97,73032,55068],{"class":370},[97,73034,51621],{"class":103},[97,73036,72507],{"class":370},[97,73038,323],{"class":103},[97,73040,72764],{"class":370},[97,73042,12626],{"class":103},[97,73044,72769],{"class":370},[97,73046,12626],{"class":103},[97,73048,72769],{"class":370},[97,73050,2910],{"class":103},[97,73052,73053,73055,73057,73059],{"class":99,"line":32829},[97,73054,62209],{"class":370},[97,73056,51621],{"class":103},[97,73058,62214],{"class":370},[97,73060,1483],{"class":103},[97,73062,73063],{"class":99,"line":32835},[97,73064,2378],{"class":103},[97,73066,73067],{"class":99,"line":32841},[97,73068,2591],{"emptyLinePlaceholder":249},[97,73070,73071,73073,73075,73078,73080],{"class":99,"line":32847},[97,73072,73022],{"class":107},[97,73074,70328],{"class":107},[97,73076,73077],{"class":107}," td",[97,73079,1591],{"class":107},[97,73081,15762],{"class":103},[97,73083,73084,73086,73088,73090],{"class":99,"line":32858},[97,73085,55193],{"class":370},[97,73087,51621],{"class":103},[97,73089,61053],{"class":370},[97,73091,1483],{"class":103},[97,73093,73094,73096,73098,73100,73102],{"class":99,"line":32864},[97,73095,54955],{"class":370},[97,73097,51621],{"class":103},[97,73099,1227],{"class":370},[97,73101,51676],{"class":319},[97,73103,1483],{"class":103},[97,73105,73106,73108,73110,73112,73114],{"class":99,"line":32884},[97,73107,54969],{"class":370},[97,73109,51621],{"class":103},[97,73111,1145],{"class":370},[97,73113,51676],{"class":319},[97,73115,1483],{"class":103},[97,73117,73118,73120,73122,73124,73126],{"class":99,"line":32890},[97,73119,57543],{"class":370},[97,73121,51621],{"class":103},[97,73123,1145],{"class":370},[97,73125,51676],{"class":319},[97,73127,1483],{"class":103},[97,73129,73130,73132,73134,73136,73138],{"class":99,"line":32901},[97,73131,62261],{"class":370},[97,73133,51621],{"class":103},[97,73135,398],{"class":370},[97,73137,51676],{"class":319},[97,73139,1483],{"class":103},[97,73141,73142,73144,73146,73148],{"class":99,"line":32907},[97,73143,57600],{"class":370},[97,73145,51621],{"class":103},[97,73147,61026],{"class":370},[97,73149,1483],{"class":103},[97,73151,73152,73154,73156,73158],{"class":99,"line":32913},[97,73153,57470],{"class":370},[97,73155,51621],{"class":103},[97,73157,51776],{"class":370},[97,73159,1483],{"class":103},[97,73161,73162,73164,73166,73168],{"class":99,"line":32919},[97,73163,64154],{"class":370},[97,73165,51621],{"class":103},[97,73167,54921],{"class":370},[97,73169,1483],{"class":103},[97,73171,73172,73174,73176,73179],{"class":99,"line":32925},[97,73173,55068],{"class":370},[97,73175,51621],{"class":103},[97,73177,73178],{"class":370},"orange",[97,73180,1483],{"class":103},[97,73182,73183,73185,73187,73190,73192],{"class":99,"line":32931},[97,73184,55318],{"class":370},[97,73186,51621],{"class":103},[97,73188,73189],{"class":370},"12.5",[97,73191,51676],{"class":319},[97,73193,1483],{"class":103},[97,73195,73196],{"class":99,"line":32937},[97,73197,2378],{"class":103},[97,73199,73200,73202,73204],{"class":99,"line":32943},[97,73201,52601],{"class":103},[97,73203,231],{"class":107},[97,73205,130],{"class":103},[97,73207,73208,73210,73212],{"class":99,"line":32963},[97,73209,51969],{"class":103},[97,73211,51522],{"class":107},[97,73213,130],{"class":103},[97,73215,73216],{"class":99,"line":32969},[97,73217,2591],{"emptyLinePlaceholder":249},[97,73219,73220,73222,73224],{"class":99,"line":32985},[97,73221,104],{"class":103},[97,73223,51984],{"class":107},[97,73225,130],{"class":103},[97,73227,73228,73230,73232,73235,73237],{"class":99,"line":32991},[97,73229,52328],{"class":103},[97,73231,14],{"class":107},[97,73233,73234],{"class":103},">学生就业统计表\u003C\u002F",[97,73236,14],{"class":107},[97,73238,130],{"class":103},[97,73240,73241,73243,73245,73247,73249,73251,73253,73255,73257],{"class":99,"line":33005},[97,73242,52328],{"class":103},[97,73244,66809],{"class":107},[97,73246,53670],{"class":111},[97,73248,115],{"class":103},[97,73250,62848],{"class":118},[97,73252,69254],{"class":111},[97,73254,115],{"class":103},[97,73256,31966],{"class":118},[97,73258,130],{"class":103},[97,73260,73261,73263,73265,73267,73269,73271,73273,73275,73277,73279,73281,73284,73286,73288,73290],{"class":99,"line":33011},[97,73262,51529],{"class":103},[97,73264,54005],{"class":107},[97,73266,54008],{"class":111},[97,73268,115],{"class":103},[97,73270,62883],{"class":118},[97,73272,112],{"class":111},[97,73274,115],{"class":103},[97,73276,69280],{"class":118},[97,73278,61204],{"class":111},[97,73280,115],{"class":103},[97,73282,73283],{"class":118},"\"姓名\"",[97,73285,53670],{"class":111},[97,73287,115],{"class":103},[97,73289,69280],{"class":118},[97,73291,130],{"class":103},[97,73293,73294,73296,73298,73300,73302,73304,73306,73308,73310,73312,73314,73317,73319,73321,73323],{"class":99,"line":33026},[97,73295,51529],{"class":103},[97,73297,54005],{"class":107},[97,73299,54008],{"class":111},[97,73301,115],{"class":103},[97,73303,62883],{"class":118},[97,73305,112],{"class":111},[97,73307,115],{"class":103},[97,73309,69308],{"class":118},[97,73311,61204],{"class":111},[97,73313,115],{"class":103},[97,73315,73316],{"class":118},"\"年龄\"",[97,73318,53670],{"class":111},[97,73320,115],{"class":103},[97,73322,69308],{"class":118},[97,73324,130],{"class":103},[97,73326,73327,73329,73331,73333,73335,73337,73339,73341,73343,73345,73347,73350,73352,73354,73356],{"class":99,"line":33032},[97,73328,51529],{"class":103},[97,73330,54005],{"class":107},[97,73332,54008],{"class":111},[97,73334,115],{"class":103},[97,73336,62883],{"class":118},[97,73338,112],{"class":111},[97,73340,115],{"class":103},[97,73342,69410],{"class":118},[97,73344,61204],{"class":111},[97,73346,115],{"class":103},[97,73348,73349],{"class":118},"\"薪资\"",[97,73351,53670],{"class":111},[97,73353,115],{"class":103},[97,73355,69410],{"class":118},[97,73357,130],{"class":103},[97,73359,73360,73362,73364,73366,73368,73370,73372,73374,73376,73378,73380,73382],{"class":99,"line":33041},[97,73361,51529],{"class":103},[97,73363,69328],{"class":107},[97,73365,112],{"class":111},[97,73367,115],{"class":103},[97,73369,69335],{"class":118},[97,73371,15149],{"class":111},[97,73373,115],{"class":103},[97,73375,7843],{"class":118},[97,73377,53670],{"class":111},[97,73379,115],{"class":103},[97,73381,69335],{"class":118},[97,73383,130],{"class":103},[97,73385,73386,73388,73390,73392,73394,73396,73398,73400],{"class":99,"line":33047},[97,73387,55418],{"class":103},[97,73389,69350],{"class":107},[97,73391,66835],{"class":111},[97,73393,115],{"class":103},[97,73395,10152],{"class":118},[97,73397,69359],{"class":103},[97,73399,69350],{"class":107},[97,73401,130],{"class":103},[97,73403,73404,73406,73408,73410,73412,73414,73416,73418],{"class":99,"line":33056},[97,73405,55418],{"class":103},[97,73407,69350],{"class":107},[97,73409,66835],{"class":111},[97,73411,115],{"class":103},[97,73413,10221],{"class":118},[97,73415,69378],{"class":103},[97,73417,69350],{"class":107},[97,73419,130],{"class":103},[97,73421,73422,73424,73426],{"class":99,"line":33062},[97,73423,51960],{"class":103},[97,73425,69328],{"class":107},[97,73427,130],{"class":103},[97,73429,73430,73432,73434,73436,73438,73440,73442,73444,73446,73448,73450,73452],{"class":99,"line":33068},[97,73431,51529],{"class":103},[97,73433,69328],{"class":107},[97,73435,112],{"class":111},[97,73437,115],{"class":103},[97,73439,69432],{"class":118},[97,73441,15149],{"class":111},[97,73443,115],{"class":103},[97,73445,7843],{"class":118},[97,73447,53670],{"class":111},[97,73449,115],{"class":103},[97,73451,69432],{"class":118},[97,73453,130],{"class":103},[97,73455,73456,73458,73460,73462,73464,73466,73468,73470],{"class":99,"line":33077},[97,73457,55418],{"class":103},[97,73459,69350],{"class":107},[97,73461,66835],{"class":111},[97,73463,115],{"class":103},[97,73465,69453],{"class":118},[97,73467,69456],{"class":103},[97,73469,69350],{"class":107},[97,73471,130],{"class":103},[97,73473,73474,73476,73478,73480,73482,73484,73486,73488],{"class":99,"line":33083},[97,73475,55418],{"class":103},[97,73477,69350],{"class":107},[97,73479,66835],{"class":111},[97,73481,115],{"class":103},[97,73483,69473],{"class":118},[97,73485,69476],{"class":103},[97,73487,69350],{"class":107},[97,73489,130],{"class":103},[97,73491,73492,73494,73496,73498,73500,73502,73504,73506],{"class":99,"line":33094},[97,73493,55418],{"class":103},[97,73495,69350],{"class":107},[97,73497,66835],{"class":111},[97,73499,115],{"class":103},[97,73501,69493],{"class":118},[97,73503,69496],{"class":103},[97,73505,69350],{"class":107},[97,73507,130],{"class":103},[97,73509,73510,73512,73514,73516,73518,73520,73522,73524],{"class":99,"line":33100},[97,73511,55418],{"class":103},[97,73513,69350],{"class":107},[97,73515,66835],{"class":111},[97,73517,115],{"class":103},[97,73519,69513],{"class":118},[97,73521,69516],{"class":103},[97,73523,69350],{"class":107},[97,73525,130],{"class":103},[97,73527,73528,73530,73532,73534,73536,73538,73540,73542],{"class":99,"line":33119},[97,73529,55418],{"class":103},[97,73531,69350],{"class":107},[97,73533,66835],{"class":111},[97,73535,115],{"class":103},[97,73537,69533],{"class":118},[97,73539,69536],{"class":103},[97,73541,69350],{"class":107},[97,73543,130],{"class":103},[97,73545,73546,73548,73550],{"class":99,"line":33125},[97,73547,51960],{"class":103},[97,73549,69328],{"class":107},[97,73551,130],{"class":103},[97,73553,73554,73556,73558],{"class":99,"line":33136},[97,73555,51529],{"class":103},[97,73557,54071],{"class":107},[97,73559,130],{"class":103},[97,73561,73562,73564,73566,73569,73571,73574,73576],{"class":99,"line":33142},[97,73563,55418],{"class":103},[97,73565,97],{"class":107},[97,73567,73568],{"class":103},">+\u003C\u002F",[97,73570,97],{"class":107},[97,73572,73573],{"class":103},">添加\u003C\u002F",[97,73575,54071],{"class":107},[97,73577,130],{"class":103},[97,73579,73580,73582,73584],{"class":99,"line":33162},[97,73581,52601],{"class":103},[97,73583,66809],{"class":107},[97,73585,130],{"class":103},[97,73587,73588,73590,73592,73594,73596,73598,73601,73603,73606,73608,73611,73613],{"class":99,"line":33178},[97,73589,52328],{"class":103},[97,73591,51795],{"class":107},[97,73593,53670],{"class":111},[97,73595,115],{"class":103},[97,73597,62764],{"class":118},[97,73599,73600],{"class":103},">共有数据 \u003C",[97,73602,97],{"class":107},[97,73604,73605],{"class":103},">0\u003C\u002F",[97,73607,97],{"class":107},[97,73609,73610],{"class":103},"> 条\u003C\u002F",[97,73612,51795],{"class":107},[97,73614,130],{"class":103},[97,73616,73617,73619,73621],{"class":99,"line":33184},[97,73618,52328],{"class":103},[97,73620,457],{"class":107},[97,73622,130],{"class":103},[97,73624,73625,73627,73629],{"class":99,"line":33198},[97,73626,51529],{"class":103},[97,73628,460],{"class":107},[97,73630,130],{"class":103},[97,73632,73633,73635,73637],{"class":99,"line":33204},[97,73634,55418],{"class":103},[97,73636,463],{"class":107},[97,73638,130],{"class":103},[97,73640,73641,73643,73645,73648,73650],{"class":99,"line":33210},[97,73642,55486],{"class":103},[97,73644,466],{"class":107},[97,73646,73647],{"class":103},">ID\u003C\u002F",[97,73649,466],{"class":107},[97,73651,130],{"class":103},[97,73653,73654,73656,73658,73660,73662],{"class":99,"line":33221},[97,73655,55486],{"class":103},[97,73657,466],{"class":107},[97,73659,69639],{"class":103},[97,73661,466],{"class":107},[97,73663,130],{"class":103},[97,73665,73666,73668,73670,73672,73674],{"class":99,"line":33227},[97,73667,55486],{"class":103},[97,73669,466],{"class":107},[97,73671,69652],{"class":103},[97,73673,466],{"class":107},[97,73675,130],{"class":103},[97,73677,73678,73680,73682,73684,73686],{"class":99,"line":33233},[97,73679,55486],{"class":103},[97,73681,466],{"class":107},[97,73683,69665],{"class":103},[97,73685,466],{"class":107},[97,73687,130],{"class":103},[97,73689,73690,73692,73694,73696,73698],{"class":99,"line":33243},[97,73691,55486],{"class":103},[97,73693,466],{"class":107},[97,73695,69678],{"class":103},[97,73697,466],{"class":107},[97,73699,130],{"class":103},[97,73701,73702,73704,73706,73708,73710],{"class":99,"line":33249},[97,73703,55486],{"class":103},[97,73705,466],{"class":107},[97,73707,69691],{"class":103},[97,73709,466],{"class":107},[97,73711,130],{"class":103},[97,73713,73714,73716,73718,73721,73723],{"class":99,"line":33260},[97,73715,55486],{"class":103},[97,73717,466],{"class":107},[97,73719,73720],{"class":103},">录入时间\u003C\u002F",[97,73722,466],{"class":107},[97,73724,130],{"class":103},[97,73726,73727,73729,73731,73733,73735],{"class":99,"line":33266},[97,73728,55486],{"class":103},[97,73730,466],{"class":107},[97,73732,69704],{"class":103},[97,73734,466],{"class":107},[97,73736,130],{"class":103},[97,73738,73739,73741,73743],{"class":99,"line":33276},[97,73740,55591],{"class":103},[97,73742,463],{"class":107},[97,73744,130],{"class":103},[97,73746,73747,73749,73751],{"class":99,"line":33281},[97,73748,51960],{"class":103},[97,73750,460],{"class":107},[97,73752,130],{"class":103},[97,73754,73755,73757,73759],{"class":99,"line":33287},[97,73756,51529],{"class":103},[97,73758,504],{"class":107},[97,73760,130],{"class":103},[97,73762,73763],{"class":99,"line":33336},[97,73764,73765],{"class":191},"      \u003C!-- \u003Ctr>\n",[97,73767,73768],{"class":99,"line":33383},[97,73769,73770],{"class":191},"        \u003Ctd>1\u003C\u002Ftd>\n",[97,73772,73773],{"class":99,"line":33388},[97,73774,73770],{"class":191},[97,73776,73777],{"class":99,"line":33394},[97,73778,73770],{"class":191},[97,73780,73781],{"class":99,"line":33413},[97,73782,73770],{"class":191},[97,73784,73785],{"class":99,"line":33419},[97,73786,73770],{"class":191},[97,73788,73789],{"class":99,"line":33439},[97,73790,73770],{"class":191},[97,73792,73793],{"class":99,"line":33445},[97,73794,73770],{"class":191},[97,73796,73797],{"class":99,"line":33451},[97,73798,73799],{"class":191},"        \u003Ctd>\n",[97,73801,73802],{"class":99,"line":33461},[97,73803,73804],{"class":191},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[97,73806,73807],{"class":99,"line":33466},[97,73808,73809],{"class":191},"        \u003C\u002Ftd>\n",[97,73811,73812],{"class":99,"line":33472},[97,73813,73814],{"class":191},"      \u003C\u002Ftr> -->\n",[97,73816,73817,73819,73821],{"class":99,"line":33488},[97,73818,51960],{"class":103},[97,73820,504],{"class":107},[97,73822,130],{"class":103},[97,73824,73825,73827,73829],{"class":99,"line":33533},[97,73826,52601],{"class":103},[97,73828,457],{"class":107},[97,73830,130],{"class":103},[97,73832,73833,73835,73837],{"class":99,"line":33539},[97,73834,52328],{"class":103},[97,73836,51997],{"class":107},[97,73838,130],{"class":103},[97,73840,73841],{"class":99,"line":33545},[97,73842,73843],{"class":191},"    \u002F\u002F const initData = [{\n",[97,73845,73846],{"class":99,"line":33551},[97,73847,73848],{"class":191},"    \u002F\u002F   unameId: 1,\n",[97,73850,73851],{"class":99,"line":33562},[97,73852,73853],{"class":191},"    \u002F\u002F   uname: '华晨宇',\n",[97,73855,73856],{"class":99,"line":33568},[97,73857,73858],{"class":191},"    \u002F\u002F   age: 22,\n",[97,73860,73861],{"class":99,"line":33574},[97,73862,73863],{"class":191},"    \u002F\u002F   salary: 12000,\n",[97,73865,73866],{"class":99,"line":33580},[97,73867,73868],{"class":191},"    \u002F\u002F   gender: '男',\n",[97,73870,73871],{"class":99,"line":33598},[97,73872,73873],{"class":191},"    \u002F\u002F   city: '北京',\n",[97,73875,73876],{"class":99,"line":33612},[97,73877,73878],{"class":191},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[97,73880,73881],{"class":99,"line":33621},[97,73882,73883],{"class":191},"    \u002F\u002F }]\n",[97,73885,73886],{"class":99,"line":33630},[97,73887,73888],{"class":191},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[97,73890,73891],{"class":99,"line":33639},[97,73892,73893],{"class":191},"    \u002F\u002F 1.渲染业务\n",[97,73895,73896],{"class":99,"line":33648},[97,73897,73898],{"class":191},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[97,73900,73901],{"class":99,"line":33654},[97,73902,73903],{"class":191},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[97,73905,73906],{"class":99,"line":33660},[97,73907,73908],{"class":191},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[97,73910,73911],{"class":99,"line":33668},[97,73912,2591],{"emptyLinePlaceholder":249},[97,73914,73915],{"class":99,"line":33673},[97,73916,73917],{"class":191},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[97,73919,73920],{"class":99,"line":33679},[97,73921,73922],{"class":191},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[97,73924,73925,73927,73929,73931],{"class":99,"line":33690},[97,73926,11412],{"class":319},[97,73928,57879],{"class":370},[97,73930,13755],{"class":319},[97,73932,52022],{"class":103},[97,73934,73935,73938,73940],{"class":99,"line":33696},[97,73936,73937],{"class":103},"    console.",[97,73939,58431],{"class":111},[97,73941,52596],{"class":103},[97,73943,73944],{"class":99,"line":33716},[97,73945,2591],{"emptyLinePlaceholder":249},[97,73947,73948],{"class":99,"line":33722},[97,73949,73950],{"class":191},"    \u002F\u002F 时间函数\n",[97,73952,73953,73955,73958],{"class":99,"line":33728},[97,73954,70268],{"class":319},[97,73956,73957],{"class":111}," getTime",[97,73959,11044],{"class":103},[97,73961,73962,73964,73967,73969,73971,73974],{"class":99,"line":33734},[97,73963,58412],{"class":319},[97,73965,73966],{"class":370}," date",[97,73968,13755],{"class":319},[97,73970,11769],{"class":319},[97,73972,73973],{"class":111}," Date",[97,73975,2167],{"class":103},[97,73977,73978,73980,73982,73984,73987,73990,73992,73994,73996,73999,74002,74004,74006,74008,74010,74012,74014,74016],{"class":99,"line":33751},[97,73979,58412],{"class":319},[97,73981,16281],{"class":370},[97,73983,13755],{"class":319},[97,73985,73986],{"class":103}," date.",[97,73988,73989],{"class":111},"getHours",[97,73991,13241],{"class":103},[97,73993,104],{"class":319},[97,73995,2229],{"class":370},[97,73997,73998],{"class":319}," ?",[97,74000,74001],{"class":118}," '0'",[97,74003,45756],{"class":319},[97,74005,73986],{"class":103},[97,74007,73989],{"class":111},[97,74009,13241],{"class":103},[97,74011,1179],{"class":319},[97,74013,73986],{"class":103},[97,74015,73989],{"class":111},[97,74017,2167],{"class":103},[97,74019,74020,74022,74025,74027,74029,74032,74034,74036,74038,74040,74042,74044,74046,74048,74050,74052,74054,74056],{"class":99,"line":33757},[97,74021,58412],{"class":319},[97,74023,74024],{"class":370}," m",[97,74026,13755],{"class":319},[97,74028,73986],{"class":103},[97,74030,74031],{"class":111},"getMinutes",[97,74033,13241],{"class":103},[97,74035,104],{"class":319},[97,74037,2229],{"class":370},[97,74039,73998],{"class":319},[97,74041,74001],{"class":118},[97,74043,45756],{"class":319},[97,74045,73986],{"class":103},[97,74047,74031],{"class":111},[97,74049,13241],{"class":103},[97,74051,1179],{"class":319},[97,74053,73986],{"class":103},[97,74055,74031],{"class":111},[97,74057,2167],{"class":103},[97,74059,74060,74062,74064,74066,74068,74071,74073,74075,74077,74079,74081,74083,74085,74087,74089,74091,74093,74095],{"class":99,"line":33763},[97,74061,58412],{"class":319},[97,74063,8619],{"class":370},[97,74065,13755],{"class":319},[97,74067,73986],{"class":103},[97,74069,74070],{"class":111},"getSeconds",[97,74072,13241],{"class":103},[97,74074,104],{"class":319},[97,74076,2229],{"class":370},[97,74078,73998],{"class":319},[97,74080,74001],{"class":118},[97,74082,45756],{"class":319},[97,74084,73986],{"class":103},[97,74086,74070],{"class":111},[97,74088,13241],{"class":103},[97,74090,1179],{"class":319},[97,74092,73986],{"class":103},[97,74094,74070],{"class":111},[97,74096,2167],{"class":103},[97,74098,74099,74101,74104,74106,74108,74111,74113,74116,74118,74121,74123,74125,74128,74130,74132,74134,74136,74138,74140,74143,74145,74148,74150,74153,74155,74157,74159],{"class":99,"line":33769},[97,74100,58412],{"class":319},[97,74102,74103],{"class":370}," str",[97,74105,13755],{"class":319},[97,74107,63087],{"class":118},[97,74109,74110],{"class":103},"date",[97,74112,878],{"class":118},[97,74114,74115],{"class":111},"getFullYear",[97,74117,2618],{"class":118},[97,74119,74120],{"class":118},"}\u002F${",[97,74122,74110],{"class":103},[97,74124,878],{"class":118},[97,74126,74127],{"class":111},"getMonth",[97,74129,13241],{"class":118},[97,74131,801],{"class":319},[97,74133,25308],{"class":370},[97,74135,74120],{"class":118},[97,74137,74110],{"class":103},[97,74139,878],{"class":118},[97,74141,74142],{"class":111},"getDate",[97,74144,2618],{"class":118},[97,74146,74147],{"class":118},"} ${",[97,74149,735],{"class":103},[97,74151,74152],{"class":118},"}:${",[97,74154,864],{"class":103},[97,74156,74152],{"class":118},[97,74158,1015],{"class":103},[97,74160,74161],{"class":118},"}`\n",[97,74163,74164,74167],{"class":99,"line":33775},[97,74165,74166],{"class":319},"      return",[97,74168,74169],{"class":103}," str\n",[97,74171,74172],{"class":99,"line":33781},[97,74173,2378],{"class":103},[97,74175,74176],{"class":99,"line":33808},[97,74177,74178],{"class":191},"    \u002F\u002F 渲染函数\n",[97,74180,74181,74183,74185,74187,74189,74191,74193,74195],{"class":99,"line":33832},[97,74182,11412],{"class":319},[97,74184,69931],{"class":370},[97,74186,13755],{"class":319},[97,74188,54580],{"class":103},[97,74190,54583],{"class":111},[97,74192,323],{"class":103},[97,74194,69942],{"class":118},[97,74196,329],{"class":103},[97,74198,74199,74201,74203],{"class":99,"line":33838},[97,74200,70268],{"class":319},[97,74202,70271],{"class":111},[97,74204,11044],{"class":103},[97,74206,74207],{"class":99,"line":33844},[97,74208,74209],{"class":191},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[97,74211,74212],{"class":99,"line":33850},[97,74213,74214],{"class":191},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[97,74216,74217,74219,74222,74224,74226,74229,74231,74233,74235,74238,74240,74243],{"class":99,"line":33861},[97,74218,58412],{"class":319},[97,74220,74221],{"class":370}," trArr",[97,74223,13755],{"class":319},[97,74225,52149],{"class":103},[97,74227,74228],{"class":111},"map",[97,74230,323],{"class":103},[97,74232,54633],{"class":319},[97,74234,1850],{"class":103},[97,74236,74237],{"class":5407},"ele",[97,74239,12626],{"class":103},[97,74241,74242],{"class":5407},"index",[97,74244,12633],{"class":103},[97,74246,74247,74249],{"class":99,"line":33872},[97,74248,14943],{"class":319},[97,74250,70352],{"class":118},[97,74252,74253],{"class":99,"line":33878},[97,74254,74255],{"class":118},"      \u003Ctr>\n",[97,74257,74258,74260,74262,74264,74267],{"class":99,"line":33895},[97,74259,70357],{"class":118},[97,74261,74237],{"class":103},[97,74263,878],{"class":118},[97,74265,74266],{"class":103},"unameId",[97,74268,70372],{"class":118},[97,74270,74271,74273,74275,74277,74279],{"class":99,"line":33918},[97,74272,70357],{"class":118},[97,74274,74237],{"class":103},[97,74276,878],{"class":118},[97,74278,70388],{"class":103},[97,74280,70372],{"class":118},[97,74282,74283,74285,74287,74289,74291],{"class":99,"line":33941},[97,74284,70357],{"class":118},[97,74286,74237],{"class":103},[97,74288,878],{"class":118},[97,74290,70405],{"class":103},[97,74292,70372],{"class":118},[97,74294,74295,74297,74299,74301,74303],{"class":99,"line":33947},[97,74296,70357],{"class":118},[97,74298,74237],{"class":103},[97,74300,878],{"class":118},[97,74302,70422],{"class":103},[97,74304,70372],{"class":118},[97,74306,74307,74309,74311,74313,74315],{"class":99,"line":33952},[97,74308,70357],{"class":118},[97,74310,74237],{"class":103},[97,74312,878],{"class":118},[97,74314,70439],{"class":103},[97,74316,70372],{"class":118},[97,74318,74319,74321,74323,74325,74327],{"class":99,"line":33961},[97,74320,70357],{"class":118},[97,74322,74237],{"class":103},[97,74324,878],{"class":118},[97,74326,70456],{"class":103},[97,74328,70372],{"class":118},[97,74330,74331,74333,74335,74337,74339],{"class":99,"line":33971},[97,74332,70357],{"class":118},[97,74334,74237],{"class":103},[97,74336,878],{"class":118},[97,74338,2578],{"class":103},[97,74340,70372],{"class":118},[97,74342,74343],{"class":99,"line":33977},[97,74344,73799],{"class":118},[97,74346,74347,74350,74352],{"class":99,"line":33982},[97,74348,74349],{"class":118},"          \u003Ca href=\"#\" data-id=\"${",[97,74351,74242],{"class":103},[97,74353,74354],{"class":118},"}\">删除\u003C\u002Fa>\n",[97,74356,74357],{"class":99,"line":33988},[97,74358,73809],{"class":118},[97,74360,74361],{"class":99,"line":34001},[97,74362,74363],{"class":118},"      \u003C\u002Ftr>\n",[97,74365,74366],{"class":99,"line":34007},[97,74367,74368],{"class":118},"  `\n",[97,74370,74371],{"class":99,"line":34018},[97,74372,64999],{"class":103},[97,74374,74375,74377,74379],{"class":99,"line":34029},[97,74376,58428],{"class":103},[97,74378,58431],{"class":111},[97,74380,74381],{"class":103},"(trArr)\n",[97,74383,74384],{"class":99,"line":34048},[97,74385,2591],{"emptyLinePlaceholder":249},[97,74387,74388],{"class":99,"line":49708},[97,74389,74390],{"class":191},"      \u002F\u002F (2) 把数组转换为字符串join\n",[97,74392,74393],{"class":99,"line":49713},[97,74394,74395],{"class":191},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[97,74397,74398,74400,74402,74405,74408,74410,74413],{"class":99,"line":49722},[97,74399,70283],{"class":103},[97,74401,115],{"class":319},[97,74403,74404],{"class":103}," trArr.",[97,74406,74407],{"class":111},"join",[97,74409,323],{"class":103},[97,74411,74412],{"class":118},"''",[97,74414,329],{"class":103},[97,74416,74417],{"class":99,"line":49731},[97,74418,74419],{"class":191},"      \u002F\u002F 显示共有几条\n",[97,74421,74422,74424,74426,74428,74431,74434,74436,74438],{"class":99,"line":49736},[97,74423,55955],{"class":103},[97,74425,54583],{"class":111},[97,74427,323],{"class":103},[97,74429,74430],{"class":118},"'.total span'",[97,74432,74433],{"class":103},").innerHTML ",[97,74435,115],{"class":319},[97,74437,52149],{"class":103},[97,74439,56015],{"class":370},[97,74441,74442],{"class":99,"line":49741},[97,74443,2378],{"class":103},[97,74445,74446],{"class":99,"line":49746},[97,74447,74448],{"class":191},"    \u002F\u002F render()\n",[97,74450,74451],{"class":99,"line":49759},[97,74452,2591],{"emptyLinePlaceholder":249},[97,74454,74455],{"class":99,"line":49764},[97,74456,74457],{"class":191},"    \u002F\u002F 获取DOM对象\n",[97,74459,74460,74462,74464,74466,74468,74470,74472,74474],{"class":99,"line":49773},[97,74461,11412],{"class":319},[97,74463,70005],{"class":370},[97,74465,13755],{"class":319},[97,74467,54580],{"class":103},[97,74469,54583],{"class":111},[97,74471,323],{"class":103},[97,74473,70016],{"class":118},[97,74475,329],{"class":103},[97,74477,74478,74480,74482,74484,74486,74488,74490,74492],{"class":99,"line":49782},[97,74479,11412],{"class":319},[97,74481,69832],{"class":370},[97,74483,13755],{"class":319},[97,74485,54580],{"class":103},[97,74487,54583],{"class":111},[97,74489,323],{"class":103},[97,74491,69843],{"class":118},[97,74493,329],{"class":103},[97,74495,74496,74498,74500,74502,74504,74506,74508,74510],{"class":99,"line":49799},[97,74497,11412],{"class":319},[97,74499,15879],{"class":370},[97,74501,13755],{"class":319},[97,74503,54580],{"class":103},[97,74505,54583],{"class":111},[97,74507,323],{"class":103},[97,74509,69862],{"class":118},[97,74511,329],{"class":103},[97,74513,74515,74517,74519,74521,74523,74525,74527,74529],{"class":99,"line":74514},231,[97,74516,11412],{"class":319},[97,74518,69891],{"class":370},[97,74520,13755],{"class":319},[97,74522,54580],{"class":103},[97,74524,54583],{"class":111},[97,74526,323],{"class":103},[97,74528,69902],{"class":118},[97,74530,329],{"class":103},[97,74532,74534,74536,74538,74540,74542,74544,74546,74548],{"class":99,"line":74533},232,[97,74535,11412],{"class":319},[97,74537,69871],{"class":370},[97,74539,13755],{"class":319},[97,74541,54580],{"class":103},[97,74543,54583],{"class":111},[97,74545,323],{"class":103},[97,74547,69882],{"class":118},[97,74549,329],{"class":103},[97,74551,74553,74555,74557,74559,74561,74563,74565,74567],{"class":99,"line":74552},233,[97,74554,11412],{"class":319},[97,74556,69911],{"class":370},[97,74558,13755],{"class":319},[97,74560,54580],{"class":103},[97,74562,54583],{"class":111},[97,74564,323],{"class":103},[97,74566,69922],{"class":118},[97,74568,329],{"class":103},[97,74570,74572],{"class":99,"line":74571},234,[97,74573,2591],{"emptyLinePlaceholder":249},[97,74575,74577],{"class":99,"line":74576},235,[97,74578,74579],{"class":191},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[97,74581,74583,74585,74587,74589,74591,74593,74595,74597,74599],{"class":99,"line":74582},236,[97,74584,70023],{"class":103},[97,74586,57997],{"class":111},[97,74588,323],{"class":103},[97,74590,70030],{"class":118},[97,74592,12626],{"class":103},[97,74594,54633],{"class":319},[97,74596,1850],{"class":103},[97,74598,395],{"class":5407},[97,74600,12633],{"class":103},[97,74602,74604],{"class":99,"line":74603},237,[97,74605,74606],{"class":191},"      \u002F\u002F 禁止浏览器跳转\n",[97,74608,74610,74612,74614],{"class":99,"line":74609},238,[97,74611,70050],{"class":103},[97,74613,70053],{"class":111},[97,74615,2167],{"class":103},[97,74617,74619],{"class":99,"line":74618},239,[97,74620,74621],{"class":191},"      \u002F\u002F 非空判断\n",[97,74623,74625],{"class":99,"line":74624},240,[97,74626,74627],{"class":191},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[97,74629,74631],{"class":99,"line":74630},241,[97,74632,74633],{"class":191},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[97,74635,74637,74639,74641,74643,74646,74648,74651,74654,74656,74658],{"class":99,"line":74636},242,[97,74638,54664],{"class":319},[97,74640,1850],{"class":103},[97,74642,546],{"class":319},[97,74644,74645],{"class":103},"uname.value ",[97,74647,71541],{"class":319},[97,74649,74650],{"class":319}," !",[97,74652,74653],{"class":103},"age.value ",[97,74655,71541],{"class":319},[97,74657,74650],{"class":319},[97,74659,74660],{"class":103},"salary.value) {\n",[97,74662,74664,74666,74668,74670,74672],{"class":99,"line":74663},243,[97,74665,14943],{"class":319},[97,74667,70124],{"class":111},[97,74669,323],{"class":103},[97,74671,70129],{"class":118},[97,74673,329],{"class":103},[97,74675,74677],{"class":99,"line":74676},244,[97,74678,52582],{"class":103},[97,74680,74682,74684,74686],{"class":99,"line":74681},245,[97,74683,58191],{"class":103},[97,74685,52068],{"class":111},[97,74687,74688],{"class":103},"({\n",[97,74690,74692],{"class":99,"line":74691},246,[97,74693,74694],{"class":191},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[97,74696,74698],{"class":99,"line":74697},247,[97,74699,74700],{"class":191},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[97,74702,74704],{"class":99,"line":74703},248,[97,74705,74706],{"class":191},"        \u002F\u002F 对象的序号应为数组长度+1\n",[97,74708,74710],{"class":99,"line":74709},249,[97,74711,74712],{"class":191},"        \u002F\u002F unameId: arr.length + 1,\n",[97,74714,74716],{"class":99,"line":74715},250,[97,74717,2591],{"emptyLinePlaceholder":249},[97,74719,74721],{"class":99,"line":74720},251,[97,74722,74723],{"class":191},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[97,74725,74727],{"class":99,"line":74726},252,[97,74728,74729],{"class":191},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[97,74731,74733],{"class":99,"line":74732},253,[97,74734,74735],{"class":191},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[97,74737,74739],{"class":99,"line":74738},254,[97,74740,74741],{"class":191},"        \u002F\u002F 0当假看\n",[97,74743,74745,74748,74750,74752,74755,74757,74759,74761,74764,74766,74768,74771,74773],{"class":99,"line":74744},255,[97,74746,74747],{"class":103},"        unameId: arr.",[97,74749,52152],{"class":370},[97,74751,73998],{"class":319},[97,74753,74754],{"class":103}," arr[arr.",[97,74756,52152],{"class":370},[97,74758,52455],{"class":319},[97,74760,25308],{"class":370},[97,74762,74763],{"class":103},"].unameId ",[97,74765,801],{"class":319},[97,74767,25308],{"class":370},[97,74769,74770],{"class":319}," :",[97,74772,25308],{"class":370},[97,74774,31656],{"class":103},[97,74776,74778],{"class":99,"line":74777},256,[97,74779,70177],{"class":103},[97,74781,74783],{"class":99,"line":74782},257,[97,74784,70182],{"class":103},[97,74786,74788],{"class":99,"line":74787},258,[97,74789,70192],{"class":103},[97,74791,74793],{"class":99,"line":74792},259,[97,74794,70187],{"class":103},[97,74796,74798],{"class":99,"line":74797},260,[97,74799,74800],{"class":103},"        city: city.value,\n",[97,74802,74804],{"class":99,"line":74803},261,[97,74805,74806],{"class":191},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[97,74808,74810],{"class":99,"line":74809},262,[97,74811,74812],{"class":191},"        \u002F\u002F time: new Date().toDateString()\n",[97,74814,74816,74819,74822],{"class":99,"line":74815},263,[97,74817,74818],{"class":103},"        time: ",[97,74820,74821],{"class":111},"getTime",[97,74823,2167],{"class":103},[97,74825,74827],{"class":99,"line":74826},264,[97,74828,64999],{"class":103},[97,74830,74832],{"class":99,"line":74831},265,[97,74833,74834],{"class":191},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[97,74836,74838,74840],{"class":99,"line":74837},266,[97,74839,70252],{"class":111},[97,74841,2167],{"class":103},[97,74843,74845,74847,74849,74851,74853],{"class":99,"line":74844},267,[97,74846,70235],{"class":370},[97,74848,878],{"class":103},[97,74850,70240],{"class":111},[97,74852,13241],{"class":103},[97,74854,74855],{"class":191},"\u002F\u002F重置表单\n",[97,74857,74859],{"class":99,"line":74858},268,[97,74860,74861],{"class":191},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[97,74863,74865,74868,74870,74872,74875,74877,74879,74881,74883],{"class":99,"line":74864},269,[97,74866,74867],{"class":103},"      localStorage.",[97,74869,71838],{"class":111},[97,74871,323],{"class":103},[97,74873,74874],{"class":118},"'data'",[97,74876,12626],{"class":103},[97,74878,71848],{"class":370},[97,74880,878],{"class":103},[97,74882,71853],{"class":111},[97,74884,74885],{"class":103},"(arr))\n",[97,74887,74889],{"class":99,"line":74888},270,[97,74890,33651],{"class":103},[97,74892,74894],{"class":99,"line":74893},271,[97,74895,2591],{"emptyLinePlaceholder":249},[97,74897,74899],{"class":99,"line":74898},272,[97,74900,74901],{"class":191},"    \u002F\u002F 3.删除业务\n",[97,74903,74905],{"class":99,"line":74904},273,[97,74906,74907],{"class":191},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[97,74909,74911,74913,74915,74917,74919,74921,74923,74925,74927],{"class":99,"line":74910},274,[97,74912,70525],{"class":103},[97,74914,57997],{"class":111},[97,74916,323],{"class":103},[97,74918,58002],{"class":118},[97,74920,12626],{"class":103},[97,74922,54633],{"class":319},[97,74924,1850],{"class":103},[97,74926,395],{"class":5407},[97,74928,12633],{"class":103},[97,74930,74932],{"class":99,"line":74931},275,[97,74933,74934],{"class":191},"      \u002F\u002F 判断是否点击的是删除按钮\n",[97,74936,74938,74940,74942,74944,74946],{"class":99,"line":74937},276,[97,74939,54664],{"class":319},[97,74941,67218],{"class":103},[97,74943,54670],{"class":319},[97,74945,68440],{"class":118},[97,74947,12633],{"class":103},[97,74949,74951],{"class":99,"line":74950},277,[97,74952,74953],{"class":191},"        \u002F\u002F alert(1)\n",[97,74955,74957],{"class":99,"line":74956},278,[97,74958,74959],{"class":191},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[97,74961,74963],{"class":99,"line":74962},279,[97,74964,74965],{"class":191},"        \u002F\u002F console.log(e.target)\n",[97,74967,74969],{"class":99,"line":74968},280,[97,74970,74971],{"class":191},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[97,74973,74975],{"class":99,"line":74974},281,[97,74976,2591],{"emptyLinePlaceholder":249},[97,74978,74980],{"class":99,"line":74979},282,[97,74981,74982],{"class":191},"        \u002F\u002F 确认框，确然是否真的要删除\n",[97,74984,74986],{"class":99,"line":74985},283,[97,74987,74988],{"class":191},"        \u002F\u002F confirm()为确认框\n",[97,74990,74992],{"class":99,"line":74991},284,[97,74993,74994],{"class":191},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[97,74996,74998,75000,75002,75005,75007,75010],{"class":99,"line":74997},285,[97,74999,2688],{"class":319},[97,75001,1850],{"class":103},[97,75003,75004],{"class":111},"confirm",[97,75006,323],{"class":103},[97,75008,75009],{"class":118},"'您确定要删除这条数据吗？'",[97,75011,75012],{"class":103},")) {\n",[97,75014,75016,75019,75021,75023,75025],{"class":99,"line":75015},286,[97,75017,75018],{"class":103},"          arr.",[97,75020,58194],{"class":111},[97,75022,70578],{"class":103},[97,75024,537],{"class":370},[97,75026,329],{"class":103},[97,75028,75030],{"class":99,"line":75029},287,[97,75031,75032],{"class":191},"          \u002F\u002F 3.4 重新渲染页面\n",[97,75034,75036,75039],{"class":99,"line":75035},288,[97,75037,75038],{"class":111},"          render",[97,75040,2167],{"class":103},[97,75042,75044],{"class":99,"line":75043},289,[97,75045,75046],{"class":191},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[97,75048,75050,75053,75055,75057,75059,75061,75063,75065,75067],{"class":99,"line":75049},290,[97,75051,75052],{"class":103},"          localStorage.",[97,75054,71838],{"class":111},[97,75056,323],{"class":103},[97,75058,74874],{"class":118},[97,75060,12626],{"class":103},[97,75062,71848],{"class":370},[97,75064,878],{"class":103},[97,75066,71853],{"class":111},[97,75068,74885],{"class":103},[97,75070,75072],{"class":99,"line":75071},291,[97,75073,2720],{"class":103},[97,75075,75077],{"class":99,"line":75076},292,[97,75078,52582],{"class":103},[97,75080,75082],{"class":99,"line":75081},293,[97,75083,2591],{"emptyLinePlaceholder":249},[97,75085,75087],{"class":99,"line":75086},294,[97,75088,33651],{"class":103},[97,75090,75092],{"class":99,"line":75091},295,[97,75093,2591],{"emptyLinePlaceholder":249},[97,75095,75097,75099,75101],{"class":99,"line":75096},296,[97,75098,52601],{"class":103},[97,75100,51997],{"class":107},[97,75102,130],{"class":103},[97,75104,75106,75108,75110],{"class":99,"line":75105},297,[97,75107,51969],{"class":103},[97,75109,51984],{"class":107},[97,75111,130],{"class":103},[97,75113,75115],{"class":99,"line":75114},298,[97,75116,2591],{"emptyLinePlaceholder":249},[97,75118,75120,75122,75124],{"class":99,"line":75119},299,[97,75121,51969],{"class":103},[97,75123,50825],{"class":107},[97,75125,130],{"class":103},[14,75127,75129],{"id":75128},"_36-正则表达式","3.6 正则表达式",[24,75131,75132],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[24,75134,75135],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[24,75137,75138],{},"正则表达式的作用：",[67,75140,75141,75148,75154],{},[70,75142,75143,75144,75147],{},"表单验证（ ",[469,75145,75146],{},"匹配"," ）",[70,75149,75150,75151,75147],{},"过滤敏感词（ ",[469,75152,75153],{},"替换",[70,75155,75156,75157,75147],{},"字符串中提取我们想要的部分（ ",[469,75158,75159],{},"提取",[48,75161,75163],{"id":75162},"_361-语法","3.6.1 语法",[24,75165,75166],{},"正则表达式使用步骤：",[138,75168,75169,75172],{},[70,75170,75171],{},"定义规则",[70,75173,75174],{},"查找是否匹配",[24,75176,75177],{},"正则表达式里边不需要写引号",[24,75179,75180],{},[19,75181],{"alt":92,"src":75182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[24,75184,75185],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[24,75187,75188],{},"reg.test(str)",[24,75190,75191],{},[19,75192],{"alt":92,"src":75193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[24,75195,75196],{},[19,75197],{"alt":92,"src":75198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[48,75200,75202],{"id":75201},"_362-元字符","3.6.2 元字符",[138,75204,75205,75208,75211,75214,75221],{},[70,75206,75207],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[70,75209,75210],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[70,75212,75213],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[70,75215,75216,75217],{},"正则验证工具：",[558,75218,75219],{"href":75219,"rel":75220},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24054],[70,75222,75223],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[160,75225,75227],{"id":75226},"_3621-边界符","3.6.2.1 边界符",[24,75229,75230],{},[19,75231],{"alt":92,"src":75232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[24,75234,75235],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[24,75237,75238],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[24,75240,75241],{},"只匹配一次",[24,75243,75244],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[160,75246,75248],{"id":75247},"_3622-量词","3.6.2.2 量词",[24,75250,75251],{},[19,75252],{"alt":92,"src":75253},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[24,75255,75256],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[160,75258,75260],{"id":75259},"_3623-元字符","3.6.2.3 元字符",[24,75262,75263],{},[19,75264],{"alt":92,"src":75265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[24,75267,75268],{},"匹配的是a或b或c []只选一个",[24,75270,75271],{},[19,75272],{"alt":92,"src":75273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[24,75275,75276],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[24,75278,75279],{},[19,75280],{"alt":92,"src":75281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[24,75283,75284],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[24,75286,75287],{},[19,75288],{"alt":92,"src":75289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[87,75291,75293],{"className":50823,"code":75292,"language":50825,"meta":92,"style":92},"\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",[94,75294,75295,75305,75319,75323,75331,75345,75365,75377,75385,75389,75397,75405,75410,75441,75468,75496,75500,75505,75533,75564,75569,75574,75605,75637,75669,75673,75678,75709,75739,75769,75773,75778,75809,75840,75870,75900,75904,75909,75942,75946,75951,75982,76013,76017,76022,76053,76083,76114,76118,76123,76155,76186,76217,76244,76275,76307,76340,76371,76402,76434,76465,76473,76481,76485],{"__ignoreMap":92},[97,75296,75297,75299,75301,75303],{"class":99,"line":100},[97,75298,51487],{"class":103},[97,75300,51490],{"class":107},[97,75302,51493],{"class":111},[97,75304,130],{"class":103},[97,75306,75307,75309,75311,75313,75315,75317],{"class":99,"line":195},[97,75308,104],{"class":103},[97,75310,50825],{"class":107},[97,75312,51504],{"class":111},[97,75314,115],{"class":103},[97,75316,51509],{"class":118},[97,75318,130],{"class":103},[97,75320,75321],{"class":99,"line":241},[97,75322,2591],{"emptyLinePlaceholder":249},[97,75324,75325,75327,75329],{"class":99,"line":1387},[97,75326,104],{"class":103},[97,75328,51522],{"class":107},[97,75330,130],{"class":103},[97,75332,75333,75335,75337,75339,75341,75343],{"class":99,"line":1393},[97,75334,52328],{"class":103},[97,75336,108],{"class":107},[97,75338,51534],{"class":111},[97,75340,115],{"class":103},[97,75342,51539],{"class":118},[97,75344,130],{"class":103},[97,75346,75347,75349,75351,75353,75355,75357,75359,75361,75363],{"class":99,"line":1407},[97,75348,52328],{"class":103},[97,75350,108],{"class":107},[97,75352,112],{"class":111},[97,75354,115],{"class":103},[97,75356,119],{"class":118},[97,75358,122],{"class":111},[97,75360,115],{"class":103},[97,75362,127],{"class":118},[97,75364,130],{"class":103},[97,75366,75367,75369,75371,75373,75375],{"class":99,"line":1413},[97,75368,52328],{"class":103},[97,75370,51591],{"class":107},[97,75372,51594],{"class":103},[97,75374,51591],{"class":107},[97,75376,130],{"class":103},[97,75378,75379,75381,75383],{"class":99,"line":1504},[97,75380,51969],{"class":103},[97,75382,51522],{"class":107},[97,75384,130],{"class":103},[97,75386,75387],{"class":99,"line":1510},[97,75388,2591],{"emptyLinePlaceholder":249},[97,75390,75391,75393,75395],{"class":99,"line":1522},[97,75392,104],{"class":103},[97,75394,51984],{"class":107},[97,75396,130],{"class":103},[97,75398,75399,75401,75403],{"class":99,"line":1804},[97,75400,52328],{"class":103},[97,75402,51997],{"class":107},[97,75404,130],{"class":103},[97,75406,75407],{"class":99,"line":1809},[97,75408,75409],{"class":191},"    \u002F\u002F 元字符中\n",[97,75411,75412,75414,75416,75418,75420,75423,75425,75427,75430,75432,75435,75438],{"class":99,"line":1815},[97,75413,73937],{"class":103},[97,75415,58431],{"class":111},[97,75417,323],{"class":103},[97,75419,904],{"class":118},[97,75421,75422],{"class":48167},"哈",[97,75424,904],{"class":118},[97,75426,878],{"class":103},[97,75428,75429],{"class":111},"test",[97,75431,323],{"class":103},[97,75433,75434],{"class":118},"'哈'",[97,75436,75437],{"class":103},"))  ",[97,75439,75440],{"class":191},"\u002F\u002Ftrue\n",[97,75442,75443,75445,75447,75449,75451,75453,75455,75457,75459,75461,75464,75466],{"class":99,"line":1820},[97,75444,73937],{"class":103},[97,75446,58431],{"class":111},[97,75448,323],{"class":103},[97,75450,904],{"class":118},[97,75452,75422],{"class":48167},[97,75454,904],{"class":118},[97,75456,878],{"class":103},[97,75458,75429],{"class":111},[97,75460,323],{"class":103},[97,75462,75463],{"class":118},"'哈哈'",[97,75465,75437],{"class":103},[97,75467,75440],{"class":191},[97,75469,75470,75472,75474,75476,75478,75480,75482,75484,75486,75488,75491,75494],{"class":99,"line":1834},[97,75471,73937],{"class":103},[97,75473,58431],{"class":111},[97,75475,323],{"class":103},[97,75477,904],{"class":118},[97,75479,75422],{"class":48167},[97,75481,904],{"class":118},[97,75483,878],{"class":103},[97,75485,75429],{"class":111},[97,75487,323],{"class":103},[97,75489,75490],{"class":118},"'二哈'",[97,75492,75493],{"class":103},"))   ",[97,75495,75440],{"class":191},[97,75497,75498],{"class":99,"line":1839},[97,75499,2591],{"emptyLinePlaceholder":249},[97,75501,75502],{"class":99,"line":1845},[97,75503,75504],{"class":191},"    \u002F\u002F 1.边界符\n",[97,75506,75507,75509,75511,75513,75515,75517,75519,75521,75523,75525,75527,75529,75531],{"class":99,"line":1866},[97,75508,73937],{"class":103},[97,75510,58431],{"class":111},[97,75512,323],{"class":103},[97,75514,904],{"class":118},[97,75516,1285],{"class":319},[97,75518,75422],{"class":48167},[97,75520,904],{"class":118},[97,75522,878],{"class":103},[97,75524,75429],{"class":111},[97,75526,323],{"class":103},[97,75528,75434],{"class":118},[97,75530,75437],{"class":103},[97,75532,75440],{"class":191},[97,75534,75535,75537,75539,75541,75543,75545,75547,75549,75551,75553,75555,75557,75559,75561],{"class":99,"line":1871},[97,75536,73937],{"class":103},[97,75538,58431],{"class":111},[97,75540,323],{"class":103},[97,75542,904],{"class":118},[97,75544,1285],{"class":319},[97,75546,75422],{"class":48167},[97,75548,622],{"class":319},[97,75550,904],{"class":118},[97,75552,878],{"class":103},[97,75554,75429],{"class":111},[97,75556,323],{"class":103},[97,75558,75463],{"class":118},[97,75560,75437],{"class":103},[97,75562,75563],{"class":191},"\u002F\u002Ffalse\n",[97,75565,75566],{"class":99,"line":1885},[97,75567,75568],{"class":191},"    \u002F\u002F 2.量词\n",[97,75570,75571],{"class":99,"line":1890},[97,75572,75573],{"class":191},"    \u002F\u002F 量词 * 类似于 >= 0\n",[97,75575,75576,75578,75580,75582,75584,75586,75588,75591,75593,75595,75597,75599,75601,75603],{"class":99,"line":1919},[97,75577,73937],{"class":103},[97,75579,58431],{"class":111},[97,75581,323],{"class":103},[97,75583,904],{"class":118},[97,75585,1285],{"class":319},[97,75587,75422],{"class":48167},[97,75589,75590],{"class":319},"*$",[97,75592,904],{"class":118},[97,75594,878],{"class":103},[97,75596,75429],{"class":111},[97,75598,323],{"class":103},[97,75600,75463],{"class":118},[97,75602,75437],{"class":103},[97,75604,75440],{"class":191},[97,75606,75607,75609,75611,75613,75615,75617,75619,75621,75623,75625,75627,75629,75632,75634],{"class":99,"line":1924},[97,75608,73937],{"class":103},[97,75610,58431],{"class":111},[97,75612,323],{"class":103},[97,75614,904],{"class":118},[97,75616,1285],{"class":319},[97,75618,75422],{"class":48167},[97,75620,75590],{"class":319},[97,75622,904],{"class":118},[97,75624,878],{"class":103},[97,75626,75429],{"class":111},[97,75628,323],{"class":103},[97,75630,75631],{"class":118},"'二哈好傻'",[97,75633,75437],{"class":103},[97,75635,75636],{"class":191},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[97,75638,75639,75641,75643,75645,75647,75649,75651,75653,75655,75657,75659,75661,75664,75666],{"class":99,"line":1941},[97,75640,73937],{"class":103},[97,75642,58431],{"class":111},[97,75644,323],{"class":103},[97,75646,904],{"class":118},[97,75648,1285],{"class":319},[97,75650,75422],{"class":48167},[97,75652,75590],{"class":319},[97,75654,904],{"class":118},[97,75656,878],{"class":103},[97,75658,75429],{"class":111},[97,75660,323],{"class":103},[97,75662,75663],{"class":118},"'哈好哈'",[97,75665,75493],{"class":103},[97,75667,75668],{"class":191},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[97,75670,75671],{"class":99,"line":1946},[97,75672,2591],{"emptyLinePlaceholder":249},[97,75674,75675],{"class":99,"line":1951},[97,75676,75677],{"class":191},"    \u002F\u002F +类似于>=1\n",[97,75679,75680,75682,75684,75686,75688,75690,75692,75695,75697,75699,75701,75703,75705,75707],{"class":99,"line":1956},[97,75681,73937],{"class":103},[97,75683,58431],{"class":111},[97,75685,323],{"class":103},[97,75687,904],{"class":118},[97,75689,1285],{"class":319},[97,75691,75422],{"class":48167},[97,75693,75694],{"class":319},"+$",[97,75696,904],{"class":118},[97,75698,878],{"class":103},[97,75700,75429],{"class":111},[97,75702,323],{"class":103},[97,75704,75463],{"class":118},[97,75706,75437],{"class":103},[97,75708,75440],{"class":191},[97,75710,75711,75713,75715,75717,75719,75721,75723,75725,75727,75729,75731,75733,75735,75737],{"class":99,"line":1970},[97,75712,73937],{"class":103},[97,75714,58431],{"class":111},[97,75716,323],{"class":103},[97,75718,904],{"class":118},[97,75720,1285],{"class":319},[97,75722,75422],{"class":48167},[97,75724,75694],{"class":319},[97,75726,904],{"class":118},[97,75728,878],{"class":103},[97,75730,75429],{"class":111},[97,75732,323],{"class":103},[97,75734,75631],{"class":118},[97,75736,75437],{"class":103},[97,75738,75636],{"class":191},[97,75740,75741,75743,75745,75747,75749,75751,75753,75755,75757,75759,75761,75763,75765,75767],{"class":99,"line":1975},[97,75742,73937],{"class":103},[97,75744,58431],{"class":111},[97,75746,323],{"class":103},[97,75748,904],{"class":118},[97,75750,1285],{"class":319},[97,75752,75422],{"class":48167},[97,75754,75694],{"class":319},[97,75756,904],{"class":118},[97,75758,878],{"class":103},[97,75760,75429],{"class":111},[97,75762,323],{"class":103},[97,75764,75663],{"class":118},[97,75766,75493],{"class":103},[97,75768,75563],{"class":191},[97,75770,75771],{"class":99,"line":2768},[97,75772,2591],{"emptyLinePlaceholder":249},[97,75774,75775],{"class":99,"line":2782},[97,75776,75777],{"class":191},"    \u002F\u002F ?类似于0次或一次\n",[97,75779,75780,75782,75784,75786,75788,75790,75793,75795,75797,75799,75801,75803,75805,75807],{"class":99,"line":2790},[97,75781,73937],{"class":103},[97,75783,58431],{"class":111},[97,75785,323],{"class":103},[97,75787,904],{"class":118},[97,75789,1285],{"class":319},[97,75791,75792],{"class":48167},"哈？",[97,75794,622],{"class":319},[97,75796,904],{"class":118},[97,75798,878],{"class":103},[97,75800,75429],{"class":111},[97,75802,323],{"class":103},[97,75804,74412],{"class":118},[97,75806,75493],{"class":103},[97,75808,75440],{"class":191},[97,75810,75811,75813,75815,75817,75819,75821,75823,75826,75828,75830,75832,75834,75836,75838],{"class":99,"line":2795},[97,75812,73937],{"class":103},[97,75814,58431],{"class":111},[97,75816,323],{"class":103},[97,75818,904],{"class":118},[97,75820,1285],{"class":319},[97,75822,75422],{"class":48167},[97,75824,75825],{"class":319},"?$",[97,75827,904],{"class":118},[97,75829,878],{"class":103},[97,75831,75429],{"class":111},[97,75833,323],{"class":103},[97,75835,75463],{"class":118},[97,75837,75437],{"class":103},[97,75839,75563],{"class":191},[97,75841,75842,75844,75846,75848,75850,75852,75854,75856,75858,75860,75862,75864,75866,75868],{"class":99,"line":2801},[97,75843,73937],{"class":103},[97,75845,58431],{"class":111},[97,75847,323],{"class":103},[97,75849,904],{"class":118},[97,75851,1285],{"class":319},[97,75853,75422],{"class":48167},[97,75855,75825],{"class":319},[97,75857,904],{"class":118},[97,75859,878],{"class":103},[97,75861,75429],{"class":111},[97,75863,323],{"class":103},[97,75865,75631],{"class":118},[97,75867,75437],{"class":103},[97,75869,75636],{"class":191},[97,75871,75872,75874,75876,75878,75880,75882,75884,75886,75888,75890,75892,75894,75896,75898],{"class":99,"line":2807},[97,75873,73937],{"class":103},[97,75875,58431],{"class":111},[97,75877,323],{"class":103},[97,75879,904],{"class":118},[97,75881,1285],{"class":319},[97,75883,75422],{"class":48167},[97,75885,75825],{"class":319},[97,75887,904],{"class":118},[97,75889,878],{"class":103},[97,75891,75429],{"class":111},[97,75893,323],{"class":103},[97,75895,75663],{"class":118},[97,75897,75437],{"class":103},[97,75899,75563],{"class":191},[97,75901,75902],{"class":99,"line":2812},[97,75903,2591],{"emptyLinePlaceholder":249},[97,75905,75906],{"class":99,"line":8139},[97,75907,75908],{"class":191},"    \u002F\u002F {n}写几，就必须出现几次\n",[97,75910,75911,75913,75915,75917,75919,75921,75923,75926,75928,75930,75932,75934,75937,75940],{"class":99,"line":8163},[97,75912,73937],{"class":103},[97,75914,58431],{"class":111},[97,75916,323],{"class":103},[97,75918,904],{"class":118},[97,75920,1285],{"class":319},[97,75922,75422],{"class":48167},[97,75924,75925],{"class":319},"{4}$",[97,75927,904],{"class":118},[97,75929,878],{"class":103},[97,75931,75429],{"class":111},[97,75933,323],{"class":103},[97,75935,75936],{"class":118},"'哈哈哈哈'",[97,75938,75939],{"class":103},")) ",[97,75941,75440],{"class":191},[97,75943,75944],{"class":99,"line":8168},[97,75945,2591],{"emptyLinePlaceholder":249},[97,75947,75948],{"class":99,"line":8174},[97,75949,75950],{"class":191},"    \u002F\u002F {n,}大于等于n次\n",[97,75952,75953,75955,75957,75959,75961,75963,75965,75968,75970,75972,75974,75976,75978,75980],{"class":99,"line":8201},[97,75954,73937],{"class":103},[97,75956,58431],{"class":111},[97,75958,323],{"class":103},[97,75960,904],{"class":118},[97,75962,1285],{"class":319},[97,75964,75422],{"class":48167},[97,75966,75967],{"class":319},"{4,}$",[97,75969,904],{"class":118},[97,75971,878],{"class":103},[97,75973,75429],{"class":111},[97,75975,323],{"class":103},[97,75977,75936],{"class":118},[97,75979,75939],{"class":103},[97,75981,75440],{"class":191},[97,75983,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76009,76011],{"class":99,"line":8206},[97,75985,73937],{"class":103},[97,75987,58431],{"class":111},[97,75989,323],{"class":103},[97,75991,904],{"class":118},[97,75993,1285],{"class":319},[97,75995,75422],{"class":48167},[97,75997,75967],{"class":319},[97,75999,904],{"class":118},[97,76001,878],{"class":103},[97,76003,75429],{"class":111},[97,76005,323],{"class":103},[97,76007,76008],{"class":118},"'哈哈哈哈哈'",[97,76010,75939],{"class":103},[97,76012,75440],{"class":191},[97,76014,76015],{"class":99,"line":8212},[97,76016,2591],{"emptyLinePlaceholder":249},[97,76018,76019],{"class":99,"line":8224},[97,76020,76021],{"class":191},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[97,76023,76024,76026,76028,76030,76032,76034,76036,76039,76041,76043,76045,76047,76049,76051],{"class":99,"line":8236},[97,76025,73937],{"class":103},[97,76027,58431],{"class":111},[97,76029,323],{"class":103},[97,76031,904],{"class":118},[97,76033,1285],{"class":319},[97,76035,75422],{"class":48167},[97,76037,76038],{"class":319},"{4,6}$",[97,76040,904],{"class":118},[97,76042,878],{"class":103},[97,76044,75429],{"class":111},[97,76046,323],{"class":103},[97,76048,75936],{"class":118},[97,76050,75939],{"class":103},[97,76052,75440],{"class":191},[97,76054,76055,76057,76059,76061,76063,76065,76067,76069,76071,76073,76075,76077,76079,76081],{"class":99,"line":8248},[97,76056,73937],{"class":103},[97,76058,58431],{"class":111},[97,76060,323],{"class":103},[97,76062,904],{"class":118},[97,76064,1285],{"class":319},[97,76066,75422],{"class":48167},[97,76068,76038],{"class":319},[97,76070,904],{"class":118},[97,76072,878],{"class":103},[97,76074,75429],{"class":111},[97,76076,323],{"class":103},[97,76078,76008],{"class":118},[97,76080,75939],{"class":103},[97,76082,75440],{"class":191},[97,76084,76085,76087,76089,76091,76093,76095,76097,76099,76101,76103,76105,76107,76110,76112],{"class":99,"line":9907},[97,76086,73937],{"class":103},[97,76088,58431],{"class":111},[97,76090,323],{"class":103},[97,76092,904],{"class":118},[97,76094,1285],{"class":319},[97,76096,75422],{"class":48167},[97,76098,76038],{"class":319},[97,76100,904],{"class":118},[97,76102,878],{"class":103},[97,76104,75429],{"class":111},[97,76106,323],{"class":103},[97,76108,76109],{"class":118},"'哈哈哈哈哈哈哈'",[97,76111,75939],{"class":103},[97,76113,75563],{"class":191},[97,76115,76116],{"class":99,"line":9932},[97,76117,2591],{"emptyLinePlaceholder":249},[97,76119,76120],{"class":99,"line":9955},[97,76121,76122],{"class":191},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[97,76124,76125,76127,76129,76131,76133,76135,76138,76140,76142,76144,76146,76148,76151,76153],{"class":99,"line":9979},[97,76126,73937],{"class":103},[97,76128,58431],{"class":111},[97,76130,323],{"class":103},[97,76132,904],{"class":118},[97,76134,1285],{"class":319},[97,76136,76137],{"class":370},"[abc]",[97,76139,622],{"class":319},[97,76141,904],{"class":118},[97,76143,878],{"class":103},[97,76145,75429],{"class":111},[97,76147,323],{"class":103},[97,76149,76150],{"class":118},"'a'",[97,76152,75437],{"class":103},[97,76154,75440],{"class":191},[97,76156,76157,76159,76161,76163,76165,76167,76169,76171,76173,76175,76177,76179,76182,76184],{"class":99,"line":9984},[97,76158,73937],{"class":103},[97,76160,58431],{"class":111},[97,76162,323],{"class":103},[97,76164,904],{"class":118},[97,76166,1285],{"class":319},[97,76168,76137],{"class":370},[97,76170,622],{"class":319},[97,76172,904],{"class":118},[97,76174,878],{"class":103},[97,76176,75429],{"class":111},[97,76178,323],{"class":103},[97,76180,76181],{"class":118},"'b'",[97,76183,75437],{"class":103},[97,76185,75440],{"class":191},[97,76187,76188,76190,76192,76194,76196,76198,76200,76202,76204,76206,76208,76210,76213,76215],{"class":99,"line":9989},[97,76189,73937],{"class":103},[97,76191,58431],{"class":111},[97,76193,323],{"class":103},[97,76195,904],{"class":118},[97,76197,1285],{"class":319},[97,76199,76137],{"class":370},[97,76201,622],{"class":319},[97,76203,904],{"class":118},[97,76205,878],{"class":103},[97,76207,75429],{"class":111},[97,76209,323],{"class":103},[97,76211,76212],{"class":118},"'c'",[97,76214,75437],{"class":103},[97,76216,75440],{"class":191},[97,76218,76219,76221,76223,76225,76227,76229,76231,76233,76235,76237,76240,76242],{"class":99,"line":9994},[97,76220,73937],{"class":103},[97,76222,58431],{"class":111},[97,76224,323],{"class":103},[97,76226,904],{"class":118},[97,76228,76137],{"class":370},[97,76230,904],{"class":118},[97,76232,878],{"class":103},[97,76234,75429],{"class":111},[97,76236,323],{"class":103},[97,76238,76239],{"class":118},"'ab'",[97,76241,75437],{"class":103},[97,76243,75440],{"class":191},[97,76245,76246,76248,76250,76252,76254,76256,76258,76260,76262,76264,76266,76268,76270,76272],{"class":99,"line":10003},[97,76247,73937],{"class":103},[97,76249,58431],{"class":111},[97,76251,323],{"class":103},[97,76253,904],{"class":118},[97,76255,1285],{"class":319},[97,76257,76137],{"class":370},[97,76259,622],{"class":319},[97,76261,904],{"class":118},[97,76263,878],{"class":103},[97,76265,75429],{"class":111},[97,76267,323],{"class":103},[97,76269,76239],{"class":118},[97,76271,75437],{"class":103},[97,76273,76274],{"class":191},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[97,76276,76277,76279,76281,76283,76285,76287,76289,76292,76294,76296,76298,76300,76302,76304],{"class":99,"line":10008},[97,76278,73937],{"class":103},[97,76280,58431],{"class":111},[97,76282,323],{"class":103},[97,76284,904],{"class":118},[97,76286,1285],{"class":319},[97,76288,76137],{"class":370},[97,76290,76291],{"class":319},"{2}$",[97,76293,904],{"class":118},[97,76295,878],{"class":103},[97,76297,75429],{"class":111},[97,76299,323],{"class":103},[97,76301,76239],{"class":118},[97,76303,75437],{"class":103},[97,76305,76306],{"class":191},"\u002F\u002Ftrue   可以选两个\n",[97,76308,76309,76311,76313,76315,76317,76319,76322,76324,76326,76328,76330,76332,76335,76337],{"class":99,"line":10014},[97,76310,73937],{"class":103},[97,76312,58431],{"class":111},[97,76314,323],{"class":103},[97,76316,904],{"class":118},[97,76318,1285],{"class":319},[97,76320,76321],{"class":370},"[a-z]",[97,76323,622],{"class":319},[97,76325,904],{"class":118},[97,76327,878],{"class":103},[97,76329,75429],{"class":111},[97,76331,323],{"class":103},[97,76333,76334],{"class":118},"'p'",[97,76336,75493],{"class":103},[97,76338,76339],{"class":191},"\u002F\u002Ftrue   依然只能选一个\n",[97,76341,76342,76344,76346,76348,76350,76352,76355,76357,76359,76361,76363,76365,76367,76369],{"class":99,"line":10035},[97,76343,73937],{"class":103},[97,76345,58431],{"class":111},[97,76347,323],{"class":103},[97,76349,904],{"class":118},[97,76351,1285],{"class":319},[97,76353,76354],{"class":370},"[A-Z]",[97,76356,622],{"class":319},[97,76358,904],{"class":118},[97,76360,878],{"class":103},[97,76362,75429],{"class":111},[97,76364,323],{"class":103},[97,76366,76334],{"class":118},[97,76368,75493],{"class":103},[97,76370,75563],{"class":191},[97,76372,76373,76375,76377,76379,76381,76383,76385,76387,76389,76391,76393,76395,76398,76400],{"class":99,"line":10041},[97,76374,73937],{"class":103},[97,76376,58431],{"class":111},[97,76378,323],{"class":103},[97,76380,904],{"class":118},[97,76382,1285],{"class":319},[97,76384,76354],{"class":370},[97,76386,622],{"class":319},[97,76388,904],{"class":118},[97,76390,878],{"class":103},[97,76392,75429],{"class":111},[97,76394,323],{"class":103},[97,76396,76397],{"class":118},"'P'",[97,76399,75493],{"class":103},[97,76401,75440],{"class":191},[97,76403,76404,76406,76408,76410,76412,76414,76417,76419,76421,76423,76425,76427,76430,76432],{"class":99,"line":10055},[97,76405,73937],{"class":103},[97,76407,58431],{"class":111},[97,76409,323],{"class":103},[97,76411,904],{"class":118},[97,76413,1285],{"class":319},[97,76415,76416],{"class":370},"[0-9]",[97,76418,622],{"class":319},[97,76420,904],{"class":118},[97,76422,878],{"class":103},[97,76424,75429],{"class":111},[97,76426,323],{"class":103},[97,76428,76429],{"class":118},"'0'",[97,76431,75493],{"class":103},[97,76433,75440],{"class":191},[97,76435,76436,76438,76440,76442,76444,76446,76449,76451,76453,76455,76457,76459,76461,76463],{"class":99,"line":10061},[97,76437,73937],{"class":103},[97,76439,58431],{"class":111},[97,76441,323],{"class":103},[97,76443,904],{"class":118},[97,76445,1285],{"class":319},[97,76447,76448],{"class":370},"[a-zA-Z0-9]",[97,76450,622],{"class":319},[97,76452,904],{"class":118},[97,76454,878],{"class":103},[97,76456,75429],{"class":111},[97,76458,323],{"class":103},[97,76460,76334],{"class":118},[97,76462,75437],{"class":103},[97,76464,75440],{"class":191},[97,76466,76467,76469,76471],{"class":99,"line":10088},[97,76468,52601],{"class":103},[97,76470,51997],{"class":107},[97,76472,130],{"class":103},[97,76474,76475,76477,76479],{"class":99,"line":10097},[97,76476,51969],{"class":103},[97,76478,51984],{"class":107},[97,76480,130],{"class":103},[97,76482,76483],{"class":99,"line":10103},[97,76484,2591],{"emptyLinePlaceholder":249},[97,76486,76487,76489,76491],{"class":99,"line":10111},[97,76488,51969],{"class":103},[97,76490,50825],{"class":107},[97,76492,130],{"class":103},[160,76494,76496],{"id":76495},"_3624-修饰符","3.6.2.4 修饰符",[24,76498,76499],{},[19,76500],{"alt":92,"src":76501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[24,76503,76504],{},"replace是个方法，使用的时候一定不要忘记括号()",[24,76506,76507],{},[19,76508],{"alt":92,"src":76509},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[87,76511,76513],{"className":50823,"code":76512,"language":50825,"meta":92,"style":92},"\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",[94,76514,76515,76525,76539,76547,76561,76581,76593,76601,76609,76617,76649,76680,76685,76717,76728,76761,76770,76778,76786],{"__ignoreMap":92},[97,76516,76517,76519,76521,76523],{"class":99,"line":100},[97,76518,51487],{"class":103},[97,76520,51490],{"class":107},[97,76522,51493],{"class":111},[97,76524,130],{"class":103},[97,76526,76527,76529,76531,76533,76535,76537],{"class":99,"line":195},[97,76528,104],{"class":103},[97,76530,50825],{"class":107},[97,76532,51504],{"class":111},[97,76534,115],{"class":103},[97,76536,51509],{"class":118},[97,76538,130],{"class":103},[97,76540,76541,76543,76545],{"class":99,"line":241},[97,76542,104],{"class":103},[97,76544,51522],{"class":107},[97,76546,130],{"class":103},[97,76548,76549,76551,76553,76555,76557,76559],{"class":99,"line":1387},[97,76550,52328],{"class":103},[97,76552,108],{"class":107},[97,76554,51534],{"class":111},[97,76556,115],{"class":103},[97,76558,51539],{"class":118},[97,76560,130],{"class":103},[97,76562,76563,76565,76567,76569,76571,76573,76575,76577,76579],{"class":99,"line":1393},[97,76564,52328],{"class":103},[97,76566,108],{"class":107},[97,76568,112],{"class":111},[97,76570,115],{"class":103},[97,76572,119],{"class":118},[97,76574,122],{"class":111},[97,76576,115],{"class":103},[97,76578,127],{"class":118},[97,76580,130],{"class":103},[97,76582,76583,76585,76587,76589,76591],{"class":99,"line":1407},[97,76584,52328],{"class":103},[97,76586,51591],{"class":107},[97,76588,51594],{"class":103},[97,76590,51591],{"class":107},[97,76592,130],{"class":103},[97,76594,76595,76597,76599],{"class":99,"line":1413},[97,76596,51969],{"class":103},[97,76598,51522],{"class":107},[97,76600,130],{"class":103},[97,76602,76603,76605,76607],{"class":99,"line":1504},[97,76604,104],{"class":103},[97,76606,51984],{"class":107},[97,76608,130],{"class":103},[97,76610,76611,76613,76615],{"class":99,"line":1510},[97,76612,52328],{"class":103},[97,76614,51997],{"class":107},[97,76616,130],{"class":103},[97,76618,76619,76621,76623,76625,76627,76629,76632,76634,76636,76638,76640,76642,76645,76647],{"class":99,"line":1522},[97,76620,73937],{"class":103},[97,76622,58431],{"class":111},[97,76624,323],{"class":103},[97,76626,904],{"class":118},[97,76628,1285],{"class":319},[97,76630,76631],{"class":48167},"java",[97,76633,622],{"class":319},[97,76635,904],{"class":118},[97,76637,878],{"class":103},[97,76639,75429],{"class":111},[97,76641,323],{"class":103},[97,76643,76644],{"class":118},"'java'",[97,76646,75939],{"class":103},[97,76648,75440],{"class":191},[97,76650,76651,76653,76655,76657,76659,76661,76663,76665,76667,76669,76671,76673,76676,76678],{"class":99,"line":1804},[97,76652,73937],{"class":103},[97,76654,58431],{"class":111},[97,76656,323],{"class":103},[97,76658,904],{"class":118},[97,76660,1285],{"class":319},[97,76662,76631],{"class":48167},[97,76664,622],{"class":319},[97,76666,904],{"class":118},[97,76668,878],{"class":103},[97,76670,75429],{"class":111},[97,76672,323],{"class":103},[97,76674,76675],{"class":118},"'Java'",[97,76677,75939],{"class":103},[97,76679,75563],{"class":191},[97,76681,76682],{"class":99,"line":1809},[97,76683,76684],{"class":191},"    \u002F\u002F 不区分大小写、\n",[97,76686,76687,76689,76691,76693,76695,76697,76699,76701,76703,76705,76707,76709,76711,76713,76715],{"class":99,"line":1815},[97,76688,73937],{"class":103},[97,76690,58431],{"class":111},[97,76692,323],{"class":103},[97,76694,904],{"class":118},[97,76696,1285],{"class":319},[97,76698,76631],{"class":48167},[97,76700,622],{"class":319},[97,76702,904],{"class":118},[97,76704,761],{"class":319},[97,76706,878],{"class":103},[97,76708,75429],{"class":111},[97,76710,323],{"class":103},[97,76712,76675],{"class":118},[97,76714,75939],{"class":103},[97,76716,75440],{"class":191},[97,76718,76719,76721,76723,76725],{"class":99,"line":1820},[97,76720,11412],{"class":319},[97,76722,74103],{"class":370},[97,76724,13755],{"class":319},[97,76726,76727],{"class":118}," 'java是一门编程语言，学完java工资很高'\n",[97,76729,76730,76732,76735,76737,76740,76743,76745,76747,76749,76751,76754,76756,76759],{"class":99,"line":1834},[97,76731,11412],{"class":319},[97,76733,76734],{"class":370}," result",[97,76736,13755],{"class":319},[97,76738,76739],{"class":103}," str.",[97,76741,76742],{"class":111},"replace",[97,76744,323],{"class":103},[97,76746,904],{"class":118},[97,76748,76631],{"class":48167},[97,76750,904],{"class":118},[97,76752,76753],{"class":319},"ig",[97,76755,12626],{"class":103},[97,76757,76758],{"class":118},"'前端'",[97,76760,329],{"class":103},[97,76762,76763,76765,76767],{"class":99,"line":1839},[97,76764,73937],{"class":103},[97,76766,58431],{"class":111},[97,76768,76769],{"class":103},"(result)\n",[97,76771,76772,76774,76776],{"class":99,"line":1845},[97,76773,52601],{"class":103},[97,76775,51997],{"class":107},[97,76777,130],{"class":103},[97,76779,76780,76782,76784],{"class":99,"line":1866},[97,76781,51969],{"class":103},[97,76783,51984],{"class":107},[97,76785,130],{"class":103},[97,76787,76788,76790,76792],{"class":99,"line":1871},[97,76789,51969],{"class":103},[97,76791,50825],{"class":107},[97,76793,130],{"class":103},[231,76795,76796],{},"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":92,"searchDepth":195,"depth":195,"links":76798},[76799,76809,76821,76838,76845,76853],{"id":53544,"depth":195,"text":53545,"children":76800},[76801,76802,76803,76804,76805,76806,76807,76808],{"id":53548,"depth":241,"text":53549},{"id":53581,"depth":241,"text":53582},{"id":53620,"depth":241,"text":53621},{"id":53778,"depth":241,"text":53779},{"id":53826,"depth":241,"text":53827},{"id":53963,"depth":241,"text":53964},{"id":54285,"depth":241,"text":54286},{"id":57273,"depth":241,"text":57274},{"id":57301,"depth":195,"text":57302,"children":76810},[76811,76812,76813,76814,76815,76816,76817,76818,76819,76820],{"id":57305,"depth":241,"text":57306},{"id":57328,"depth":241,"text":57329},{"id":58243,"depth":241,"text":58244},{"id":58933,"depth":241,"text":58934},{"id":59215,"depth":241,"text":59216},{"id":63376,"depth":241,"text":63377},{"id":63546,"depth":241,"text":63547},{"id":63674,"depth":241,"text":63675},{"id":63699,"depth":241,"text":63700},{"id":65088,"depth":241,"text":65089},{"id":66241,"depth":195,"text":66242,"children":76822},[76823,76824,76825,76826,76827,76828,76829,76830,76831,76832,76833,76834,76835,76836,76837],{"id":66245,"depth":241,"text":66246},{"id":66899,"depth":241,"text":66900},{"id":68594,"depth":241,"text":68595},{"id":68635,"depth":241,"text":68636},{"id":68677,"depth":241,"text":68678},{"id":68691,"depth":241,"text":68692},{"id":68740,"depth":241,"text":68741},{"id":68752,"depth":241,"text":68753},{"id":68767,"depth":241,"text":68768},{"id":68803,"depth":241,"text":68804},{"id":68884,"depth":241,"text":68885},{"id":69012,"depth":241,"text":69013},{"id":69024,"depth":241,"text":69025},{"id":69043,"depth":241,"text":69044},{"id":71154,"depth":241,"text":71155},{"id":71173,"depth":195,"text":71174,"children":76839},[76840,76841,76842,76843,76844],{"id":71194,"depth":241,"text":71195},{"id":71214,"depth":241,"text":71215},{"id":71263,"depth":241,"text":71264},{"id":71388,"depth":241,"text":71389},{"id":71569,"depth":241,"text":71570},{"id":71587,"depth":195,"text":71588,"children":76846},[76847,76848,76849,76850,76851,76852],{"id":71602,"depth":241,"text":71603},{"id":71661,"depth":241,"text":71662},{"id":71685,"depth":241,"text":71686},{"id":72005,"depth":241,"text":72006},{"id":72037,"depth":241,"text":72038},{"id":72060,"depth":241,"text":72061},{"id":75128,"depth":195,"text":75129,"children":76854},[76855,76856],{"id":75162,"depth":241,"text":75163},{"id":75201,"depth":241,"text":75202},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53516,"description":246},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76863,"title":76864,"body":76865,"description":246,"extension":247,"meta":93002,"navigation":249,"path":93003,"seo":93004,"stem":93005,"__hash__":93006},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76866,"toc":92938},[76867,76870,76873,76877,76881,76886,76891,76902,76906,76911,76914,76918,76921,76926,76930,76934,76937,76942,76945,76949,76952,76960,76963,76967,76972,76977,76980,76984,76989,76994,76997,77001,77006,77009,77014,77017,77022,77025,77030,77035,77038,77041,77045,77050,77055,77058,77062,77066,77069,77072,77075,77079,77083,77088,77093,77096,77100,77105,77110,77113,77116,77119,77122,77125,77128,77131,77134,77137,77142,77146,77151,77156,77159,77162,77165,77168,77171,77174,77177,77180,77184,77188,77191,77194,77197,77202,77204,77207,77210,77213,77216,77219,77222,77225,77228,77231,77234,77237,77240,77243,77248,77253,77258,77261,77265,77268,77273,77277,77279,77290,77295,77396,77399,77402,77405,77408,77411,77414,77417,77420,77422,77425,77428,77431,77434,77437,77439,77442,77445,77448,77451,77454,77457,77459,77462,77464,77466,77469,77473,77477,77480,77483,77486,77489,77492,77495,77498,77501,77504,77509,77629,77632,77635,77640,77643,77646,77649,77652,77657,77660,77663,77666,77669,77674,77677,77777,77842,77916,77920,77923,77926,77930,77933,77947,77976,77979,77982,77985,77988,77991,77994,77997,77999,78002,78005,78008,78011,78015,78020,78024,78029,78104,78107,78290,78293,78296,78299,78302,78305,78307,78310,78313,78316,78319,78322,78325,78327,78331,78334,78339,78342,78345,78348,78351,78353,78358,78361,78364,78367,78370,78372,78377,78380,78383,78385,78387,78390,78394,78397,78400,78405,78408,78411,78414,78464,78469,78473,78478,78481,78550,78553,78562,78566,78571,78574,78577,78585,78588,78605,80407,80411,80415,80420,80423,80427,80433,80439,80591,80596,80601,80604,80607,80610,80613,80616,80619,80622,80625,80628,80631,80634,80637,80642,80646,80649,80660,80664,80669,80672,80675,80678,80681,80684,80686,80689,80692,80695,80698,80700,80717,80720,80724,80727,80732,80737,80740,80743,80747,80750,80753,80762,80765,80769,80772,80777,80782,80849,80853,80856,80859,80864,80869,80955,80960,80964,80967,80970,80985,80988,80993,80997,81002,81111,81114,81125,81275,81279,81284,81393,81397,81402,81407,81412,81415,81422,81442,81478,81642,81647,81650,81655,81662,81665,81668,81671,81730,81786,81842,81846,81851,82166,82169,82173,82176,82181,82290,82295,82299,82304,82308,82379,82383,82385,82388,82391,82429,82705,82709,82726,82792,82826,82830,82833,82838,82867,82874,82883,82888,82903,82908,82917,82920,83057,83061,83123,83127,83132,83377,83381,83386,83389,83392,83395,83398,83402,83407,84988,84992,84996,85002,85005,85010,85014,85017,85022,85025,85036,85040,85045,85049,85054,85059,85062,85067,85071,85075,85078,85083,85088,85091,85094,85097,85219,85224,85326,85329,85332,85336,85341,85513,85518,85522,85525,85530,85596,85601,85604,85735,85738,85743,85746,85749,85840,85845,85848,85851,85854,85857,85862,85867,85870,85875,85880,85885,85889,85892,85895,85900,85905,85910,85915,85969,85972,85975,85980,85983,85986,85991,85996,86001,86005,86010,86024,86029,86032,86037,86041,86046,86051,86056,86061,86066,86071,86076,86081,86084,86088,86093,86096,86099,86102,86107,86112,86115,86118,86122,86125,86128,86133,86138,86143,86148,86151,86156,86161,86222,86227,86230,86235,87476,87481,87485,87489,87494,87497,87502,87507,87510,87515,87517,87522,87526,87529,87532,87543,87547,87552,87557,87612,87617,87622,87627,87838,87843,87847,87852,87855,87857,87860,87863,88310,88315,88322,88328,88331,88334,88598,88603,88607,88872,88877,88881,88886,88891,88896,88901,89232,89235,89240,89245,89248,89252,89256,89261,89266,89271,89276,89281,89286,89290,89293,89298,89303,89306,89380,89385,89390,89395,89397,89400,89770,89775,89780,89785,89788,89791,89893,89898,89903,90006,90010,90015,90019,90023,90028,90033,90036,90041,90044,90047,90440,90445,90448,90451,90454,90457,90977,90981,90986,90991,90996,90999,91004,91007,91010,91392,91397,91399,91401,91404,91407,91919,91923,91984,91987,91990,91993,91997,92000,92005,92010,92935],[10,76868,76864],{"id":76869},"_4js进阶",[24,76871,76872],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76874,76876],{"id":76875},"_41-作用域","4.1 作用域",[48,76878,76880],{"id":76879},"_411-局部作用域","4.1.1 局部作用域",[24,76882,76883],{},[19,76884],{"alt":92,"src":76885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[24,76887,76888],{},[19,76889],{"alt":92,"src":76890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[67,76892,76893,76896,76899],{},[70,76894,76895],{},"函数作用域在函数内部",[70,76897,76898],{},"块级作用域在{}",[70,76900,76901],{},"对象的那个{}不是作用域，不是块作用域",[48,76903,76905],{"id":76904},"_412-全局作用域","4.1.2 全局作用域",[24,76907,76908],{},[19,76909],{"alt":92,"src":76910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[24,76912,76913],{},"window.a=10不要这样写",[48,76915,76917],{"id":76916},"_413-作用域链","4.1.3 作用域链",[24,76919,76920],{},"变量查找机制",[24,76922,76923],{},[19,76924],{"alt":92,"src":76925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,76927,76929],{"id":76928},"_42-垃圾回收机制","4.2 垃圾回收机制",[48,76931,76933],{"id":76932},"_421-大体介绍","4.2.1 大体介绍",[24,76935,76936],{},"垃圾回收机制(Garbage Collection) 简称 GC",[24,76938,76939],{},[19,76940],{"alt":92,"src":76941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[24,76943,76944],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[48,76946,76948],{"id":76947},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[24,76950,76951],{},"堆栈空间分配区别：",[138,76953,76954,76957],{},[70,76955,76956],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[70,76958,76959],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[24,76961,76962],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[160,76964,76966],{"id":76965},"_4221-引用计数","4.2.2.1 引用计数",[24,76968,76969],{},[19,76970],{"alt":92,"src":76971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[24,76973,76974],{},[19,76975],{"alt":92,"src":76976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[24,76978,76979],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[160,76981,76983],{"id":76982},"_4222-标记清除法","4.2.2.2 标记清除法",[24,76985,76986],{},[19,76987],{"alt":92,"src":76988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[24,76990,76991],{},[19,76992],{"alt":92,"src":76993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[24,76995,76996],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,76998,77000],{"id":76999},"_43-闭包","4.3 闭包",[24,77002,77003],{},[19,77004],{"alt":92,"src":77005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[24,77007,77008],{},"闭包：内层函数+外层函数的变量",[24,77010,77011],{},[19,77012],{"alt":92,"src":77013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[24,77015,77016],{},"closure就是闭包",[24,77018,77019],{},[19,77020],{"alt":92,"src":77021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[24,77023,77024],{},"内层函数必须包含外层函数的变量才是闭包",[24,77026,77027],{},[19,77028],{"alt":92,"src":77029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[24,77031,77032],{},[19,77033],{"alt":92,"src":77034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[24,77036,77037],{},"闭包可能会引起内存泄漏",[24,77039,77040],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77042,77044],{"id":77043},"_44-变量提升","4.4 变量提升",[24,77046,77047],{},[19,77048],{"alt":92,"src":77049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[24,77051,77052],{},[19,77053],{"alt":92,"src":77054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[24,77056,77057],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77059,77061],{"id":77060},"_45-函数进阶","4.5 函数进阶",[48,77063,77065],{"id":77064},"_451-函数提升","4.5.1 函数提升",[24,77067,77068],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[24,77070,77071],{},"只提升函数声明，不提升函数调用",[51997,77073,77074],{},"\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",[48,77076,77078],{"id":77077},"_452-函数参数","4.5.2 函数参数",[160,77080,77082],{"id":77081},"_4521-动态参数","4.5.2.1 动态参数",[24,77084,77085],{},[19,77086],{"alt":92,"src":77087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[24,77089,77090],{},[19,77091],{"alt":92,"src":77092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[24,77094,77095],{},"箭头函数里边没有arguments",[160,77097,77099],{"id":77098},"_4522-剩余参数","4.5.2.2 剩余参数",[24,77101,77102],{},[19,77103],{"alt":92,"src":77104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[24,77106,77107],{},[19,77108],{"alt":92,"src":77109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[24,77111,77112],{},"剩余参数使用的时候不需要写...",[24,77114,77115],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[24,77117,77118],{},"  function getSum(a,b,...arr) {",[24,77120,77121],{},"  console.log(11)",[24,77123,77124],{},"  }",[24,77126,77127],{},"  getSum(1,2,3,4)",[24,77129,77130],{},"  将1传给a，2传给b，剩下的传给剩余参数",[24,77132,77133],{},"  getSum(1,2)",[24,77135,77136],{},"  将1传给a，2传给b，剩余参数为一个空数组",[24,77138,77139],{},[19,77140],{"alt":92,"src":77141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[160,77143,77145],{"id":77144},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[24,77147,77148],{},[19,77149],{"alt":92,"src":77150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[24,77152,77153],{},[19,77154],{"alt":92,"src":77155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[24,77157,77158],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[24,77160,77161],{},"展开运算符可以用于数组之间的合并：",[24,77163,77164],{},"const arr1 = [1, 2, 3]",[24,77166,77167],{},"const arr2 = [3, 4, 5]",[24,77169,77170],{},"const arr = [...arr1, ...arr2]",[24,77172,77173],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[24,77175,77176],{},"剩余参数：函数参数使用，得到真数组",[24,77178,77179],{},"展开运算符：数组中使用，数组展开",[48,77181,77183],{"id":77182},"_453-箭头函数","4.5.3 箭头函数",[160,77185,77187],{"id":77186},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[24,77189,77190],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[24,77192,77193],{},"它不是万能的！！！",[24,77195,77196],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[24,77198,77199],{},[19,77200],{"alt":92,"src":77201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[24,77203,352],{},[24,77205,77206],{},"① 只有一个形参的时候，可以省略小括号：",[24,77208,77209],{},"const fn=x=>{console.log(x)}",[24,77211,77212],{},"② 只有一行代码时可以省略大括号：",[24,77214,77215],{},"const fn=x=>console.log(11)",[24,77217,77218],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[24,77220,77221],{},"const fn=x=>x+x",[24,77223,77224],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[24,77226,77227],{},"⑤ 阻止表单默认提交：",[24,77229,77230],{},"const form = document.querySelector('form')",[24,77232,77233],{},"form.addEventListener('click', ev => ev.preventDefault())",[24,77235,77236],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[24,77238,77239],{},"const fn=uname=>({uname:uname})",[24,77241,77242],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[24,77244,77245],{},[19,77246],{"alt":92,"src":77247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[24,77249,77250],{},[19,77251],{"alt":92,"src":77252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[24,77254,77255],{},[19,77256],{"alt":92,"src":77257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[24,77259,77260],{},"一定不要忘记用()，有()就理解为自带return",[160,77262,77264],{"id":77263},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[24,77266,77267],{},"箭头函数是没有动态参数的arguments",[24,77269,77270],{},[19,77271],{"alt":92,"src":77272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[160,77274,77276],{"id":77275},"_4533-箭头函数this","4.5.3.3 箭头函数this",[24,77278,11523],{},[138,77280,77281,77284,77287],{},[70,77282,77283],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[70,77285,77286],{},"事件回调函数使用箭头函数时，this 为全局的 window",[70,77288,77289],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[24,77291,77292],{},[19,77293],{"alt":92,"src":77294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[87,77296,77298],{"className":53251,"code":77297,"language":53253,"meta":92,"style":92},"  \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",[94,77299,77300,77308,77313,77318,77323,77328,77333,77337,77342,77346,77350,77355,77360,77365,77369,77373,77378,77383,77388],{"__ignoreMap":92},[97,77301,77302,77304,77306],{"class":99,"line":100},[97,77303,52328],{"class":103},[97,77305,51997],{"class":107},[97,77307,130],{"class":103},[97,77309,77310],{"class":99,"line":195},[97,77311,77312],{"class":103},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[97,77314,77315],{"class":99,"line":241},[97,77316,77317],{"class":103},"    console.log(this) \u002F\u002F指向window\n",[97,77319,77320],{"class":99,"line":1387},[97,77321,77322],{"class":103},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[97,77324,77325],{"class":99,"line":1393},[97,77326,77327],{"class":103},"    function fn() {\n",[97,77329,77330],{"class":99,"line":1407},[97,77331,77332],{"class":103},"      console.log(this)  \u002F\u002F指向window\n",[97,77334,77335],{"class":99,"line":1413},[97,77336,2378],{"class":103},[97,77338,77339],{"class":99,"line":1504},[97,77340,77341],{"class":103},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[97,77343,77344],{"class":99,"line":1510},[97,77345,2591],{"emptyLinePlaceholder":249},[97,77347,77348],{"class":99,"line":1522},[97,77349,71707],{"class":103},[97,77351,77352],{"class":99,"line":1804},[97,77353,77354],{"class":103},"      name: 'andy',\n",[97,77356,77357],{"class":99,"line":1809},[97,77358,77359],{"class":103},"      sayHai: function () {\n",[97,77361,77362],{"class":99,"line":1815},[97,77363,77364],{"class":103},"        console.log(this)\n",[97,77366,77367],{"class":99,"line":1820},[97,77368,52582],{"class":103},[97,77370,77371],{"class":99,"line":1834},[97,77372,2378],{"class":103},[97,77374,77375],{"class":99,"line":1839},[97,77376,77377],{"class":103},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[97,77379,77380],{"class":99,"line":1845},[97,77381,77382],{"class":103},"    \u002F\u002F 2.箭头函数的this\n",[97,77384,77385],{"class":99,"line":1866},[97,77386,77387],{"class":103},"    const fn = () => console.log(this)\n",[97,77389,77390,77392,77394],{"class":99,"line":1871},[97,77391,52601],{"class":103},[97,77393,51997],{"class":107},[97,77395,130],{"class":103},[24,77397,77398],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[24,77400,77401],{},"const fn = () => console.log(this)",[24,77403,77404],{},"fn() \u002F\u002F指向window",[24,77406,77407],{},"\u002F\u002F 3.对象方法箭头函数 this",[24,77409,77410],{},"①",[24,77412,77413],{},"const obj = {",[24,77415,77416],{},"uname: 'pink老师',",[24,77418,77419],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[24,77421,1265],{},[24,77423,77424],{},"调用对象里边的函数",[24,77426,77427],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[24,77429,77430],{},"obj.sayHai()",[24,77432,77433],{},"②",[24,77435,77436],{},"const obj1 = {",[24,77438,77416],{},[24,77440,77441],{},"sayHai: function () {",[24,77443,77444],{},"let i = 10",[24,77446,77447],{},"const count = () => {",[24,77449,77450],{},"console.log(this)",[24,77452,77453],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[24,77455,77456],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[24,77458,1265],{},[24,77460,77461],{},"count()",[24,77463,1265],{},[24,77465,1265],{},[24,77467,77468],{},"obj1.sayHai()",[14,77470,77472],{"id":77471},"_46-解构赋值","4.6 解构赋值",[48,77474,77476],{"id":77475},"_461-数组解构","4.6.1 数组解构",[24,77478,77479],{},"以前要是使用数组中的值的话：",[24,77481,77482],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[24,77484,77485],{},"const arr=[100,60,80]",[24,77487,77488],{},"const max=arr[0]",[24,77490,77491],{},"const min=arr[1]",[24,77493,77494],{},"const avg=arr[2]",[24,77496,77497],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[24,77499,77500],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[24,77502,77503],{},"这个写法就类似于上边的那种用很多const的方法",[24,77505,77506],{},[19,77507],{"alt":92,"src":77508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[87,77510,77512],{"className":50823,"code":77511,"language":50825,"meta":92,"style":92},"①变量之间交换值:\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",[94,77513,77514,77519,77524,77529,77534,77539,77543,77547,77552,77556,77561,77566,77570,77575,77580,77591,77601,77606,77611,77616,77620,77624],{"__ignoreMap":92},[97,77515,77516],{"class":99,"line":100},[97,77517,77518],{"class":103},"①变量之间交换值:\n",[97,77520,77521],{"class":99,"line":195},[97,77522,77523],{"class":103},"let a=1\n",[97,77525,77526],{"class":99,"line":241},[97,77527,77528],{"class":103},"let b=2;\n",[97,77530,77531],{"class":99,"line":1387},[97,77532,77533],{"class":103},"必须加这行代码，不然就会报错\n",[97,77535,77536],{"class":99,"line":1393},[97,77537,77538],{"class":103},"[b,a]=[a,b]\n",[97,77540,77541],{"class":99,"line":1407},[97,77542,2591],{"emptyLinePlaceholder":249},[97,77544,77545],{"class":99,"line":1413},[97,77546,2591],{"emptyLinePlaceholder":249},[97,77548,77549],{"class":99,"line":1504},[97,77550,77551],{"class":103},"可以写成下面的方式：\n",[97,77553,77554],{"class":99,"line":1510},[97,77555,77523],{"class":103},[97,77557,77558],{"class":99,"line":1522},[97,77559,77560],{"class":103},"let b=2\n",[97,77562,77563],{"class":99,"line":1804},[97,77564,77565],{"class":103},";[b,a]=[a,b]\n",[97,77567,77568],{"class":99,"line":1809},[97,77569,2591],{"emptyLinePlaceholder":249},[97,77571,77572],{"class":99,"line":1815},[97,77573,77574],{"class":103},"②排序\n",[97,77576,77577],{"class":99,"line":1820},[97,77578,77579],{"class":103},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[97,77581,77582,77585,77588],{"class":99,"line":1834},[97,77583,77584],{"class":103},"for (let i = 0; i ",[97,77586,104],{"class":77587},"s7hpK",[97,77589,77590],{"class":103}," arr1.length; i++) {\n",[97,77592,77593,77596,77598],{"class":99,"line":1839},[97,77594,77595],{"class":103},"   for (let j = 0; j ",[97,77597,104],{"class":77587},[97,77599,77600],{"class":103}," arr1.length - 1; j++) {\n",[97,77602,77603],{"class":99,"line":1845},[97,77604,77605],{"class":103},"      if (arr1[j] > arr1[j + 1]) {\n",[97,77607,77608],{"class":99,"line":1866},[97,77609,77610],{"class":103},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[97,77612,77613],{"class":99,"line":1871},[97,77614,77615],{"class":103},"       }\n",[97,77617,77618],{"class":99,"line":1885},[97,77619,4500],{"class":103},[97,77621,77622],{"class":99,"line":1890},[97,77623,1757],{"class":103},[97,77625,77626],{"class":99,"line":1919},[97,77627,77628],{"class":103},"console.log(arr1)\n",[24,77630,77631],{},"数组解构的细节：",[24,77633,77634],{},"①变量多，单元值少",[24,77636,77637],{},[19,77638],{"alt":92,"src":77639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[24,77641,77642],{},"防止出现undefined的方法：",[24,77644,77645],{},"const [a=0,b=0] =[1]",[24,77647,77648],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[24,77650,77651],{},"②变量少，单元值多",[24,77653,77654],{},[19,77655],{"alt":92,"src":77656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[24,77658,77659],{},"此时可以使用剩余参数来接收多余的值",[24,77661,77662],{},"const [a,b,...c]=[1,2,3,4]",[24,77664,77665],{},"console.log(c) 输出[3,4]",[24,77667,77668],{},"③可以按需导入，忽略某些返回值",[24,77670,77671],{},[19,77672],{"alt":92,"src":77673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[24,77675,77676],{},"④支持多维数组的结构",[87,77678,77682],{"className":77679,"code":77680,"language":77681,"meta":92,"style":92},"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",[94,77683,77684,77712,77728,77743,77758],{"__ignoreMap":92},[97,77685,77686,77688,77690,77692,77694,77696,77698,77700,77703,77705,77707,77709],{"class":99,"line":100},[97,77687,6983],{"class":319},[97,77689,52017],{"class":103},[97,77691,115],{"class":319},[97,77693,52410],{"class":103},[97,77695,537],{"class":370},[97,77697,12626],{"class":103},[97,77699,398],{"class":370},[97,77701,77702],{"class":103},", [",[97,77704,392],{"class":370},[97,77706,12626],{"class":103},[97,77708,613],{"class":370},[97,77710,77711],{"class":103},"]]\n",[97,77713,77714,77717,77719,77721,77723,77725],{"class":99,"line":195},[97,77715,77716],{"class":103},"console.",[97,77718,58431],{"class":111},[97,77720,4042],{"class":103},[97,77722,511],{"class":370},[97,77724,4407],{"class":103},[97,77726,77727],{"class":191},"  \u002F\u002F1\n",[97,77729,77730,77732,77734,77736,77738,77740],{"class":99,"line":241},[97,77731,77716],{"class":103},[97,77733,58431],{"class":111},[97,77735,4042],{"class":103},[97,77737,537],{"class":370},[97,77739,4407],{"class":103},[97,77741,77742],{"class":191},"  \u002F\u002F2\n",[97,77744,77745,77747,77749,77751,77753,77755],{"class":99,"line":1387},[97,77746,77716],{"class":103},[97,77748,58431],{"class":111},[97,77750,4042],{"class":103},[97,77752,398],{"class":370},[97,77754,4407],{"class":103},[97,77756,77757],{"class":191},"  \u002F\u002F[3,4]\n",[97,77759,77760,77762,77764,77766,77768,77770,77772,77774],{"class":99,"line":1393},[97,77761,77716],{"class":103},[97,77763,58431],{"class":111},[97,77765,4042],{"class":103},[97,77767,398],{"class":370},[97,77769,5092],{"class":103},[97,77771,511],{"class":370},[97,77773,4407],{"class":103},[97,77775,77776],{"class":191},"  \u002F\u002F3\n",[87,77778,77780],{"className":77679,"code":77779,"language":77681,"meta":92,"style":92},"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",[94,77781,77782,77809,77820,77831],{"__ignoreMap":92},[97,77783,77784,77786,77789,77791,77793,77795,77797,77799,77801,77803,77805,77807],{"class":99,"line":100},[97,77785,6983],{"class":319},[97,77787,77788],{"class":103}," [a, b, c] ",[97,77790,115],{"class":319},[97,77792,52410],{"class":103},[97,77794,537],{"class":370},[97,77796,12626],{"class":103},[97,77798,398],{"class":370},[97,77800,77702],{"class":103},[97,77802,392],{"class":370},[97,77804,12626],{"class":103},[97,77806,613],{"class":370},[97,77808,77711],{"class":103},[97,77810,77811,77813,77815,77818],{"class":99,"line":195},[97,77812,77716],{"class":103},[97,77814,58431],{"class":111},[97,77816,77817],{"class":103},"(a)",[97,77819,77727],{"class":191},[97,77821,77822,77824,77826,77829],{"class":99,"line":241},[97,77823,77716],{"class":103},[97,77825,58431],{"class":111},[97,77827,77828],{"class":103},"(b)",[97,77830,77742],{"class":191},[97,77832,77833,77835,77837,77840],{"class":99,"line":1387},[97,77834,77716],{"class":103},[97,77836,58431],{"class":111},[97,77838,77839],{"class":103},"(c)",[97,77841,77757],{"class":191},[87,77843,77845],{"className":77679,"code":77844,"language":77681,"meta":92,"style":92},"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",[94,77846,77847,77874,77884,77894,77904],{"__ignoreMap":92},[97,77848,77849,77851,77854,77856,77858,77860,77862,77864,77866,77868,77870,77872],{"class":99,"line":100},[97,77850,6983],{"class":319},[97,77852,77853],{"class":103}," [a, b, [c, d]] ",[97,77855,115],{"class":319},[97,77857,52410],{"class":103},[97,77859,537],{"class":370},[97,77861,12626],{"class":103},[97,77863,398],{"class":370},[97,77865,77702],{"class":103},[97,77867,392],{"class":370},[97,77869,12626],{"class":103},[97,77871,613],{"class":370},[97,77873,77711],{"class":103},[97,77875,77876,77878,77880,77882],{"class":99,"line":195},[97,77877,77716],{"class":103},[97,77879,58431],{"class":111},[97,77881,77817],{"class":103},[97,77883,77727],{"class":191},[97,77885,77886,77888,77890,77892],{"class":99,"line":241},[97,77887,77716],{"class":103},[97,77889,58431],{"class":111},[97,77891,77828],{"class":103},[97,77893,77742],{"class":191},[97,77895,77896,77898,77900,77902],{"class":99,"line":1387},[97,77897,77716],{"class":103},[97,77899,58431],{"class":111},[97,77901,77839],{"class":103},[97,77903,77776],{"class":191},[97,77905,77906,77908,77910,77913],{"class":99,"line":1393},[97,77907,77716],{"class":103},[97,77909,58431],{"class":111},[97,77911,77912],{"class":103},"(d)",[97,77914,77915],{"class":191},"  \u002F\u002F4\n",[48,77917,77919],{"id":77918},"_462-对象解构","4.6.2 对象解构",[24,77921,77922],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[24,77924,77925],{},"用的非常非常多！！！！！！",[160,77927,77929],{"id":77928},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[24,77931,77932],{},"基本语法：",[138,77934,77935,77938,77941,77944],{},[70,77936,77937],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[70,77939,77940],{},"对象属性的值将被赋值给与属性名相同的变量",[70,77942,77943],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[70,77945,77946],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[87,77948,77950],{"className":50823,"code":77949,"language":50825,"meta":92,"style":92},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[94,77951,77952,77957,77962,77967,77971],{"__ignoreMap":92},[97,77953,77954],{"class":99,"line":100},[97,77955,77956],{"class":103},"const obj = {\n",[97,77958,77959],{"class":99,"line":195},[97,77960,77961],{"class":103},"   uname: 'pink老师',\n",[97,77963,77964],{"class":99,"line":241},[97,77965,77966],{"class":103},"   age: 18,\n",[97,77968,77969],{"class":99,"line":1387},[97,77970,1757],{"class":103},[97,77972,77973],{"class":99,"line":1393},[97,77974,77975],{"class":103},"const { uname, age } = obj\n",[24,77977,77978],{},"上方代码这样写等价于：",[24,77980,77981],{},"const uname等价于obj.uname",[24,77983,77984],{},"变量名可以重新改名：",[24,77986,77987],{},"const uname='red老师'",[24,77989,77990],{},"const user={",[24,77992,77993],{},"  uname:'pink老师',",[24,77995,77996],{},"  age:18",[24,77998,1265],{},[24,78000,78001],{},"const {uname,age}=user",[24,78003,78004],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[24,78006,78007],{},"const {旧变量名：新变量名}=对象",[24,78009,78010],{},"const {uname:username,age}=user",[160,78012,78014],{"id":78013},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[24,78016,78017],{},[19,78018],{"alt":92,"src":78019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[160,78021,78023],{"id":78022},"_4623-多级对象解构","4.6.2.3 多级对象解构",[24,78025,78026],{},[19,78027],{"alt":92,"src":78028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[87,78030,78032],{"className":53251,"code":78031,"language":53253,"meta":92,"style":92},"  \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",[94,78033,78034,78042,78047,78052,78057,78062,78067,78072,78077,78082,78086,78091,78096],{"__ignoreMap":92},[97,78035,78036,78038,78040],{"class":99,"line":100},[97,78037,52328],{"class":103},[97,78039,51997],{"class":107},[97,78041,130],{"class":103},[97,78043,78044],{"class":99,"line":195},[97,78045,78046],{"class":103},"    const pig = {\n",[97,78048,78049],{"class":99,"line":241},[97,78050,78051],{"class":103},"      name: '佩奇',\n",[97,78053,78054],{"class":99,"line":1387},[97,78055,78056],{"class":103},"      family: {\n",[97,78058,78059],{"class":99,"line":1393},[97,78060,78061],{"class":103},"        mother: '猪妈妈',\n",[97,78063,78064],{"class":99,"line":1407},[97,78065,78066],{"class":103},"        father: '猪爸爸',\n",[97,78068,78069],{"class":99,"line":1413},[97,78070,78071],{"class":103},"        sister: '乔治'\n",[97,78073,78074],{"class":99,"line":1504},[97,78075,78076],{"class":103},"      },\n",[97,78078,78079],{"class":99,"line":1510},[97,78080,78081],{"class":103},"      age: 6\n",[97,78083,78084],{"class":99,"line":1522},[97,78085,2378],{"class":103},[97,78087,78088],{"class":99,"line":1804},[97,78089,78090],{"class":103},"    \u002F\u002F 多级对象解构\n",[97,78092,78093],{"class":99,"line":1809},[97,78094,78095],{"class":103},"    const { name, family: { mother, father, sister }, age } = pig\n",[97,78097,78098,78100,78102],{"class":99,"line":1815},[97,78099,52601],{"class":103},[97,78101,51997],{"class":107},[97,78103,130],{"class":103},[24,78105,78106],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[87,78108,78111],{"className":78109,"code":78110,"language":76631,"meta":92,"style":92},"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",[94,78112,78113,78118,78129,78141,78153,78162,78166,78177,78189,78199,78204,78208,78218,78229,78238,78242,78246,78257,78268,78277,78281,78286],{"__ignoreMap":92},[97,78114,78115],{"class":99,"line":100},[97,78116,78117],{"class":191},"    \u002F\u002F 这是后台传递过来的数据\n",[97,78119,78120,78122,78125,78127],{"class":99,"line":195},[97,78121,11412],{"class":319},[97,78123,78124],{"class":103}," msg ",[97,78126,115],{"class":319},[97,78128,15762],{"class":103},[97,78130,78131,78134,78136,78139],{"class":99,"line":241},[97,78132,78133],{"class":118},"      \"code\"",[97,78135,1179],{"class":319},[97,78137,78138],{"class":370}," 200",[97,78140,31656],{"class":103},[97,78142,78143,78146,78148,78151],{"class":99,"line":1387},[97,78144,78145],{"class":118},"      \"msg\"",[97,78147,1179],{"class":319},[97,78149,78150],{"class":118}," \"获取新闻列表成功\"",[97,78152,31656],{"class":103},[97,78154,78155,78158,78160],{"class":99,"line":1393},[97,78156,78157],{"class":118},"      \"data\"",[97,78159,1179],{"class":319},[97,78161,55631],{"class":103},[97,78163,78164],{"class":99,"line":1407},[97,78165,2701],{"class":103},[97,78167,78168,78171,78173,78175],{"class":99,"line":1413},[97,78169,78170],{"class":118},"          \"id\"",[97,78172,1179],{"class":319},[97,78174,25308],{"class":370},[97,78176,31656],{"class":103},[97,78178,78179,78182,78184,78187],{"class":99,"line":1504},[97,78180,78181],{"class":118},"          \"title\"",[97,78183,1179],{"class":319},[97,78185,78186],{"class":118}," \"5G商用自己，三大运用商收入下降\"",[97,78188,31656],{"class":103},[97,78190,78191,78194,78196],{"class":99,"line":1510},[97,78192,78193],{"class":118},"          \"count\"",[97,78195,1179],{"class":319},[97,78197,78198],{"class":370}," 58\n",[97,78200,78201],{"class":99,"line":1522},[97,78202,78203],{"class":103},"        },\n",[97,78205,78206],{"class":99,"line":1804},[97,78207,2701],{"class":103},[97,78209,78210,78212,78214,78216],{"class":99,"line":1809},[97,78211,78170],{"class":118},[97,78213,1179],{"class":319},[97,78215,14946],{"class":370},[97,78217,31656],{"class":103},[97,78219,78220,78222,78224,78227],{"class":99,"line":1815},[97,78221,78181],{"class":118},[97,78223,1179],{"class":319},[97,78225,78226],{"class":118}," \"国际媒体头条速览\"",[97,78228,31656],{"class":103},[97,78230,78231,78233,78235],{"class":99,"line":1820},[97,78232,78193],{"class":118},[97,78234,1179],{"class":319},[97,78236,78237],{"class":370}," 56\n",[97,78239,78240],{"class":99,"line":1834},[97,78241,78203],{"class":103},[97,78243,78244],{"class":99,"line":1839},[97,78245,2701],{"class":103},[97,78247,78248,78250,78252,78255],{"class":99,"line":1845},[97,78249,78170],{"class":118},[97,78251,1179],{"class":319},[97,78253,78254],{"class":370}," 3",[97,78256,31656],{"class":103},[97,78258,78259,78261,78263,78266],{"class":99,"line":1866},[97,78260,78181],{"class":118},[97,78262,1179],{"class":319},[97,78264,78265],{"class":118}," \"乌克兰和俄罗斯持续冲突\"",[97,78267,31656],{"class":103},[97,78269,78270,78272,78274],{"class":99,"line":1871},[97,78271,78193],{"class":118},[97,78273,1179],{"class":319},[97,78275,78276],{"class":370}," 1669\n",[97,78278,78279],{"class":99,"line":1885},[97,78280,78203],{"class":103},[97,78282,78283],{"class":99,"line":1890},[97,78284,78285],{"class":103},"      ]\n",[97,78287,78288],{"class":99,"line":1919},[97,78289,2378],{"class":103},[24,78291,78292],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[24,78294,78295],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[24,78297,78298],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[24,78300,78301],{},"function({data}) {",[24,78303,78304],{},"console.log(data)",[24,78306,1265],{},[24,78308,78309],{},"render(msg)",[24,78311,78312],{},"实参传递给形参的时候解构了",[24,78314,78315],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[24,78317,78318],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[24,78320,78321],{},"function render({data:mydata}) {",[24,78323,78324],{},"  console.log(data)",[24,78326,1265],{},[48,78328,78330],{"id":78329},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[24,78332,78333],{},"有两种情况：一个是数组结构，一个是立即执行函数",[138,78335,78336],{},[70,78337,78338],{},"如果对一个数组进行遍历，有两种方式：",[24,78340,78341],{},"①法1",[24,78343,78344],{},"const arr=[1,2,3]",[24,78346,78347],{},"arr.map(function(item,index) {",[24,78349,78350],{},"  console.log(item)",[24,78352,52648],{},[24,78354,78355],{},[19,78356],{"alt":92,"src":78357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[24,78359,78360],{},"②法2",[24,78362,78363],{},"const str='pink'",[24,78365,78366],{},"[1,2,3].map(function(item,index) {",[24,78368,78369],{},"console.log(item)",[24,78371,52648],{},[24,78373,78374],{},[19,78375],{"alt":92,"src":78376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[24,78378,78379],{},"此时会报错",[24,78381,78382],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[24,78384,78369],{},[24,78386,52648],{},[24,78388,78389],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78391,78393],{"id":78392},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[24,78395,78396],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[24,78398,78399],{},"可以理解为加强版的for循环",[24,78401,78402],{},[19,78403],{"alt":92,"src":78404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[24,78406,78407],{},"里边不写return，不返回数组，只遍历不返回",[24,78409,78410],{},"map是返回数组",[24,78412,78413],{},"forEach主要用于遍历数组对象",[87,78415,78417],{"className":53251,"code":78416,"language":53253,"meta":92,"style":92},"  \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",[94,78418,78419,78427,78432,78437,78442,78447,78451,78456],{"__ignoreMap":92},[97,78420,78421,78423,78425],{"class":99,"line":100},[97,78422,52328],{"class":103},[97,78424,51997],{"class":107},[97,78426,130],{"class":103},[97,78428,78429],{"class":99,"line":195},[97,78430,78431],{"class":103},"    const arr = ['red', 'green', 'pink']\n",[97,78433,78434],{"class":99,"line":241},[97,78435,78436],{"class":103},"    const result = arr.forEach(function (item, index) {\n",[97,78438,78439],{"class":99,"line":1387},[97,78440,78441],{"class":103},"      console.log(item)\n",[97,78443,78444],{"class":99,"line":1393},[97,78445,78446],{"class":103},"      console.log(index)\n",[97,78448,78449],{"class":99,"line":1407},[97,78450,33651],{"class":103},[97,78452,78453],{"class":99,"line":1413},[97,78454,78455],{"class":103},"    console.log(result)\n",[97,78457,78458,78460,78462],{"class":99,"line":1504},[97,78459,52601],{"class":103},[97,78461,51997],{"class":107},[97,78463,130],{"class":103},[24,78465,78466],{},[19,78467],{"alt":92,"src":78468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78470,78472],{"id":78471},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[24,78474,78475],{},[19,78476],{"alt":92,"src":78477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[24,78479,78480],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[87,78482,78484],{"className":53251,"code":78483,"language":53253,"meta":92,"style":92},"\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",[94,78485,78486,78494,78502,78507,78512,78516,78520,78525,78529,78534,78542],{"__ignoreMap":92},[97,78487,78488,78490,78492],{"class":99,"line":100},[97,78489,104],{"class":103},[97,78491,51984],{"class":107},[97,78493,130],{"class":103},[97,78495,78496,78498,78500],{"class":99,"line":195},[97,78497,52328],{"class":103},[97,78499,51997],{"class":107},[97,78501,130],{"class":103},[97,78503,78504],{"class":99,"line":241},[97,78505,78506],{"class":103},"    const arr = [10, 20, 30]\n",[97,78508,78509],{"class":99,"line":1387},[97,78510,78511],{"class":103},"    const newArr = arr.filter(function (item, index) {\n",[97,78513,78514],{"class":99,"line":1393},[97,78515,78441],{"class":103},[97,78517,78518],{"class":99,"line":1407},[97,78519,78446],{"class":103},[97,78521,78522],{"class":99,"line":1413},[97,78523,78524],{"class":103},"      return item >= 20\n",[97,78526,78527],{"class":99,"line":1504},[97,78528,33651],{"class":103},[97,78530,78531],{"class":99,"line":1510},[97,78532,78533],{"class":103},"    console.log(newArr)\n",[97,78535,78536,78538,78540],{"class":99,"line":1522},[97,78537,52601],{"class":103},[97,78539,51997],{"class":107},[97,78541,130],{"class":103},[97,78543,78544,78546,78548],{"class":99,"line":1804},[97,78545,51969],{"class":103},[97,78547,51984],{"class":107},[97,78549,130],{"class":103},[24,78551,78552],{},"这个也可以写成箭头函数：",[87,78554,78556],{"className":50823,"code":78555,"language":50825,"meta":92,"style":92},"const newArr = arr.filter(item => item >= 20)\n",[94,78557,78558],{"__ignoreMap":92},[97,78559,78560],{"class":99,"line":100},[97,78561,78555],{"class":103},[14,78563,78565],{"id":78564},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[24,78567,78568],{},[19,78569],{"alt":92,"src":78570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[24,78572,78573],{},"步骤：",[24,78575,78576],{},"①：渲染页面模块",[67,78578,78579,78582],{},[70,78580,78581],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[70,78583,78584],{},"用forEach+字符串的形式",[24,78586,78587],{},"②：点击不同需求，显示不同页面内容",[67,78589,78590,78593,78596,78599,78602],{},[70,78591,78592],{},"点击采取事件委托方式 .filter",[70,78594,78595],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[70,78597,78598],{},"筛选条件是根据点击的 data-index 来判断",[70,78600,78601],{},"可以使用对象解构，把事件对象解构",[70,78603,78604],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[87,78606,78608],{"className":50823,"code":78607,"language":50825,"meta":92,"style":92},"\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",[94,78609,78610,78620,78634,78638,78646,78660,78680,78692,78700,78706,78716,78726,78736,78740,78744,78750,78763,78775,78785,78797,78801,78805,78812,78825,78837,78854,78872,78885,78889,78893,78905,78915,78919,78923,78930,78971,78998,79008,79012,79016,79024,79036,79040,79044,79052,79064,79076,79087,79091,79095,79104,79116,79127,79131,79135,79144,79156,79168,79172,79176,79183,79193,79205,79217,79232,79236,79240,79248,79264,79274,79284,79294,79306,79310,79314,79324,79335,79345,79349,79357,79365,79369,79377,79392,79418,79443,79468,79487,79495,79509,79514,79519,79524,79529,79534,79542,79550,79555,79566,79571,79581,79591,79601,79611,79615,79619,79628,79637,79646,79655,79659,79663,79672,79681,79690,79699,79703,79707,79716,79725,79734,79743,79747,79751,79760,79769,79778,79787,79791,79795,79804,79813,79822,79831,79835,79839,79848,79857,79866,79875,79879,79883,79892,79901,79909,79918,79922,79926,79930,79935,79947,79952,79964,79968,79985,80013,80022,80027,80037,80047,80056,80061,80066,80070,80075,80092,80096,80101,80109,80114,80141,80146,80166,80171,80183,80188,80193,80198,80209,80223,80260,80278,80311,80328,80352,80356,80361,80367,80371,80375,80379,80387,80395,80399],{"__ignoreMap":92},[97,78611,78612,78614,78616,78618],{"class":99,"line":100},[97,78613,51487],{"class":103},[97,78615,51490],{"class":107},[97,78617,51493],{"class":111},[97,78619,130],{"class":103},[97,78621,78622,78624,78626,78628,78630,78632],{"class":99,"line":195},[97,78623,104],{"class":103},[97,78625,50825],{"class":107},[97,78627,51504],{"class":111},[97,78629,115],{"class":103},[97,78631,51509],{"class":118},[97,78633,130],{"class":103},[97,78635,78636],{"class":99,"line":241},[97,78637,2591],{"emptyLinePlaceholder":249},[97,78639,78640,78642,78644],{"class":99,"line":1387},[97,78641,104],{"class":103},[97,78643,51522],{"class":107},[97,78645,130],{"class":103},[97,78647,78648,78650,78652,78654,78656,78658],{"class":99,"line":1393},[97,78649,52328],{"class":103},[97,78651,108],{"class":107},[97,78653,51534],{"class":111},[97,78655,115],{"class":103},[97,78657,51539],{"class":118},[97,78659,130],{"class":103},[97,78661,78662,78664,78666,78668,78670,78672,78674,78676,78678],{"class":99,"line":1407},[97,78663,52328],{"class":103},[97,78665,108],{"class":107},[97,78667,112],{"class":111},[97,78669,115],{"class":103},[97,78671,119],{"class":118},[97,78673,122],{"class":111},[97,78675,115],{"class":103},[97,78677,127],{"class":118},[97,78679,130],{"class":103},[97,78681,78682,78684,78686,78688,78690],{"class":99,"line":1413},[97,78683,52328],{"class":103},[97,78685,51591],{"class":107},[97,78687,51594],{"class":103},[97,78689,51591],{"class":107},[97,78691,130],{"class":103},[97,78693,78694,78696,78698],{"class":99,"line":1504},[97,78695,52328],{"class":103},[97,78697,231],{"class":107},[97,78699,130],{"class":103},[97,78701,78702,78704],{"class":99,"line":1510},[97,78703,6594],{"class":107},[97,78705,15762],{"class":103},[97,78707,78708,78710,78712,78714],{"class":99,"line":1522},[97,78709,54879],{"class":370},[97,78711,51621],{"class":103},[97,78713,511],{"class":370},[97,78715,1483],{"class":103},[97,78717,78718,78720,78722,78724],{"class":99,"line":1804},[97,78719,54890],{"class":370},[97,78721,51621],{"class":103},[97,78723,511],{"class":370},[97,78725,1483],{"class":103},[97,78727,78728,78730,78732,78734],{"class":99,"line":1809},[97,78729,72780],{"class":370},[97,78731,51621],{"class":103},[97,78733,60689],{"class":370},[97,78735,1483],{"class":103},[97,78737,78738],{"class":99,"line":1815},[97,78739,2378],{"class":103},[97,78741,78742],{"class":99,"line":1820},[97,78743,2591],{"emptyLinePlaceholder":249},[97,78745,78746,78748],{"class":99,"line":1834},[97,78747,62307],{"class":111},[97,78749,15762],{"class":103},[97,78751,78752,78754,78756,78759,78761],{"class":99,"line":1839},[97,78753,54955],{"class":370},[97,78755,51621],{"class":103},[97,78757,78758],{"class":370},"990",[97,78760,51676],{"class":319},[97,78762,1483],{"class":103},[97,78764,78765,78767,78769,78771,78773],{"class":99,"line":1845},[97,78766,54890],{"class":370},[97,78768,51621],{"class":103},[97,78770,511],{"class":370},[97,78772,51740],{"class":370},[97,78774,1483],{"class":103},[97,78776,78777,78779,78781,78783],{"class":99,"line":1866},[97,78778,55193],{"class":370},[97,78780,51621],{"class":103},[97,78782,51661],{"class":370},[97,78784,1483],{"class":103},[97,78786,78787,78790,78792,78795],{"class":99,"line":1871},[97,78788,78789],{"class":370},"      flex-wrap",[97,78791,51621],{"class":103},[97,78793,78794],{"class":370},"wrap",[97,78796,1483],{"class":103},[97,78798,78799],{"class":99,"line":1885},[97,78800,2378],{"class":103},[97,78802,78803],{"class":99,"line":1890},[97,78804,2591],{"emptyLinePlaceholder":249},[97,78806,78807,78810],{"class":99,"line":1919},[97,78808,78809],{"class":111},"    .item",[97,78811,15762],{"class":103},[97,78813,78814,78816,78818,78821,78823],{"class":99,"line":1924},[97,78815,54955],{"class":370},[97,78817,51621],{"class":103},[97,78819,78820],{"class":370},"240",[97,78822,51676],{"class":319},[97,78824,1483],{"class":103},[97,78826,78827,78829,78831,78833,78835],{"class":99,"line":1941},[97,78828,62184],{"class":370},[97,78830,51621],{"class":103},[97,78832,766],{"class":370},[97,78834,51676],{"class":319},[97,78836,1483],{"class":103},[97,78838,78839,78841,78843,78845,78847,78850,78852],{"class":99,"line":1946},[97,78840,54879],{"class":370},[97,78842,51621],{"class":103},[97,78844,1020],{"class":370},[97,78846,51676],{"class":319},[97,78848,78849],{"class":370}," 30",[97,78851,51676],{"class":319},[97,78853,1483],{"class":103},[97,78855,78856,78858,78860,78862,78865,78868,78870],{"class":99,"line":1951},[97,78857,62044],{"class":370},[97,78859,51621],{"class":103},[97,78861,28311],{"class":370},[97,78863,78864],{"class":370}," ease",[97,78866,78867],{"class":370}," .5",[97,78869,1015],{"class":319},[97,78871,1483],{"class":103},[97,78873,78874,78877,78879,78881,78883],{"class":99,"line":1956},[97,78875,78876],{"class":370},"      margin-bottom",[97,78878,51621],{"class":103},[97,78880,1020],{"class":370},[97,78882,51676],{"class":319},[97,78884,1483],{"class":103},[97,78886,78887],{"class":99,"line":1970},[97,78888,2378],{"class":103},[97,78890,78891],{"class":99,"line":1975},[97,78892,2591],{"emptyLinePlaceholder":249},[97,78894,78895,78898,78900,78903],{"class":99,"line":2768},[97,78896,78897],{"class":111},"    .item:nth-child",[97,78899,323],{"class":103},[97,78901,78902],{"class":370},"4n",[97,78904,12633],{"class":103},[97,78906,78907,78909,78911,78913],{"class":99,"line":2782},[97,78908,62184],{"class":370},[97,78910,51621],{"class":103},[97,78912,511],{"class":370},[97,78914,1483],{"class":103},[97,78916,78917],{"class":99,"line":2790},[97,78918,2378],{"class":103},[97,78920,78921],{"class":99,"line":2795},[97,78922,2591],{"emptyLinePlaceholder":249},[97,78924,78925,78928],{"class":99,"line":2801},[97,78926,78927],{"class":111},"    .item:hover",[97,78929,15762],{"class":103},[97,78931,78932,78935,78937,78939,78941,78943,78945,78947,78949,78952,78954,78956,78958,78960,78962,78964,78966,78969],{"class":99,"line":2807},[97,78933,78934],{"class":370},"      box-shadow",[97,78936,51621],{"class":103},[97,78938,511],{"class":370},[97,78940,51676],{"class":319},[97,78942,4284],{"class":370},[97,78944,51676],{"class":319},[97,78946,2339],{"class":370},[97,78948,51676],{"class":319},[97,78950,78951],{"class":370}," rgba",[97,78953,323],{"class":103},[97,78955,511],{"class":370},[97,78957,12626],{"class":103},[97,78959,511],{"class":370},[97,78961,12626],{"class":103},[97,78963,511],{"class":370},[97,78965,12626],{"class":103},[97,78967,78968],{"class":370},".2",[97,78970,2910],{"class":103},[97,78972,78973,78976,78978,78981,78983,78985,78987,78990,78992,78994,78996],{"class":99,"line":2812},[97,78974,78975],{"class":370},"      transform",[97,78977,51621],{"class":103},[97,78979,78980],{"class":370},"translate3d",[97,78982,323],{"class":103},[97,78984,511],{"class":370},[97,78986,12626],{"class":103},[97,78988,78989],{"class":370},"-4",[97,78991,51676],{"class":319},[97,78993,12626],{"class":103},[97,78995,511],{"class":370},[97,78997,2910],{"class":103},[97,78999,79000,79002,79004,79006],{"class":99,"line":8139},[97,79001,62209],{"class":370},[97,79003,51621],{"class":103},[97,79005,62214],{"class":370},[97,79007,1483],{"class":103},[97,79009,79010],{"class":99,"line":8163},[97,79011,2378],{"class":103},[97,79013,79014],{"class":99,"line":8168},[97,79015,2591],{"emptyLinePlaceholder":249},[97,79017,79018,79020,79022],{"class":99,"line":8174},[97,79019,78809],{"class":111},[97,79021,55799],{"class":107},[97,79023,15762],{"class":103},[97,79025,79026,79028,79030,79032,79034],{"class":99,"line":8201},[97,79027,54955],{"class":370},[97,79029,51621],{"class":103},[97,79031,631],{"class":370},[97,79033,648],{"class":319},[97,79035,1483],{"class":103},[97,79037,79038],{"class":99,"line":8206},[97,79039,2378],{"class":103},[97,79041,79042],{"class":99,"line":8212},[97,79043,2591],{"emptyLinePlaceholder":249},[97,79045,79046,79048,79050],{"class":99,"line":8224},[97,79047,78809],{"class":111},[97,79049,62488],{"class":111},[97,79051,15762],{"class":103},[97,79053,79054,79056,79058,79060,79062],{"class":99,"line":8236},[97,79055,55106],{"class":370},[97,79057,51621],{"class":103},[97,79059,970],{"class":370},[97,79061,51676],{"class":319},[97,79063,1483],{"class":103},[97,79065,79066,79068,79070,79072,79074],{"class":99,"line":8248},[97,79067,78876],{"class":370},[97,79069,51621],{"class":103},[97,79071,766],{"class":370},[97,79073,51676],{"class":319},[97,79075,1483],{"class":103},[97,79077,79078,79080,79082,79085],{"class":99,"line":9907},[97,79079,57600],{"class":370},[97,79081,51621],{"class":103},[97,79083,79084],{"class":370},"#666",[97,79086,1483],{"class":103},[97,79088,79089],{"class":99,"line":9932},[97,79090,2378],{"class":103},[97,79092,79093],{"class":99,"line":9955},[97,79094,2591],{"emptyLinePlaceholder":249},[97,79096,79097,79099,79102],{"class":99,"line":9979},[97,79098,78809],{"class":111},[97,79100,79101],{"class":111}," .price",[97,79103,15762],{"class":103},[97,79105,79106,79108,79110,79112,79114],{"class":99,"line":9984},[97,79107,55106],{"class":370},[97,79109,51621],{"class":103},[97,79111,1070],{"class":370},[97,79113,51676],{"class":319},[97,79115,1483],{"class":103},[97,79117,79118,79120,79122,79125],{"class":99,"line":9989},[97,79119,57600],{"class":370},[97,79121,51621],{"class":103},[97,79123,79124],{"class":370},"firebrick",[97,79126,1483],{"class":103},[97,79128,79129],{"class":99,"line":9994},[97,79130,2378],{"class":103},[97,79132,79133],{"class":99,"line":10003},[97,79134,2591],{"emptyLinePlaceholder":249},[97,79136,79137,79139,79142],{"class":99,"line":10008},[97,79138,78809],{"class":111},[97,79140,79141],{"class":111}," .price::before",[97,79143,15762],{"class":103},[97,79145,79146,79149,79151,79154],{"class":99,"line":10014},[97,79147,79148],{"class":370},"      content",[97,79150,51621],{"class":103},[97,79152,79153],{"class":118},"'￥'",[97,79155,1483],{"class":103},[97,79157,79158,79160,79162,79164,79166],{"class":99,"line":10035},[97,79159,55106],{"class":370},[97,79161,51621],{"class":103},[97,79163,869],{"class":370},[97,79165,51676],{"class":319},[97,79167,1483],{"class":103},[97,79169,79170],{"class":99,"line":10041},[97,79171,2378],{"class":103},[97,79173,79174],{"class":99,"line":10055},[97,79175,2591],{"emptyLinePlaceholder":249},[97,79177,79178,79181],{"class":99,"line":10061},[97,79179,79180],{"class":111},"    .filter",[97,79182,15762],{"class":103},[97,79184,79185,79187,79189,79191],{"class":99,"line":10088},[97,79186,55193],{"class":370},[97,79188,51621],{"class":103},[97,79190,51661],{"class":370},[97,79192,1483],{"class":103},[97,79194,79195,79197,79199,79201,79203],{"class":99,"line":10097},[97,79196,54955],{"class":370},[97,79198,51621],{"class":103},[97,79200,78758],{"class":370},[97,79202,51676],{"class":319},[97,79204,1483],{"class":103},[97,79206,79207,79209,79211,79213,79215],{"class":99,"line":10103},[97,79208,54890],{"class":370},[97,79210,51621],{"class":103},[97,79212,511],{"class":370},[97,79214,51740],{"class":370},[97,79216,1483],{"class":103},[97,79218,79219,79221,79223,79225,79227,79229],{"class":99,"line":10111},[97,79220,54879],{"class":370},[97,79222,51621],{"class":103},[97,79224,976],{"class":370},[97,79226,51676],{"class":319},[97,79228,78849],{"class":370},[97,79230,79231],{"class":319},"px\n",[97,79233,79234],{"class":99,"line":10116},[97,79235,2378],{"class":103},[97,79237,79238],{"class":99,"line":16794},[97,79239,2591],{"emptyLinePlaceholder":249},[97,79241,79242,79244,79246],{"class":99,"line":16800},[97,79243,79180],{"class":111},[97,79245,1591],{"class":107},[97,79247,15762],{"class":103},[97,79249,79250,79252,79254,79256,79258,79260,79262],{"class":99,"line":16823},[97,79251,54879],{"class":370},[97,79253,51621],{"class":103},[97,79255,766],{"class":370},[97,79257,51676],{"class":319},[97,79259,9141],{"class":370},[97,79261,51676],{"class":319},[97,79263,1483],{"class":103},[97,79265,79266,79268,79270,79272],{"class":99,"line":16829},[97,79267,61905],{"class":370},[97,79269,51621],{"class":103},[97,79271,62002],{"class":370},[97,79273,1483],{"class":103},[97,79275,79276,79278,79280,79282],{"class":99,"line":16852},[97,79277,57600],{"class":370},[97,79279,51621],{"class":103},[97,79281,79084],{"class":370},[97,79283,1483],{"class":103},[97,79285,79286,79288,79290,79292],{"class":99,"line":16866},[97,79287,64154],{"class":370},[97,79289,51621],{"class":103},[97,79291,54921],{"class":370},[97,79293,1483],{"class":103},[97,79295,79296,79298,79300,79302,79304],{"class":99,"line":16886},[97,79297,61934],{"class":370},[97,79299,51621],{"class":103},[97,79301,1020],{"class":370},[97,79303,51676],{"class":319},[97,79305,1483],{"class":103},[97,79307,79308],{"class":99,"line":16892},[97,79309,2378],{"class":103},[97,79311,79312],{"class":99,"line":16903},[97,79313,2591],{"emptyLinePlaceholder":249},[97,79315,79316,79318,79320,79322],{"class":99,"line":16926},[97,79317,79180],{"class":111},[97,79319,1591],{"class":107},[97,79321,62084],{"class":111},[97,79323,15762],{"class":103},[97,79325,79326,79328,79330,79333],{"class":99,"line":16948},[97,79327,55068],{"class":370},[97,79329,51621],{"class":103},[97,79331,79332],{"class":370},"#05943c",[97,79334,1483],{"class":103},[97,79336,79337,79339,79341,79343],{"class":99,"line":16953},[97,79338,57600],{"class":370},[97,79340,51621],{"class":103},[97,79342,61026],{"class":370},[97,79344,1483],{"class":103},[97,79346,79347],{"class":99,"line":16959},[97,79348,2378],{"class":103},[97,79350,79351,79353,79355],{"class":99,"line":16973},[97,79352,52601],{"class":103},[97,79354,231],{"class":107},[97,79356,130],{"class":103},[97,79358,79359,79361,79363],{"class":99,"line":16986},[97,79360,51969],{"class":103},[97,79362,51522],{"class":107},[97,79364,130],{"class":103},[97,79366,79367],{"class":99,"line":16991},[97,79368,2591],{"emptyLinePlaceholder":249},[97,79370,79371,79373,79375],{"class":99,"line":17005},[97,79372,104],{"class":103},[97,79374,51984],{"class":107},[97,79376,130],{"class":103},[97,79378,79379,79381,79383,79385,79387,79390],{"class":99,"line":17010},[97,79380,52328],{"class":103},[97,79382,51795],{"class":107},[97,79384,53670],{"class":111},[97,79386,115],{"class":103},[97,79388,79389],{"class":118},"\"filter\"",[97,79391,130],{"class":103},[97,79393,79394,79396,79398,79400,79402,79404,79407,79409,79411,79414,79416],{"class":99,"line":17016},[97,79395,51529],{"class":103},[97,79397,558],{"class":107},[97,79399,61241],{"class":111},[97,79401,115],{"class":103},[97,79403,61246],{"class":118},[97,79405,79406],{"class":111}," data-index",[97,79408,115],{"class":103},[97,79410,3869],{"class":118},[97,79412,79413],{"class":103},">0-100元\u003C\u002F",[97,79415,558],{"class":107},[97,79417,130],{"class":103},[97,79419,79420,79422,79424,79426,79428,79430,79432,79434,79436,79439,79441],{"class":99,"line":17021},[97,79421,51529],{"class":103},[97,79423,558],{"class":107},[97,79425,61241],{"class":111},[97,79427,115],{"class":103},[97,79429,61246],{"class":118},[97,79431,79406],{"class":111},[97,79433,115],{"class":103},[97,79435,3892],{"class":118},[97,79437,79438],{"class":103},">100-300元\u003C\u002F",[97,79440,558],{"class":107},[97,79442,130],{"class":103},[97,79444,79445,79447,79449,79451,79453,79455,79457,79459,79461,79464,79466],{"class":99,"line":17035},[97,79446,51529],{"class":103},[97,79448,558],{"class":107},[97,79450,61241],{"class":111},[97,79452,115],{"class":103},[97,79454,61246],{"class":118},[97,79456,79406],{"class":111},[97,79458,115],{"class":103},[97,79460,3905],{"class":118},[97,79462,79463],{"class":103},">300元以上\u003C\u002F",[97,79465,558],{"class":107},[97,79467,130],{"class":103},[97,79469,79470,79472,79474,79476,79478,79480,79483,79485],{"class":99,"line":17040},[97,79471,51529],{"class":103},[97,79473,558],{"class":107},[97,79475,61241],{"class":111},[97,79477,115],{"class":103},[97,79479,61246],{"class":118},[97,79481,79482],{"class":103},">全部区间\u003C\u002F",[97,79484,558],{"class":107},[97,79486,130],{"class":103},[97,79488,79489,79491,79493],{"class":99,"line":17045},[97,79490,52601],{"class":103},[97,79492,51795],{"class":107},[97,79494,130],{"class":103},[97,79496,79497,79499,79501,79503,79505,79507],{"class":99,"line":17059},[97,79498,52328],{"class":103},[97,79500,51795],{"class":107},[97,79502,53670],{"class":111},[97,79504,115],{"class":103},[97,79506,62792],{"class":118},[97,79508,130],{"class":103},[97,79510,79511],{"class":99,"line":17071},[97,79512,79513],{"class":191},"    \u003C!-- \u003Cdiv class=\"item\">\n",[97,79515,79516],{"class":99,"line":17076},[97,79517,79518],{"class":191},"      \u003Cimg src=\"\" alt=\"\">\n",[97,79520,79521],{"class":99,"line":17089},[97,79522,79523],{"class":191},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[97,79525,79526],{"class":99,"line":17094},[97,79527,79528],{"class":191},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[97,79530,79531],{"class":99,"line":17099},[97,79532,79533],{"class":191},"    \u003C\u002Fdiv> -->\n",[97,79535,79536,79538,79540],{"class":99,"line":17104},[97,79537,52601],{"class":103},[97,79539,51795],{"class":107},[97,79541,130],{"class":103},[97,79543,79544,79546,79548],{"class":99,"line":17117},[97,79545,52328],{"class":103},[97,79547,51997],{"class":107},[97,79549,130],{"class":103},[97,79551,79552],{"class":99,"line":17122},[97,79553,79554],{"class":191},"    \u002F\u002F 2. 初始化数据\n",[97,79556,79557,79559,79562,79564],{"class":99,"line":32823},[97,79558,11412],{"class":319},[97,79560,79561],{"class":370}," goodsList",[97,79563,13755],{"class":319},[97,79565,55631],{"class":103},[97,79567,79568],{"class":99,"line":32829},[97,79569,79570],{"class":103},"      {\n",[97,79572,79573,79576,79579],{"class":99,"line":32835},[97,79574,79575],{"class":103},"        id: ",[97,79577,79578],{"class":118},"'4001172'",[97,79580,31656],{"class":103},[97,79582,79583,79586,79589],{"class":99,"line":32841},[97,79584,79585],{"class":103},"        name: ",[97,79587,79588],{"class":118},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[97,79590,31656],{"class":103},[97,79592,79593,79596,79599],{"class":99,"line":32847},[97,79594,79595],{"class":103},"        price: ",[97,79597,79598],{"class":118},"'289.00'",[97,79600,31656],{"class":103},[97,79602,79603,79606,79609],{"class":99,"line":32858},[97,79604,79605],{"class":103},"        picture: ",[97,79607,79608],{"class":118},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[97,79610,31656],{"class":103},[97,79612,79613],{"class":99,"line":32864},[97,79614,78076],{"class":103},[97,79616,79617],{"class":99,"line":32884},[97,79618,79570],{"class":103},[97,79620,79621,79623,79626],{"class":99,"line":32890},[97,79622,79575],{"class":103},[97,79624,79625],{"class":118},"'4001594'",[97,79627,31656],{"class":103},[97,79629,79630,79632,79635],{"class":99,"line":32901},[97,79631,79585],{"class":103},[97,79633,79634],{"class":118},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[97,79636,31656],{"class":103},[97,79638,79639,79641,79644],{"class":99,"line":32907},[97,79640,79595],{"class":103},[97,79642,79643],{"class":118},"'288.00'",[97,79645,31656],{"class":103},[97,79647,79648,79650,79653],{"class":99,"line":32913},[97,79649,79605],{"class":103},[97,79651,79652],{"class":118},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[97,79654,31656],{"class":103},[97,79656,79657],{"class":99,"line":32919},[97,79658,78076],{"class":103},[97,79660,79661],{"class":99,"line":32925},[97,79662,79570],{"class":103},[97,79664,79665,79667,79670],{"class":99,"line":32931},[97,79666,79575],{"class":103},[97,79668,79669],{"class":118},"'4001009'",[97,79671,31656],{"class":103},[97,79673,79674,79676,79679],{"class":99,"line":32937},[97,79675,79585],{"class":103},[97,79677,79678],{"class":118},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[97,79680,31656],{"class":103},[97,79682,79683,79685,79688],{"class":99,"line":32943},[97,79684,79595],{"class":103},[97,79686,79687],{"class":118},"'109.00'",[97,79689,31656],{"class":103},[97,79691,79692,79694,79697],{"class":99,"line":32963},[97,79693,79605],{"class":103},[97,79695,79696],{"class":118},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[97,79698,31656],{"class":103},[97,79700,79701],{"class":99,"line":32969},[97,79702,78076],{"class":103},[97,79704,79705],{"class":99,"line":32985},[97,79706,79570],{"class":103},[97,79708,79709,79711,79714],{"class":99,"line":32991},[97,79710,79575],{"class":103},[97,79712,79713],{"class":118},"'4001874'",[97,79715,31656],{"class":103},[97,79717,79718,79720,79723],{"class":99,"line":33005},[97,79719,79585],{"class":103},[97,79721,79722],{"class":118},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[97,79724,31656],{"class":103},[97,79726,79727,79729,79732],{"class":99,"line":33011},[97,79728,79595],{"class":103},[97,79730,79731],{"class":118},"'488.00'",[97,79733,31656],{"class":103},[97,79735,79736,79738,79741],{"class":99,"line":33026},[97,79737,79605],{"class":103},[97,79739,79740],{"class":118},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[97,79742,31656],{"class":103},[97,79744,79745],{"class":99,"line":33032},[97,79746,78076],{"class":103},[97,79748,79749],{"class":99,"line":33041},[97,79750,79570],{"class":103},[97,79752,79753,79755,79758],{"class":99,"line":33047},[97,79754,79575],{"class":103},[97,79756,79757],{"class":118},"'4001649'",[97,79759,31656],{"class":103},[97,79761,79762,79764,79767],{"class":99,"line":33056},[97,79763,79585],{"class":103},[97,79765,79766],{"class":118},"'大师监制龙泉青瓷茶叶罐'",[97,79768,31656],{"class":103},[97,79770,79771,79773,79776],{"class":99,"line":33062},[97,79772,79595],{"class":103},[97,79774,79775],{"class":118},"'139.00'",[97,79777,31656],{"class":103},[97,79779,79780,79782,79785],{"class":99,"line":33068},[97,79781,79605],{"class":103},[97,79783,79784],{"class":118},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[97,79786,31656],{"class":103},[97,79788,79789],{"class":99,"line":33077},[97,79790,78076],{"class":103},[97,79792,79793],{"class":99,"line":33083},[97,79794,79570],{"class":103},[97,79796,79797,79799,79802],{"class":99,"line":33094},[97,79798,79575],{"class":103},[97,79800,79801],{"class":118},"'3997185'",[97,79803,31656],{"class":103},[97,79805,79806,79808,79811],{"class":99,"line":33100},[97,79807,79585],{"class":103},[97,79809,79810],{"class":118},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[97,79812,31656],{"class":103},[97,79814,79815,79817,79820],{"class":99,"line":33119},[97,79816,79595],{"class":103},[97,79818,79819],{"class":118},"'108.00'",[97,79821,31656],{"class":103},[97,79823,79824,79826,79829],{"class":99,"line":33125},[97,79825,79605],{"class":103},[97,79827,79828],{"class":118},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[97,79830,31656],{"class":103},[97,79832,79833],{"class":99,"line":33136},[97,79834,78076],{"class":103},[97,79836,79837],{"class":99,"line":33142},[97,79838,79570],{"class":103},[97,79840,79841,79843,79846],{"class":99,"line":33162},[97,79842,79575],{"class":103},[97,79844,79845],{"class":118},"'3997403'",[97,79847,31656],{"class":103},[97,79849,79850,79852,79855],{"class":99,"line":33178},[97,79851,79585],{"class":103},[97,79853,79854],{"class":118},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[97,79856,31656],{"class":103},[97,79858,79859,79861,79864],{"class":99,"line":33184},[97,79860,79595],{"class":103},[97,79862,79863],{"class":118},"'100.00'",[97,79865,31656],{"class":103},[97,79867,79868,79870,79873],{"class":99,"line":33198},[97,79869,79605],{"class":103},[97,79871,79872],{"class":118},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[97,79874,31656],{"class":103},[97,79876,79877],{"class":99,"line":33204},[97,79878,78076],{"class":103},[97,79880,79881],{"class":99,"line":33210},[97,79882,79570],{"class":103},[97,79884,79885,79887,79890],{"class":99,"line":33221},[97,79886,79575],{"class":103},[97,79888,79889],{"class":118},"'3998274'",[97,79891,31656],{"class":103},[97,79893,79894,79896,79899],{"class":99,"line":33227},[97,79895,79585],{"class":103},[97,79897,79898],{"class":118},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[97,79900,31656],{"class":103},[97,79902,79903,79905,79907],{"class":99,"line":33233},[97,79904,79595],{"class":103},[97,79906,79775],{"class":118},[97,79908,31656],{"class":103},[97,79910,79911,79913,79916],{"class":99,"line":33243},[97,79912,79605],{"class":103},[97,79914,79915],{"class":118},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[97,79917,31656],{"class":103},[97,79919,79920],{"class":99,"line":33249},[97,79921,78076],{"class":103},[97,79923,79924],{"class":99,"line":33260},[97,79925,53293],{"class":103},[97,79927,79928],{"class":99,"line":33266},[97,79929,2591],{"emptyLinePlaceholder":249},[97,79931,79932],{"class":99,"line":33276},[97,79933,79934],{"class":191},"    \u002F\u002F 1.渲染函数\n",[97,79936,79937,79939,79941,79943,79945],{"class":99,"line":33281},[97,79938,70268],{"class":319},[97,79940,70271],{"class":111},[97,79942,323],{"class":103},[97,79944,4071],{"class":5407},[97,79946,12633],{"class":103},[97,79948,79949],{"class":99,"line":33287},[97,79950,79951],{"class":191},"      \u002F\u002F 声明空字符串\n",[97,79953,79954,79957,79960,79962],{"class":99,"line":33336},[97,79955,79956],{"class":319},"      let",[97,79958,79959],{"class":103}," str ",[97,79961,115],{"class":319},[97,79963,70288],{"class":118},[97,79965,79966],{"class":99,"line":33383},[97,79967,70293],{"class":191},[97,79969,79970,79972,79975,79977,79980,79983],{"class":99,"line":33388},[97,79971,58191],{"class":103},[97,79973,79974],{"class":111},"forEach",[97,79976,323],{"class":103},[97,79978,79979],{"class":5407},"item",[97,79981,79982],{"class":319}," =>",[97,79984,15762],{"class":103},[97,79986,79987,79989,79992,79995,79997,80000,80002,80005,80008,80010],{"class":99,"line":33394},[97,79988,61454],{"class":319},[97,79990,79991],{"class":103}," { ",[97,79993,79994],{"class":370},"name",[97,79996,12626],{"class":103},[97,79998,79999],{"class":370},"price",[97,80001,12626],{"class":103},[97,80003,80004],{"class":370},"picture",[97,80006,80007],{"class":103}," } ",[97,80009,115],{"class":319},[97,80011,80012],{"class":103}," item\n",[97,80014,80015,80018,80020],{"class":99,"line":33413},[97,80016,80017],{"class":103},"        str ",[97,80019,9668],{"class":319},[97,80021,70352],{"class":118},[97,80023,80024],{"class":99,"line":33419},[97,80025,80026],{"class":118},"          \u003Cdiv class=\"item\">\n",[97,80028,80029,80032,80034],{"class":99,"line":33439},[97,80030,80031],{"class":118},"            \u003Cimg src=\"${",[97,80033,80004],{"class":103},[97,80035,80036],{"class":118},"}\" alt=\"\">\n",[97,80038,80039,80042,80044],{"class":99,"line":33445},[97,80040,80041],{"class":118},"            \u003Cp class=\"name\">${",[97,80043,79994],{"class":103},[97,80045,80046],{"class":118},"}\u003C\u002Fp>\n",[97,80048,80049,80052,80054],{"class":99,"line":33451},[97,80050,80051],{"class":118},"            \u003Cp class=\"price\">${",[97,80053,79999],{"class":103},[97,80055,80046],{"class":118},[97,80057,80058],{"class":99,"line":33461},[97,80059,80060],{"class":118},"          \u003C\u002Fdiv>\n",[97,80062,80063],{"class":99,"line":33466},[97,80064,80065],{"class":118},"        `\n",[97,80067,80068],{"class":99,"line":33472},[97,80069,64999],{"class":103},[97,80071,80072],{"class":99,"line":33488},[97,80073,80074],{"class":191},"      \u002F\u002F 追加给List\n",[97,80076,80077,80079,80081,80083,80086,80088,80090],{"class":99,"line":33533},[97,80078,55955],{"class":103},[97,80080,54583],{"class":111},[97,80082,323],{"class":103},[97,80084,80085],{"class":118},"'.list'",[97,80087,74433],{"class":103},[97,80089,115],{"class":319},[97,80091,74169],{"class":103},[97,80093,80094],{"class":99,"line":33539},[97,80095,2378],{"class":103},[97,80097,80098],{"class":99,"line":33545},[97,80099,80100],{"class":191},"    \u002F\u002F 页面一打开就需要渲染\n",[97,80102,80103,80106],{"class":99,"line":33551},[97,80104,80105],{"class":111},"    render",[97,80107,80108],{"class":103},"(goodsList)\n",[97,80110,80111],{"class":99,"line":33562},[97,80112,80113],{"class":191},"    \u002F\u002F 2.过滤筛选\n",[97,80115,80116,80118,80120,80122,80125,80127,80129,80131,80133,80135,80137,80139],{"class":99,"line":33568},[97,80117,52591],{"class":103},[97,80119,54583],{"class":111},[97,80121,323],{"class":103},[97,80123,80124],{"class":118},"'.filter'",[97,80126,31016],{"class":103},[97,80128,57997],{"class":111},[97,80130,323],{"class":103},[97,80132,58002],{"class":118},[97,80134,12626],{"class":103},[97,80136,395],{"class":5407},[97,80138,79982],{"class":319},[97,80140,15762],{"class":103},[97,80142,80143],{"class":99,"line":33574},[97,80144,80145],{"class":191},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[97,80147,80148,80150,80152,80155,80157,80159,80161,80163],{"class":99,"line":33580},[97,80149,58412],{"class":319},[97,80151,79991],{"class":103},[97,80153,80154],{"class":370},"tagName",[97,80156,12626],{"class":103},[97,80158,31727],{"class":370},[97,80160,80007],{"class":103},[97,80162,115],{"class":319},[97,80164,80165],{"class":103}," e.target\n",[97,80167,80168],{"class":99,"line":33598},[97,80169,80170],{"class":191},"      \u002F\u002F 判断\n",[97,80172,80173,80175,80177,80179,80181],{"class":99,"line":33612},[97,80174,54664],{"class":319},[97,80176,67218],{"class":103},[97,80178,54670],{"class":319},[97,80180,68440],{"class":118},[97,80182,12633],{"class":103},[97,80184,80185],{"class":99,"line":33621},[97,80186,80187],{"class":191},"        \u002F\u002F console.log(11)\n",[97,80189,80190],{"class":99,"line":33630},[97,80191,80192],{"class":191},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[97,80194,80195],{"class":99,"line":33639},[97,80196,80197],{"class":191},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[97,80199,80200,80202,80204,80206],{"class":99,"line":33648},[97,80201,52014],{"class":319},[97,80203,52017],{"class":103},[97,80205,115],{"class":319},[97,80207,80208],{"class":103}," goodsList\n",[97,80210,80211,80213,80216,80218,80221],{"class":99,"line":33654},[97,80212,2688],{"class":319},[97,80214,80215],{"class":103}," (dataset.index ",[97,80217,54670],{"class":319},[97,80219,80220],{"class":118}," '1'",[97,80222,12633],{"class":103},[97,80224,80225,80228,80230,80233,80236,80238,80240,80242,80245,80247,80249,80252,80254,80256,80258],{"class":99,"line":33660},[97,80226,80227],{"class":103},"          arr ",[97,80229,115],{"class":319},[97,80231,80232],{"class":103}," goodsList.",[97,80234,80235],{"class":111},"filter",[97,80237,323],{"class":103},[97,80239,79979],{"class":5407},[97,80241,79982],{"class":319},[97,80243,80244],{"class":103}," item.price ",[97,80246,1902],{"class":319},[97,80248,4284],{"class":370},[97,80250,80251],{"class":319}," &&",[97,80253,80244],{"class":103},[97,80255,1780],{"class":319},[97,80257,5945],{"class":370},[97,80259,329],{"class":103},[97,80261,80262,80265,80267,80269,80271,80273,80276],{"class":99,"line":33668},[97,80263,80264],{"class":103},"        } ",[97,80266,1893],{"class":319},[97,80268,1896],{"class":319},[97,80270,80215],{"class":103},[97,80272,54670],{"class":319},[97,80274,80275],{"class":118}," '2'",[97,80277,12633],{"class":103},[97,80279,80280,80282,80284,80286,80288,80290,80292,80294,80296,80298,80300,80302,80304,80306,80309],{"class":99,"line":33673},[97,80281,80227],{"class":103},[97,80283,115],{"class":319},[97,80285,80232],{"class":103},[97,80287,80235],{"class":111},[97,80289,323],{"class":103},[97,80291,79979],{"class":5407},[97,80293,79982],{"class":319},[97,80295,80244],{"class":103},[97,80297,1902],{"class":319},[97,80299,5945],{"class":370},[97,80301,80251],{"class":319},[97,80303,80244],{"class":103},[97,80305,1780],{"class":319},[97,80307,80308],{"class":370}," 300",[97,80310,329],{"class":103},[97,80312,80313,80315,80317,80319,80321,80323,80326],{"class":99,"line":33679},[97,80314,80264],{"class":103},[97,80316,1893],{"class":319},[97,80318,1896],{"class":319},[97,80320,80215],{"class":103},[97,80322,54670],{"class":319},[97,80324,80325],{"class":118}," '3'",[97,80327,12633],{"class":103},[97,80329,80330,80332,80334,80336,80338,80340,80342,80344,80346,80348,80350],{"class":99,"line":33690},[97,80331,80227],{"class":103},[97,80333,115],{"class":319},[97,80335,80232],{"class":103},[97,80337,80235],{"class":111},[97,80339,323],{"class":103},[97,80341,79979],{"class":5407},[97,80343,79982],{"class":319},[97,80345,80244],{"class":103},[97,80347,1902],{"class":319},[97,80349,80308],{"class":370},[97,80351,329],{"class":103},[97,80353,80354],{"class":99,"line":33696},[97,80355,2720],{"class":103},[97,80357,80358],{"class":99,"line":33716},[97,80359,80360],{"class":191},"        \u002F\u002F 渲染函数\n",[97,80362,80363,80365],{"class":99,"line":33722},[97,80364,70592],{"class":111},[97,80366,52596],{"class":103},[97,80368,80369],{"class":99,"line":33728},[97,80370,52582],{"class":103},[97,80372,80373],{"class":99,"line":33734},[97,80374,2591],{"emptyLinePlaceholder":249},[97,80376,80377],{"class":99,"line":33751},[97,80378,33651],{"class":103},[97,80380,80381,80383,80385],{"class":99,"line":33757},[97,80382,52601],{"class":103},[97,80384,51997],{"class":107},[97,80386,130],{"class":103},[97,80388,80389,80391,80393],{"class":99,"line":33763},[97,80390,51969],{"class":103},[97,80392,51984],{"class":107},[97,80394,130],{"class":103},[97,80396,80397],{"class":99,"line":33769},[97,80398,2591],{"emptyLinePlaceholder":249},[97,80400,80401,80403,80405],{"class":99,"line":33775},[97,80402,51969],{"class":103},[97,80404,50825],{"class":107},[97,80406,130],{"class":103},[14,80408,80410],{"id":80409},"_410-深入了解对象","4.10 深入了解对象",[48,80412,80414],{"id":80413},"_4101-创建对象","4.10.1 创建对象",[24,80416,80417],{},[19,80418],{"alt":92,"src":80419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[24,80421,80422],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[48,80424,80426],{"id":80425},"_4102-构造函数","4.10.2 构造函数",[24,80428,80429,80432],{},[469,80430,80431],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[24,80434,80435,80438],{},[469,80436,80437],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[87,80440,80442],{"className":50823,"code":80441,"language":50825,"meta":92,"style":92},"\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",[94,80443,80444,80452,80457,80478,80491,80503,80515,80519,80524,80551,80556,80583],{"__ignoreMap":92},[97,80445,80446,80448,80450],{"class":99,"line":100},[97,80447,104],{"class":103},[97,80449,51997],{"class":107},[97,80451,130],{"class":103},[97,80453,80454],{"class":99,"line":195},[97,80455,80456],{"class":191},"\u002F\u002F例：\n",[97,80458,80459,80461,80464,80466,80468,80470,80472,80474,80476],{"class":99,"line":241},[97,80460,54633],{"class":319},[97,80462,80463],{"class":111}," Pig",[97,80465,323],{"class":103},[97,80467,79994],{"class":5407},[97,80469,698],{"class":103},[97,80471,70405],{"class":5407},[97,80473,698],{"class":103},[97,80475,70422],{"class":5407},[97,80477,12633],{"class":103},[97,80479,80480,80483,80486,80488],{"class":99,"line":1387},[97,80481,80482],{"class":370},"    this",[97,80484,80485],{"class":103},".name",[97,80487,115],{"class":319},[97,80489,80490],{"class":103},"name\n",[97,80492,80493,80495,80498,80500],{"class":99,"line":1393},[97,80494,80482],{"class":370},[97,80496,80497],{"class":103},".age",[97,80499,115],{"class":319},[97,80501,80502],{"class":103},"age\n",[97,80504,80505,80507,80510,80512],{"class":99,"line":1407},[97,80506,80482],{"class":370},[97,80508,80509],{"class":103},".gender",[97,80511,115],{"class":319},[97,80513,80514],{"class":103},"gender    \n",[97,80516,80517],{"class":99,"line":1413},[97,80518,1757],{"class":103},[97,80520,80521],{"class":99,"line":1504},[97,80522,80523],{"class":191},"\u002F\u002F创建佩奇对象\n",[97,80525,80526,80528,80531,80533,80535,80537,80540,80542,80544,80546,80549],{"class":99,"line":1510},[97,80527,6983],{"class":319},[97,80529,80530],{"class":370}," Peppa",[97,80532,11908],{"class":319},[97,80534,80463],{"class":111},[97,80536,323],{"class":103},[97,80538,80539],{"class":118},"'佩奇'",[97,80541,698],{"class":103},[97,80543,664],{"class":370},[97,80545,698],{"class":103},[97,80547,80548],{"class":118},"'女'",[97,80550,329],{"class":103},[97,80552,80553],{"class":99,"line":1522},[97,80554,80555],{"class":191},"\u002F\u002F创建乔治对象\n",[97,80557,80558,80560,80563,80565,80567,80569,80572,80574,80576,80578,80581],{"class":99,"line":1804},[97,80559,6983],{"class":319},[97,80561,80562],{"class":370}," George",[97,80564,11908],{"class":319},[97,80566,80463],{"class":111},[97,80568,323],{"class":103},[97,80570,80571],{"class":118},"'乔治'",[97,80573,698],{"class":103},[97,80575,392],{"class":370},[97,80577,698],{"class":103},[97,80579,80580],{"class":118},"'男'",[97,80582,329],{"class":103},[97,80584,80585,80587,80589],{"class":99,"line":1809},[97,80586,51969],{"class":103},[97,80588,51997],{"class":107},[97,80590,130],{"class":103},[24,80592,80593],{},[19,80594],{"alt":92,"src":80595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[24,80597,80598],{},[19,80599],{"alt":92,"src":80600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[24,80602,80603],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[24,80605,80606],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[24,80608,80609],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[24,80611,80612],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[24,80614,80615],{},"这里用等号是因为：对象.属性=值",[24,80617,80618],{},"①利用对象字面量创建对象",[24,80620,80621],{},"const o={",[24,80623,80624],{},"name:'pink'",[24,80626,80627],{},"} ②利用new Object创建对象",[24,80629,80630],{},"const o=new Object({name:'pink'})",[24,80632,80633],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[24,80635,80636],{},"构造函数创建对象的执行过程：",[24,80638,80639],{},[19,80640],{"alt":92,"src":80641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[48,80643,80645],{"id":80644},"_4103-实例成员","4.10.3 实例成员",[24,80647,80648],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[138,80650,80651,80654,80657],{},[70,80652,80653],{},"实例对象的属性和方法即为实例成员",[70,80655,80656],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[70,80658,80659],{},"构造函数创建的实例对象彼此独立互不影响",[48,80661,80663],{"id":80662},"_4104-静态成员","4.10.4 静态成员",[24,80665,80666],{},[19,80667],{"alt":92,"src":80668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[24,80670,80671],{},"静态成员有Date.now() Math.PI Math.random()",[24,80673,80674],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[24,80676,80677],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[24,80679,80680],{},"function Pig(name) n {",[24,80682,80683],{},"this.name=name",[24,80685,1265],{},[24,80687,80688],{},"Pig.eyes=2",[24,80690,80691],{},"Pig.sayHai=function () { console.log(this) }",[24,80693,80694],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[24,80696,80697],{},"console.log(Pig.eyes) \u002F\u002F2",[24,80699,11523],{},[138,80701,80702,80705,80708,80711,80714],{},[70,80703,80704],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[70,80706,80707],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[70,80709,80710],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[70,80712,80713],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[70,80715,80716],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[24,80718,80719],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[48,80721,80723],{"id":80722},"_4105-内置构造函数","4.10.5 内置构造函数",[24,80725,80726],{},"内置构造函数包含：",[24,80728,80729],{},[19,80730],{"alt":92,"src":80731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[24,80733,80734],{},[19,80735],{"alt":92,"src":80736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[24,80738,80739],{},"这些基本数据类型，js对他们进行了包装",[51997,80741,80742],{},"\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",[160,80744,80746],{"id":80745},"_41051-object","4.10.5.1 Object",[24,80748,80749],{},"Object 是内置的构造函数，用于创建普通对象",[24,80751,80752],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[87,80754,80756],{"className":50823,"code":80755,"language":50825,"meta":92,"style":92},"const user=new Object({name:'小明',age:15})\n",[94,80757,80758],{"__ignoreMap":92},[97,80759,80760],{"class":99,"line":100},[97,80761,80755],{"class":103},[24,80763,80764],{},"三个常用的静态方法：",[23099,80766,80768],{"id":80767},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[24,80770,80771],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[24,80773,80774],{},[19,80775],{"alt":92,"src":80776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[24,80778,80779],{},[19,80780],{"alt":92,"src":80781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[87,80783,80785],{"className":53251,"code":80784,"language":53253,"meta":92,"style":92},"\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",[94,80786,80787,80795,80803,80808,80813,80818,80823,80828,80833,80841],{"__ignoreMap":92},[97,80788,80789,80791,80793],{"class":99,"line":100},[97,80790,104],{"class":103},[97,80792,51984],{"class":107},[97,80794,130],{"class":103},[97,80796,80797,80799,80801],{"class":99,"line":195},[97,80798,52328],{"class":103},[97,80800,51997],{"class":107},[97,80802,130],{"class":103},[97,80804,80805],{"class":99,"line":241},[97,80806,80807],{"class":103},"    const o = { name: 'pink', age: 6 }\n",[97,80809,80810],{"class":99,"line":1387},[97,80811,80812],{"class":103},"    \u002F\u002F 获得所有属性名\n",[97,80814,80815],{"class":99,"line":1393},[97,80816,80817],{"class":103},"    const arr = Object.keys(o)\n",[97,80819,80820],{"class":99,"line":1407},[97,80821,80822],{"class":103},"    console.log(arr)\n",[97,80824,80825],{"class":99,"line":1413},[97,80826,80827],{"class":103},"    \u002F\u002F 获得所有属性值\n",[97,80829,80830],{"class":99,"line":1504},[97,80831,80832],{"class":103},"    console.log(Object.values(o))\n",[97,80834,80835,80837,80839],{"class":99,"line":1510},[97,80836,52601],{"class":103},[97,80838,51997],{"class":107},[97,80840,130],{"class":103},[97,80842,80843,80845,80847],{"class":99,"line":1522},[97,80844,51969],{"class":103},[97,80846,51984],{"class":107},[97,80848,130],{"class":103},[23099,80850,80852],{"id":80851},"_410512-object-assign","4.10.5.1.2 Object. assign",[24,80854,80855],{},"Object.assign(oo,o)",[24,80857,80858],{},"后的东西添加给前 是追加",[24,80860,80861],{},[19,80862],{"alt":92,"src":80863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[24,80865,80866],{},[19,80867],{"alt":92,"src":80868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[87,80870,80872],{"className":53251,"code":80871,"language":53253,"meta":92,"style":92},"\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",[94,80873,80874,80882,80890,80894,80898,80902,80906,80910,80914,80919,80924,80929,80934,80939,80947],{"__ignoreMap":92},[97,80875,80876,80878,80880],{"class":99,"line":100},[97,80877,104],{"class":103},[97,80879,51984],{"class":107},[97,80881,130],{"class":103},[97,80883,80884,80886,80888],{"class":99,"line":195},[97,80885,52328],{"class":103},[97,80887,51997],{"class":107},[97,80889,130],{"class":103},[97,80891,80892],{"class":99,"line":241},[97,80893,80807],{"class":103},[97,80895,80896],{"class":99,"line":1387},[97,80897,80812],{"class":103},[97,80899,80900],{"class":99,"line":1393},[97,80901,80817],{"class":103},[97,80903,80904],{"class":99,"line":1407},[97,80905,80822],{"class":103},[97,80907,80908],{"class":99,"line":1413},[97,80909,80827],{"class":103},[97,80911,80912],{"class":99,"line":1504},[97,80913,80832],{"class":103},[97,80915,80916],{"class":99,"line":1510},[97,80917,80918],{"class":103},"    const oo = {}\n",[97,80920,80921],{"class":99,"line":1522},[97,80922,80923],{"class":103},"    Object.assign(oo, o)\n",[97,80925,80926],{"class":99,"line":1804},[97,80927,80928],{"class":103},"    console.log(oo)\n",[97,80930,80931],{"class":99,"line":1809},[97,80932,80933],{"class":103},"    Object.assign(o, { gender: '女' })\n",[97,80935,80936],{"class":99,"line":1815},[97,80937,80938],{"class":103},"    console.log(o)\n",[97,80940,80941,80943,80945],{"class":99,"line":1820},[97,80942,52601],{"class":103},[97,80944,51997],{"class":107},[97,80946,130],{"class":103},[97,80948,80949,80951,80953],{"class":99,"line":1834},[97,80950,51969],{"class":103},[97,80952,51984],{"class":107},[97,80954,130],{"class":103},[24,80956,80957],{},[19,80958],{"alt":92,"src":80959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[160,80961,80963],{"id":80962},"_41052-array","4.10.5.2 Array",[24,80965,80966],{},"Array 是内置的构造函数，用于创建数组",[24,80968,80969],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[87,80971,80973],{"className":50823,"code":80972,"language":50825,"meta":92,"style":92},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[94,80974,80975,80980],{"__ignoreMap":92},[97,80976,80977],{"class":99,"line":100},[97,80978,80979],{"class":103},"const arr=new Array(3,5)\n",[97,80981,80982],{"class":99,"line":195},[97,80983,80984],{"class":103},"console.log(arr)  \u002F\u002F[3,5]\n",[24,80986,80987],{},"Array的实例方法，这个方法是实例成员",[24,80989,80990],{},[19,80991],{"alt":92,"src":80992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23099,80994,80996],{"id":80995},"_410521-reduce","4.10.5.2.1 reduce",[24,80998,80999],{},[19,81000],{"alt":92,"src":81001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[87,81003,81005],{"className":53251,"code":81004,"language":53253,"meta":92,"style":92},"\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",[94,81006,81007,81015,81023,81028,81033,81038,81043,81047,81052,81057,81062,81066,81071,81076,81080,81085,81090,81095,81103],{"__ignoreMap":92},[97,81008,81009,81011,81013],{"class":99,"line":100},[97,81010,104],{"class":103},[97,81012,51984],{"class":107},[97,81014,130],{"class":103},[97,81016,81017,81019,81021],{"class":99,"line":195},[97,81018,52328],{"class":103},[97,81020,51997],{"class":107},[97,81022,130],{"class":103},[97,81024,81025],{"class":99,"line":241},[97,81026,81027],{"class":103},"    const arr = [1, 5, 8]\n",[97,81029,81030],{"class":99,"line":1387},[97,81031,81032],{"class":103},"    \u002F\u002F 1.没有初始值\n",[97,81034,81035],{"class":99,"line":1393},[97,81036,81037],{"class":103},"    const total = arr.reduce(function (prev, current) {\n",[97,81039,81040],{"class":99,"line":1407},[97,81041,81042],{"class":103},"      return prev + current\n",[97,81044,81045],{"class":99,"line":1413},[97,81046,33651],{"class":103},[97,81048,81049],{"class":99,"line":1504},[97,81050,81051],{"class":103},"    console.log(total)   \u002F\u002F14\n",[97,81053,81054],{"class":99,"line":1510},[97,81055,81056],{"class":103},"    \u002F\u002F 2.有初始值\n",[97,81058,81059],{"class":99,"line":1522},[97,81060,81061],{"class":103},"    const total1 = arr.reduce(function (prev, current) {\n",[97,81063,81064],{"class":99,"line":1804},[97,81065,81042],{"class":103},[97,81067,81068],{"class":99,"line":1809},[97,81069,81070],{"class":103},"    }, 10)\n",[97,81072,81073],{"class":99,"line":1815},[97,81074,81075],{"class":103},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[97,81077,81078],{"class":99,"line":1820},[97,81079,2591],{"emptyLinePlaceholder":249},[97,81081,81082],{"class":99,"line":1834},[97,81083,81084],{"class":103},"    \u002F\u002F 3.箭头函数写法\n",[97,81086,81087],{"class":99,"line":1839},[97,81088,81089],{"class":103},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[97,81091,81092],{"class":99,"line":1845},[97,81093,81094],{"class":103},"    console.log(total2)   \u002F\u002F24\n",[97,81096,81097,81099,81101],{"class":99,"line":1866},[97,81098,52601],{"class":103},[97,81100,51997],{"class":107},[97,81102,130],{"class":103},[97,81104,81105,81107,81109],{"class":99,"line":1871},[97,81106,51969],{"class":103},[97,81108,51984],{"class":107},[97,81110,130],{"class":103},[24,81112,81113],{},"执行过程：",[138,81115,81116,81119,81122],{},[70,81117,81118],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[70,81120,81121],{},"每一次循环，把返回值给作为下一次循环的上一次值",[70,81123,81124],{},"如果有起始值，则起始值作为上一次值",[87,81126,81128],{"className":53251,"code":81127,"language":53253,"meta":92,"style":92},"\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",[94,81129,81130,81138,81146,81150,81154,81158,81162,81166,81170,81175,81180,81185,81190,81195,81199,81203,81207,81211,81215,81219,81224,81228,81233,81237,81242,81247,81251,81255,81259,81267],{"__ignoreMap":92},[97,81131,81132,81134,81136],{"class":99,"line":100},[97,81133,104],{"class":103},[97,81135,51984],{"class":107},[97,81137,130],{"class":103},[97,81139,81140,81142,81144],{"class":99,"line":195},[97,81141,52328],{"class":103},[97,81143,51997],{"class":107},[97,81145,130],{"class":103},[97,81147,81148],{"class":99,"line":241},[97,81149,81027],{"class":103},[97,81151,81152],{"class":99,"line":1387},[97,81153,81032],{"class":103},[97,81155,81156],{"class":99,"line":1393},[97,81157,81037],{"class":103},[97,81159,81160],{"class":99,"line":1407},[97,81161,81042],{"class":103},[97,81163,81164],{"class":99,"line":1413},[97,81165,33651],{"class":103},[97,81167,81168],{"class":99,"line":1504},[97,81169,81051],{"class":103},[97,81171,81172],{"class":99,"line":1510},[97,81173,81174],{"class":103},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[97,81176,81177],{"class":99,"line":1522},[97,81178,81179],{"class":103},"    \u002F\u002F     1              5                    6\n",[97,81181,81182],{"class":99,"line":1804},[97,81183,81184],{"class":103},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[97,81186,81187],{"class":99,"line":1809},[97,81188,81189],{"class":103},"    \u002F\u002F     6              8                    14\n",[97,81191,81192],{"class":99,"line":1815},[97,81193,81194],{"class":103},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[97,81196,81197],{"class":99,"line":1820},[97,81198,81056],{"class":103},[97,81200,81201],{"class":99,"line":1834},[97,81202,81061],{"class":103},[97,81204,81205],{"class":99,"line":1839},[97,81206,81042],{"class":103},[97,81208,81209],{"class":99,"line":1845},[97,81210,81070],{"class":103},[97,81212,81213],{"class":99,"line":1866},[97,81214,81075],{"class":103},[97,81216,81217],{"class":99,"line":1871},[97,81218,81174],{"class":103},[97,81220,81221],{"class":99,"line":1885},[97,81222,81223],{"class":103},"    \u002F\u002F     10             1                     11\n",[97,81225,81226],{"class":99,"line":1890},[97,81227,81184],{"class":103},[97,81229,81230],{"class":99,"line":1919},[97,81231,81232],{"class":103},"    \u002F\u002F     11             5                    16\n",[97,81234,81235],{"class":99,"line":1924},[97,81236,81184],{"class":103},[97,81238,81239],{"class":99,"line":1941},[97,81240,81241],{"class":103},"    \u002F\u002F     16             8                    24\n",[97,81243,81244],{"class":99,"line":1946},[97,81245,81246],{"class":103},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[97,81248,81249],{"class":99,"line":1951},[97,81250,81084],{"class":103},[97,81252,81253],{"class":99,"line":1956},[97,81254,81089],{"class":103},[97,81256,81257],{"class":99,"line":1970},[97,81258,81094],{"class":103},[97,81260,81261,81263,81265],{"class":99,"line":1975},[97,81262,52601],{"class":103},[97,81264,51997],{"class":107},[97,81266,130],{"class":103},[97,81268,81269,81271,81273],{"class":99,"line":2768},[97,81270,51969],{"class":103},[97,81272,51984],{"class":107},[97,81274,130],{"class":103},[23099,81276,81278],{"id":81277},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[24,81280,81281],{},[19,81282],{"alt":92,"src":81283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[87,81285,81287],{"className":53251,"code":81286,"language":53253,"meta":92,"style":92},"\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",[94,81288,81289,81297,81305,81310,81315,81320,81325,81329,81334,81339,81344,81349,81354,81359,81363,81368,81372,81377,81385],{"__ignoreMap":92},[97,81290,81291,81293,81295],{"class":99,"line":100},[97,81292,104],{"class":103},[97,81294,51984],{"class":107},[97,81296,130],{"class":103},[97,81298,81299,81301,81303],{"class":99,"line":195},[97,81300,52328],{"class":103},[97,81302,51997],{"class":107},[97,81304,130],{"class":103},[97,81306,81307],{"class":99,"line":241},[97,81308,81309],{"class":103},"    const arr = [\n",[97,81311,81312],{"class":99,"line":1387},[97,81313,81314],{"class":103},"      { name: '张三', salary: 10000 },\n",[97,81316,81317],{"class":99,"line":1393},[97,81318,81319],{"class":103},"      { name: '李四', salary: 10000 },\n",[97,81321,81322],{"class":99,"line":1407},[97,81323,81324],{"class":103},"      { name: '王五', salary: 10000 }\n",[97,81326,81327],{"class":99,"line":1413},[97,81328,53293],{"class":103},[97,81330,81331],{"class":99,"line":1504},[97,81332,81333],{"class":103},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[97,81335,81336],{"class":99,"line":1510},[97,81337,81338],{"class":103},"    \u002F\u002F prev是累计值\n",[97,81340,81341],{"class":99,"line":1522},[97,81342,81343],{"class":103},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[97,81345,81346],{"class":99,"line":1804},[97,81347,81348],{"class":103},"    console.log(total)\n",[97,81350,81351],{"class":99,"line":1809},[97,81352,81353],{"class":103},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[97,81355,81356],{"class":99,"line":1815},[97,81357,81358],{"class":103},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[97,81360,81361],{"class":99,"line":1820},[97,81362,81353],{"class":103},[97,81364,81365],{"class":99,"line":1834},[97,81366,81367],{"class":103},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[97,81369,81370],{"class":99,"line":1839},[97,81371,81353],{"class":103},[97,81373,81374],{"class":99,"line":1845},[97,81375,81376],{"class":103},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[97,81378,81379,81381,81383],{"class":99,"line":1866},[97,81380,52601],{"class":103},[97,81382,51997],{"class":107},[97,81384,130],{"class":103},[97,81386,81387,81389,81391],{"class":99,"line":1871},[97,81388,51969],{"class":103},[97,81390,51984],{"class":107},[97,81392,130],{"class":103},[23099,81394,81396],{"id":81395},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[24,81398,81399],{},[19,81400],{"alt":92,"src":81401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[24,81403,81404],{},[19,81405],{"alt":92,"src":81406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[138,81408,81409],{},[70,81410,81411],{},"find()",[24,81413,81414],{},"循环查找，找到第一个就ok",[24,81416,81417],{},[558,81418,81421],{"href":81419,"rel":81420},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24054],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[87,81423,81425],{"className":50823,"code":81424,"language":50825,"meta":92,"style":92},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[94,81426,81427,81432,81437],{"__ignoreMap":92},[97,81428,81429],{"class":99,"line":100},[97,81430,81431],{"class":103},"const array1 = [5, 12, 8, 130, 44]\n",[97,81433,81434],{"class":99,"line":195},[97,81435,81436],{"class":103},"const found = array1.find((element) => element > 10)\n",[97,81438,81439],{"class":99,"line":241},[97,81440,81441],{"class":103},"console.log(found)  \u002F\u002F12\n",[24,81443,81444,81446,81447,81452,81453,81456,81457,81459,81460,81465,81466,81468,81469,81471,81472,81474,81475],{},[94,81445,81411],{}," 方法是一个",[558,81448,81451],{"href":81449,"rel":81450},"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",[24054],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[94,81454,81455],{},"callbackFn"," 函数，直到 ",[94,81458,81455],{}," 返回一个",[558,81461,81464],{"href":81462,"rel":81463},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24054],"真值","。然后 ",[94,81467,81411],{}," 返回该元素并停止迭代数组。如果 ",[94,81470,81455],{}," 从未返回真值，则 ",[94,81473,81411],{}," 返回 ",[94,81476,81477],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[87,81479,81481],{"className":53251,"code":81480,"language":53253,"meta":92,"style":92},"\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",[94,81482,81483,81491,81499,81504,81509,81514,81518,81523,81528,81532,81537,81542,81546,81550,81555,81560,81564,81568,81573,81578,81583,81588,81593,81597,81602,81607,81612,81617,81621,81626,81634],{"__ignoreMap":92},[97,81484,81485,81487,81489],{"class":99,"line":100},[97,81486,104],{"class":103},[97,81488,51984],{"class":107},[97,81490,130],{"class":103},[97,81492,81493,81495,81497],{"class":99,"line":195},[97,81494,52328],{"class":103},[97,81496,51997],{"class":107},[97,81498,130],{"class":103},[97,81500,81501],{"class":99,"line":241},[97,81502,81503],{"class":103},"    const arr = ['red', 'blue', 'green']\n",[97,81505,81506],{"class":99,"line":1387},[97,81507,81508],{"class":103},"    const found = arr.find(item => item === 'pink')\n",[97,81510,81511],{"class":99,"line":1393},[97,81512,81513],{"class":103},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[97,81515,81516],{"class":99,"line":1407},[97,81517,2591],{"emptyLinePlaceholder":249},[97,81519,81520],{"class":99,"line":1413},[97,81521,81522],{"class":103},"    \u002F\u002F 使用场景，用于查找数据\n",[97,81524,81525],{"class":99,"line":1504},[97,81526,81527],{"class":103},"    const arr1 = [\n",[97,81529,81530],{"class":99,"line":1510},[97,81531,79570],{"class":103},[97,81533,81534],{"class":99,"line":1522},[97,81535,81536],{"class":103},"        name: '小米',\n",[97,81538,81539],{"class":99,"line":1804},[97,81540,81541],{"class":103},"        price: 1999\n",[97,81543,81544],{"class":99,"line":1809},[97,81545,78076],{"class":103},[97,81547,81548],{"class":99,"line":1815},[97,81549,79570],{"class":103},[97,81551,81552],{"class":99,"line":1820},[97,81553,81554],{"class":103},"        name: '华为',\n",[97,81556,81557],{"class":99,"line":1834},[97,81558,81559],{"class":103},"        price: 3999\n",[97,81561,81562],{"class":99,"line":1839},[97,81563,52582],{"class":103},[97,81565,81566],{"class":99,"line":1845},[97,81567,53293],{"class":103},[97,81569,81570],{"class":99,"line":1866},[97,81571,81572],{"class":103},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[97,81574,81575],{"class":99,"line":1871},[97,81576,81577],{"class":103},"    \u002F\u002F const found1 = arr1.find(item => {\n",[97,81579,81580],{"class":99,"line":1885},[97,81581,81582],{"class":103},"    \u002F\u002F   if (item.name === '小米') {\n",[97,81584,81585],{"class":99,"line":1890},[97,81586,81587],{"class":103},"    \u002F\u002F     return item\n",[97,81589,81590],{"class":99,"line":1919},[97,81591,81592],{"class":103},"    \u002F\u002F   }\n",[97,81594,81595],{"class":99,"line":1924},[97,81596,63474],{"class":103},[97,81598,81599],{"class":99,"line":1941},[97,81600,81601],{"class":103},"    \u002F\u002F 另一种写法\n",[97,81603,81604],{"class":99,"line":1946},[97,81605,81606],{"class":103},"    const found1 = arr1.find(item => {\n",[97,81608,81609],{"class":99,"line":1951},[97,81610,81611],{"class":103},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[97,81613,81614],{"class":99,"line":1956},[97,81615,81616],{"class":103},"      return item.name = '小米'\n",[97,81618,81619],{"class":99,"line":1970},[97,81620,33651],{"class":103},[97,81622,81623],{"class":99,"line":1975},[97,81624,81625],{"class":103},"    console.log(found1)\n",[97,81627,81628,81630,81632],{"class":99,"line":2768},[97,81629,52601],{"class":103},[97,81631,51997],{"class":107},[97,81633,130],{"class":103},[97,81635,81636,81638,81640],{"class":99,"line":2782},[97,81637,51969],{"class":103},[97,81639,51984],{"class":107},[97,81641,130],{"class":103},[24,81643,81644],{},[19,81645],{"alt":92,"src":81646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[24,81648,81649],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[138,81651,81652],{"start":195},[70,81653,81654],{},"every()返回的是布尔值",[24,81656,81657],{},[558,81658,81661],{"href":81659,"rel":81660},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24054],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[24,81663,81664],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[24,81666,81667],{},"some是只有有一个就没问题",[24,81669,81670],{},"every是必须全是才行",[87,81672,81676],{"className":81673,"code":81674,"language":81675,"meta":92,"style":92},"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",[94,81677,81678,81694,81708,81712,81721],{"__ignoreMap":92},[97,81679,81680,81682,81685,81687,81689,81692],{"class":99,"line":100},[97,81681,54633],{"class":319},[97,81683,81684],{"class":103}," isBigEnough(element, ",[97,81686,74242],{"class":319},[97,81688,12626],{"class":103},[97,81690,81691],{"class":319},"array",[97,81693,12633],{"class":103},[97,81695,81696,81699,81702,81704,81706],{"class":99,"line":195},[97,81697,81698],{"class":319},"  return",[97,81700,81701],{"class":103}," element ",[97,81703,1902],{"class":319},[97,81705,2229],{"class":370},[97,81707,1483],{"class":103},[97,81709,81710],{"class":99,"line":241},[97,81711,1757],{"class":103},[97,81713,81714,81717,81719],{"class":99,"line":1387},[97,81715,81716],{"class":103},"[12, 5, 8, 130, 44].every(isBigEnough); ",[97,81718,33519],{"class":319},[97,81720,54700],{"class":103},[97,81722,81723,81726,81728],{"class":99,"line":1393},[97,81724,81725],{"class":103},"[12, 54, 18, 130, 44].every(isBigEnough); ",[97,81727,33519],{"class":319},[97,81729,58124],{"class":103},[87,81731,81733],{"className":53251,"code":81732,"language":53253,"meta":92,"style":92},"\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",[94,81734,81735,81743,81751,81756,81760,81765,81770,81778],{"__ignoreMap":92},[97,81736,81737,81739,81741],{"class":99,"line":100},[97,81738,104],{"class":103},[97,81740,51984],{"class":107},[97,81742,130],{"class":103},[97,81744,81745,81747,81749],{"class":99,"line":195},[97,81746,52328],{"class":103},[97,81748,51997],{"class":107},[97,81750,130],{"class":103},[97,81752,81753],{"class":99,"line":241},[97,81754,81755],{"class":103},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[97,81757,81758],{"class":99,"line":1387},[97,81759,78506],{"class":103},[97,81761,81762],{"class":99,"line":1393},[97,81763,81764],{"class":103},"    const flag = arr.every(item => item >= 10)\n",[97,81766,81767],{"class":99,"line":1407},[97,81768,81769],{"class":103},"    console.log(flag)    \u002F\u002Ftrue\n",[97,81771,81772,81774,81776],{"class":99,"line":1413},[97,81773,52601],{"class":103},[97,81775,51997],{"class":107},[97,81777,130],{"class":103},[97,81779,81780,81782,81784],{"class":99,"line":1504},[97,81781,51969],{"class":103},[97,81783,51984],{"class":107},[97,81785,130],{"class":103},[87,81787,81789],{"className":53251,"code":81788,"language":53253,"meta":92,"style":92},"\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",[94,81790,81791,81799,81807,81811,81816,81821,81826,81834],{"__ignoreMap":92},[97,81792,81793,81795,81797],{"class":99,"line":100},[97,81794,104],{"class":103},[97,81796,51984],{"class":107},[97,81798,130],{"class":103},[97,81800,81801,81803,81805],{"class":99,"line":195},[97,81802,52328],{"class":103},[97,81804,51997],{"class":107},[97,81806,130],{"class":103},[97,81808,81809],{"class":99,"line":241},[97,81810,81755],{"class":103},[97,81812,81813],{"class":99,"line":1387},[97,81814,81815],{"class":103},"    const arr = [10, 0, 5]\n",[97,81817,81818],{"class":99,"line":1393},[97,81819,81820],{"class":103},"    const flag = arr.some(item => item >= 10)\n",[97,81822,81823],{"class":99,"line":1407},[97,81824,81825],{"class":103},"    console.log(flag)   \u002F\u002Ftrue\n",[97,81827,81828,81830,81832],{"class":99,"line":1413},[97,81829,52601],{"class":103},[97,81831,51997],{"class":107},[97,81833,130],{"class":103},[97,81835,81836,81838,81840],{"class":99,"line":1504},[97,81837,51969],{"class":103},[97,81839,51984],{"class":107},[97,81841,130],{"class":103},[23099,81843,81845],{"id":81844},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[24,81847,81848],{},[19,81849],{"alt":92,"src":81850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[87,81852,81854],{"className":50823,"code":81853,"language":50825,"meta":92,"style":92},"\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",[94,81855,81856,81866,81880,81884,81892,81906,81926,81938,81946,81953,81965,81977,81989,82001,82011,82021,82025,82033,82041,82045,82053,82065,82073,82095,82100,82105,82138,82146,82154,82158],{"__ignoreMap":92},[97,81857,81858,81860,81862,81864],{"class":99,"line":100},[97,81859,51487],{"class":103},[97,81861,51490],{"class":107},[97,81863,51493],{"class":111},[97,81865,130],{"class":103},[97,81867,81868,81870,81872,81874,81876,81878],{"class":99,"line":195},[97,81869,104],{"class":103},[97,81871,50825],{"class":107},[97,81873,51504],{"class":111},[97,81875,115],{"class":103},[97,81877,51509],{"class":118},[97,81879,130],{"class":103},[97,81881,81882],{"class":99,"line":241},[97,81883,2591],{"emptyLinePlaceholder":249},[97,81885,81886,81888,81890],{"class":99,"line":1387},[97,81887,104],{"class":103},[97,81889,51522],{"class":107},[97,81891,130],{"class":103},[97,81893,81894,81896,81898,81900,81902,81904],{"class":99,"line":1393},[97,81895,52328],{"class":103},[97,81897,108],{"class":107},[97,81899,51534],{"class":111},[97,81901,115],{"class":103},[97,81903,51539],{"class":118},[97,81905,130],{"class":103},[97,81907,81908,81910,81912,81914,81916,81918,81920,81922,81924],{"class":99,"line":1407},[97,81909,52328],{"class":103},[97,81911,108],{"class":107},[97,81913,112],{"class":111},[97,81915,115],{"class":103},[97,81917,119],{"class":118},[97,81919,122],{"class":111},[97,81921,115],{"class":103},[97,81923,127],{"class":118},[97,81925,130],{"class":103},[97,81927,81928,81930,81932,81934,81936],{"class":99,"line":1413},[97,81929,52328],{"class":103},[97,81931,51591],{"class":107},[97,81933,51594],{"class":103},[97,81935,51591],{"class":107},[97,81937,130],{"class":103},[97,81939,81940,81942,81944],{"class":99,"line":1504},[97,81941,52328],{"class":103},[97,81943,231],{"class":107},[97,81945,130],{"class":103},[97,81947,81948,81951],{"class":99,"line":1510},[97,81949,81950],{"class":107},"    div",[97,81952,15762],{"class":103},[97,81954,81955,81957,81959,81961,81963],{"class":99,"line":1522},[97,81956,54955],{"class":370},[97,81958,51621],{"class":103},[97,81960,1914],{"class":370},[97,81962,51676],{"class":319},[97,81964,1483],{"class":103},[97,81966,81967,81969,81971,81973,81975],{"class":99,"line":1804},[97,81968,54969],{"class":370},[97,81970,51621],{"class":103},[97,81972,721],{"class":370},[97,81974,51676],{"class":319},[97,81976,1483],{"class":103},[97,81978,81979,81981,81983,81985,81987],{"class":99,"line":1809},[97,81980,57543],{"class":370},[97,81982,51621],{"class":103},[97,81984,721],{"class":370},[97,81986,51676],{"class":319},[97,81988,1483],{"class":103},[97,81990,81991,81993,81995,81997,81999],{"class":99,"line":1815},[97,81992,65317],{"class":370},[97,81994,51621],{"class":103},[97,81996,818],{"class":370},[97,81998,51676],{"class":319},[97,82000,1483],{"class":103},[97,82002,82003,82005,82007,82009],{"class":99,"line":1820},[97,82004,57470],{"class":370},[97,82006,51621],{"class":103},[97,82008,51776],{"class":370},[97,82010,1483],{"class":103},[97,82012,82013,82015,82017,82019],{"class":99,"line":1834},[97,82014,55068],{"class":370},[97,82016,51621],{"class":103},[97,82018,51829],{"class":370},[97,82020,1483],{"class":103},[97,82022,82023],{"class":99,"line":1839},[97,82024,2378],{"class":103},[97,82026,82027,82029,82031],{"class":99,"line":1845},[97,82028,52601],{"class":103},[97,82030,231],{"class":107},[97,82032,130],{"class":103},[97,82034,82035,82037,82039],{"class":99,"line":1866},[97,82036,51969],{"class":103},[97,82038,51522],{"class":107},[97,82040,130],{"class":103},[97,82042,82043],{"class":99,"line":1871},[97,82044,2591],{"emptyLinePlaceholder":249},[97,82046,82047,82049,82051],{"class":99,"line":1885},[97,82048,104],{"class":103},[97,82050,51984],{"class":107},[97,82052,130],{"class":103},[97,82054,82055,82057,82059,82061,82063],{"class":99,"line":1890},[97,82056,52328],{"class":103},[97,82058,51795],{"class":107},[97,82060,55498],{"class":103},[97,82062,51795],{"class":107},[97,82064,130],{"class":103},[97,82066,82067,82069,82071],{"class":99,"line":1919},[97,82068,52328],{"class":103},[97,82070,51997],{"class":107},[97,82072,130],{"class":103},[97,82074,82075,82077,82080,82082,82085,82088,82090,82093],{"class":99,"line":1924},[97,82076,11412],{"class":319},[97,82078,82079],{"class":370}," spec",[97,82081,13755],{"class":319},[97,82083,82084],{"class":103}," { size: ",[97,82086,82087],{"class":118},"'40cm*40cm'",[97,82089,55648],{"class":103},[97,82091,82092],{"class":118},"'黑色'",[97,82094,55788],{"class":103},[97,82096,82097],{"class":99,"line":1941},[97,82098,82099],{"class":191},"    \u002F\u002F const arr = Object.values(spec)\n",[97,82101,82102],{"class":99,"line":1946},[97,82103,82104],{"class":191},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[97,82106,82107,82109,82111,82113,82116,82118,82120,82123,82126,82129,82131,82133,82136],{"class":99,"line":1951},[97,82108,52591],{"class":103},[97,82110,54583],{"class":111},[97,82112,323],{"class":103},[97,82114,82115],{"class":118},"'div'",[97,82117,74433],{"class":103},[97,82119,115],{"class":319},[97,82121,82122],{"class":103}," Object.",[97,82124,82125],{"class":111},"values",[97,82127,82128],{"class":103},"(spec).",[97,82130,74407],{"class":111},[97,82132,323],{"class":103},[97,82134,82135],{"class":118},"'\u002F'",[97,82137,329],{"class":103},[97,82139,82140,82142,82144],{"class":99,"line":1956},[97,82141,52601],{"class":103},[97,82143,51997],{"class":107},[97,82145,130],{"class":103},[97,82147,82148,82150,82152],{"class":99,"line":1970},[97,82149,51969],{"class":103},[97,82151,51984],{"class":107},[97,82153,130],{"class":103},[97,82155,82156],{"class":99,"line":1975},[97,82157,2591],{"emptyLinePlaceholder":249},[97,82159,82160,82162,82164],{"class":99,"line":2768},[97,82161,51969],{"class":103},[97,82163,50825],{"class":107},[97,82165,130],{"class":103},[24,82167,82168],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23099,82170,82172],{"id":82171},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[24,82174,82175],{},"静态方法，将伪数组转换为真数组",[24,82177,82178],{},[19,82179],{"alt":92,"src":82180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[87,82182,82184],{"className":53251,"code":82183,"language":53253,"meta":92,"style":92},"\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",[94,82185,82186,82194,82202,82214,82226,82238,82246,82254,82259,82264,82269,82274,82282],{"__ignoreMap":92},[97,82187,82188,82190,82192],{"class":99,"line":100},[97,82189,104],{"class":103},[97,82191,51984],{"class":107},[97,82193,130],{"class":103},[97,82195,82196,82198,82200],{"class":99,"line":195},[97,82197,52328],{"class":103},[97,82199,67],{"class":107},[97,82201,130],{"class":103},[97,82203,82204,82206,82208,82210,82212],{"class":99,"line":241},[97,82205,51529],{"class":103},[97,82207,70],{"class":107},[97,82209,55498],{"class":103},[97,82211,70],{"class":107},[97,82213,130],{"class":103},[97,82215,82216,82218,82220,82222,82224],{"class":99,"line":1387},[97,82217,51529],{"class":103},[97,82219,70],{"class":107},[97,82221,55498],{"class":103},[97,82223,70],{"class":107},[97,82225,130],{"class":103},[97,82227,82228,82230,82232,82234,82236],{"class":99,"line":1393},[97,82229,51529],{"class":103},[97,82231,70],{"class":107},[97,82233,55498],{"class":103},[97,82235,70],{"class":107},[97,82237,130],{"class":103},[97,82239,82240,82242,82244],{"class":99,"line":1407},[97,82241,52601],{"class":103},[97,82243,67],{"class":107},[97,82245,130],{"class":103},[97,82247,82248,82250,82252],{"class":99,"line":1413},[97,82249,52328],{"class":103},[97,82251,51997],{"class":107},[97,82253,130],{"class":103},[97,82255,82256],{"class":99,"line":1504},[97,82257,82258],{"class":103},"    const lis = document.querySelectorAll('li')\n",[97,82260,82261],{"class":99,"line":1510},[97,82262,82263],{"class":103},"    const liss = Array.from(lis)\n",[97,82265,82266],{"class":99,"line":1522},[97,82267,82268],{"class":103},"    liss.pop()\n",[97,82270,82271],{"class":99,"line":1804},[97,82272,82273],{"class":103},"    console.log(liss)\n",[97,82275,82276,82278,82280],{"class":99,"line":1809},[97,82277,52601],{"class":103},[97,82279,51997],{"class":107},[97,82281,130],{"class":103},[97,82283,82284,82286,82288],{"class":99,"line":1815},[97,82285,51969],{"class":103},[97,82287,51984],{"class":107},[97,82289,130],{"class":103},[24,82291,82292],{},[19,82293],{"alt":92,"src":82294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[160,82296,82298],{"id":82297},"_41053-string","4.10.5.3 String",[24,82300,82301],{},[19,82302],{"alt":92,"src":82303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23099,82305,82307],{"id":82306},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[87,82309,82311],{"className":53251,"code":82310,"language":53253,"meta":92,"style":92},"\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",[94,82312,82313,82321,82329,82334,82339,82344,82348,82353,82358,82363,82371],{"__ignoreMap":92},[97,82314,82315,82317,82319],{"class":99,"line":100},[97,82316,104],{"class":103},[97,82318,51984],{"class":107},[97,82320,130],{"class":103},[97,82322,82323,82325,82327],{"class":99,"line":195},[97,82324,52328],{"class":103},[97,82326,51997],{"class":107},[97,82328,130],{"class":103},[97,82330,82331],{"class":99,"line":241},[97,82332,82333],{"class":103},"    \u002F\u002F 把字符串转化为数组\n",[97,82335,82336],{"class":99,"line":1387},[97,82337,82338],{"class":103},"    const str = 'pink,red'\n",[97,82340,82341],{"class":99,"line":1393},[97,82342,82343],{"class":103},"    const arr = str.split(',')\n",[97,82345,82346],{"class":99,"line":1407},[97,82347,80822],{"class":103},[97,82349,82350],{"class":99,"line":1413},[97,82351,82352],{"class":103},"    const str1 = '2025-8-25'\n",[97,82354,82355],{"class":99,"line":1504},[97,82356,82357],{"class":103},"    const arr1 = str1.split('-')\n",[97,82359,82360],{"class":99,"line":1510},[97,82361,82362],{"class":103},"    console.log(arr1)\n",[97,82364,82365,82367,82369],{"class":99,"line":1522},[97,82366,52601],{"class":103},[97,82368,51997],{"class":107},[97,82370,130],{"class":103},[97,82372,82373,82375,82377],{"class":99,"line":1804},[97,82374,51969],{"class":103},[97,82376,51984],{"class":107},[97,82378,130],{"class":103},[23099,82380,82382],{"id":82381},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[24,82384,5372],{},[24,82386,82387],{},"substring(indexStart)",[24,82389,82390],{},"substring(indexStart, indexEnd)",[67,82392,82393,82404,82416,82426],{},[70,82394,82395,82396,82399,82400,82403],{},"如果省略了 ",[94,82397,82398],{},"indexEnd","，则 ",[94,82401,82402],{},"substring()"," 提取字符直到字符串的末尾",[70,82405,82406,82407,82410,82411,82399,82413,82415],{},"如果 ",[94,82408,82409],{},"indexStart"," 等于 ",[94,82412,82398],{},[94,82414,82402],{}," 返回一个空字符串",[70,82417,82406,82418,82420,82421,82399,82423,82425],{},[94,82419,82409],{}," 大于 ",[94,82422,82398],{},[94,82424,82402],{}," 的效果就像交换了这两个参数一样",[70,82427,82428],{},"结束的索引号不包含想要截取的部分",[87,82430,82432],{"className":81673,"code":82431,"language":81675,"meta":92,"style":92},"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",[94,82433,82434,82446,82450,82484,82514,82518,82549,82553,82580,82610,82640,82644,82675],{"__ignoreMap":92},[97,82435,82436,82439,82441,82444],{"class":99,"line":100},[97,82437,82438],{"class":103},"const anyString ",[97,82440,115],{"class":319},[97,82442,82443],{"class":118}," \"Mozilla\"",[97,82445,1483],{"class":103},[97,82447,82448],{"class":99,"line":195},[97,82449,2591],{"emptyLinePlaceholder":249},[97,82451,82452,82455,82457,82459,82461,82464,82466,82469,82471,82473,82475,82477,82479,82481],{"class":99,"line":241},[97,82453,82454],{"class":370},"console",[97,82456,878],{"class":103},[97,82458,58431],{"class":370},[97,82460,323],{"class":103},[97,82462,82463],{"class":370},"anyString",[97,82465,878],{"class":103},[97,82467,82468],{"class":370},"substring",[97,82470,323],{"class":103},[97,82472,511],{"class":370},[97,82474,12626],{"class":103},[97,82476,537],{"class":370},[97,82478,75437],{"class":103},[97,82480,33519],{"class":319},[97,82482,82483],{"class":118}," 'M'\n",[97,82485,82486,82488,82490,82492,82494,82496,82498,82500,82502,82504,82506,82508,82510,82512],{"class":99,"line":1387},[97,82487,82454],{"class":370},[97,82489,878],{"class":103},[97,82491,58431],{"class":370},[97,82493,323],{"class":103},[97,82495,82463],{"class":370},[97,82497,878],{"class":103},[97,82499,82468],{"class":370},[97,82501,323],{"class":103},[97,82503,537],{"class":370},[97,82505,12626],{"class":103},[97,82507,511],{"class":370},[97,82509,75437],{"class":103},[97,82511,33519],{"class":319},[97,82513,82483],{"class":118},[97,82515,82516],{"class":99,"line":1393},[97,82517,2591],{"emptyLinePlaceholder":249},[97,82519,82520,82522,82524,82526,82528,82530,82532,82534,82536,82538,82540,82542,82544,82546],{"class":99,"line":1407},[97,82521,82454],{"class":370},[97,82523,878],{"class":103},[97,82525,58431],{"class":370},[97,82527,323],{"class":103},[97,82529,82463],{"class":370},[97,82531,878],{"class":103},[97,82533,82468],{"class":370},[97,82535,323],{"class":103},[97,82537,511],{"class":370},[97,82539,12626],{"class":103},[97,82541,664],{"class":370},[97,82543,75437],{"class":103},[97,82545,33519],{"class":319},[97,82547,82548],{"class":118}," 'Mozill'\n",[97,82550,82551],{"class":99,"line":1413},[97,82552,2591],{"emptyLinePlaceholder":249},[97,82554,82555,82557,82559,82561,82563,82565,82567,82569,82571,82573,82575,82577],{"class":99,"line":1504},[97,82556,82454],{"class":370},[97,82558,878],{"class":103},[97,82560,58431],{"class":370},[97,82562,323],{"class":103},[97,82564,82463],{"class":370},[97,82566,878],{"class":103},[97,82568,82468],{"class":370},[97,82570,323],{"class":103},[97,82572,613],{"class":370},[97,82574,75437],{"class":103},[97,82576,33519],{"class":319},[97,82578,82579],{"class":118}," 'lla'\n",[97,82581,82582,82584,82586,82588,82590,82592,82594,82596,82598,82600,82602,82604,82606,82608],{"class":99,"line":1510},[97,82583,82454],{"class":370},[97,82585,878],{"class":103},[97,82587,58431],{"class":370},[97,82589,323],{"class":103},[97,82591,82463],{"class":370},[97,82593,878],{"class":103},[97,82595,82468],{"class":370},[97,82597,323],{"class":103},[97,82599,613],{"class":370},[97,82601,12626],{"class":103},[97,82603,689],{"class":370},[97,82605,75493],{"class":103},[97,82607,33519],{"class":319},[97,82609,82579],{"class":118},[97,82611,82612,82614,82616,82618,82620,82622,82624,82626,82628,82630,82632,82634,82636,82638],{"class":99,"line":1522},[97,82613,82454],{"class":370},[97,82615,878],{"class":103},[97,82617,58431],{"class":370},[97,82619,323],{"class":103},[97,82621,82463],{"class":370},[97,82623,878],{"class":103},[97,82625,82468],{"class":370},[97,82627,323],{"class":103},[97,82629,689],{"class":370},[97,82631,12626],{"class":103},[97,82633,613],{"class":370},[97,82635,75437],{"class":103},[97,82637,33519],{"class":319},[97,82639,82579],{"class":118},[97,82641,82642],{"class":99,"line":1804},[97,82643,2591],{"emptyLinePlaceholder":249},[97,82645,82646,82648,82650,82652,82654,82656,82658,82660,82662,82664,82666,82668,82670,82672],{"class":99,"line":1809},[97,82647,82454],{"class":370},[97,82649,878],{"class":103},[97,82651,58431],{"class":370},[97,82653,323],{"class":103},[97,82655,82463],{"class":370},[97,82657,878],{"class":103},[97,82659,82468],{"class":370},[97,82661,323],{"class":103},[97,82663,511],{"class":370},[97,82665,12626],{"class":103},[97,82667,689],{"class":370},[97,82669,75437],{"class":103},[97,82671,33519],{"class":319},[97,82673,82674],{"class":118}," 'Mozilla'\n",[97,82676,82677,82679,82681,82683,82685,82687,82689,82691,82693,82695,82697,82699,82701,82703],{"class":99,"line":1815},[97,82678,82454],{"class":370},[97,82680,878],{"class":103},[97,82682,58431],{"class":370},[97,82684,323],{"class":103},[97,82686,82463],{"class":370},[97,82688,878],{"class":103},[97,82690,82468],{"class":370},[97,82692,323],{"class":103},[97,82694,511],{"class":370},[97,82696,12626],{"class":103},[97,82698,766],{"class":370},[97,82700,75437],{"class":103},[97,82702,33519],{"class":319},[97,82704,82674],{"class":118},[23099,82706,82708],{"id":82707},"_410533-startswith","4.10.5.3.3 startsWith",[24,82710,82711,82714,82715,82720,82721,82723,82724],{},[94,82712,82713],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[469,82716,82717],{},[94,82718,82719],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[94,82722,1555],{}," 或 ",[94,82725,66204],{},[87,82727,82729],{"className":77679,"code":82728,"language":77681,"meta":92,"style":92},"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",[94,82730,82731,82743,82762,82767,82787],{"__ignoreMap":92},[97,82732,82733,82735,82738,82740],{"class":99,"line":100},[97,82734,6983],{"class":319},[97,82736,82737],{"class":103}," str1 ",[97,82739,115],{"class":319},[97,82741,82742],{"class":118}," \"Saturday night plans\"\n",[97,82744,82745,82747,82749,82752,82755,82757,82760],{"class":99,"line":195},[97,82746,77716],{"class":103},[97,82748,58431],{"class":111},[97,82750,82751],{"class":103},"(str1.",[97,82753,82754],{"class":111},"startsWith",[97,82756,323],{"class":103},[97,82758,82759],{"class":118},"\"Sat\"",[97,82761,30687],{"class":103},[97,82763,82764],{"class":99,"line":241},[97,82765,82766],{"class":191},"\u002F\u002F Expected output: true\n",[97,82768,82769,82771,82773,82775,82777,82779,82781,82783,82785],{"class":99,"line":1387},[97,82770,77716],{"class":103},[97,82772,58431],{"class":111},[97,82774,82751],{"class":103},[97,82776,82754],{"class":111},[97,82778,323],{"class":103},[97,82780,82759],{"class":118},[97,82782,12626],{"class":103},[97,82784,392],{"class":370},[97,82786,30687],{"class":103},[97,82788,82789],{"class":99,"line":1393},[97,82790,82791],{"class":191},"\u002F\u002F Expected output: false\n",[87,82793,82795],{"className":50823,"code":82794,"language":50825,"meta":92,"style":92},"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",[94,82796,82797,82802,82807,82811,82816,82821],{"__ignoreMap":92},[97,82798,82799],{"class":99,"line":100},[97,82800,82801],{"class":103},"startsWith(searchString)\n",[97,82803,82804],{"class":99,"line":195},[97,82805,82806],{"class":103},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[97,82808,82809],{"class":99,"line":241},[97,82810,2591],{"emptyLinePlaceholder":249},[97,82812,82813],{"class":99,"line":1387},[97,82814,82815],{"class":103},"const str3 = 'pink老师上课中'\n",[97,82817,82818],{"class":99,"line":1393},[97,82819,82820],{"class":103},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[97,82822,82823],{"class":99,"line":1407},[97,82824,82825],{"class":103},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23099,82827,82829],{"id":82828},"_410534-includes","4.10.5.3.4 includes",[24,82831,82832],{},"includes(searchString) includes(searchString, position)",[138,82834,82835],{},[70,82836,82837],{},"searchString:",[24,82839,82840,82841,82843,82844,82849,82850,82855,82856,21690,82859,82862,82863,82866],{},"一个要在 ",[94,82842,1492],{}," 中查找的字符串。",[558,82845,82848],{"href":82846,"rel":82847},"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",[24054],"不能是正则表达式","。所有非正则表达式的值都会被",[558,82851,82854],{"href":82852,"rel":82853},"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",[24054],"强制转换为字符串","，因此如果该参数被省略或传入 ",[94,82857,82858],{},"undefined",[94,82860,82861],{},"includes()"," 方法会在字符串中搜索 ",[94,82864,82865],{},"\"undefined\"","，这通常不是你想要的",[138,82868,82869],{"start":195},[70,82870,82871,1179],{},[94,82872,82873],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[24,82875,82876,82877,82880,82881],{},"在字符串中开始搜索 ",[94,82878,82879],{},"searchString"," 的位置。默认值为 ",[94,82882,511],{},[138,82884,82885],{"start":241},[70,82886,82887],{},"返回值：",[24,82889,82890,82891,82893,82894,82898,82899],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[94,82892,82879],{}," 为空字符串的情况），则返回 ",[469,82895,82896],{},[94,82897,1555],{}," ，否则返回 ",[469,82900,82901],{},[94,82902,66204],{},[138,82904,82905],{"start":1387},[70,82906,82907],{},"异常：",[24,82909,82406,82910,13986,82912,82916],{},[94,82911,82879],{},[558,82913,82915],{"href":82846,"rel":82914},[24054],"是一个正则表达式","，则会抛出",[24,82918,82919],{},"只要是有就是true，不需要非得以谁开头结尾",[87,82921,82923],{"className":77679,"code":82922,"language":77681,"meta":92,"style":92},"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",[94,82924,82925,82936,82959,82978,82998,83020,83039],{"__ignoreMap":92},[97,82926,82927,82929,82931,82933],{"class":99,"line":100},[97,82928,6983],{"class":319},[97,82930,79959],{"class":103},[97,82932,115],{"class":319},[97,82934,82935],{"class":118}," \"To be, or not to be, that is the question.\"\n",[97,82937,82938,82940,82942,82945,82948,82950,82953,82956],{"class":99,"line":195},[97,82939,77716],{"class":103},[97,82941,58431],{"class":111},[97,82943,82944],{"class":103},"(str.",[97,82946,82947],{"class":111},"includes",[97,82949,323],{"class":103},[97,82951,82952],{"class":118},"\"To be\"",[97,82954,82955],{"class":103},"))",[97,82957,82958],{"class":191},"  \u002F\u002F true\n",[97,82960,82961,82963,82965,82967,82969,82971,82974,82976],{"class":99,"line":241},[97,82962,77716],{"class":103},[97,82964,58431],{"class":111},[97,82966,82944],{"class":103},[97,82968,82947],{"class":111},[97,82970,323],{"class":103},[97,82972,82973],{"class":118},"\"question\"",[97,82975,82955],{"class":103},[97,82977,82958],{"class":191},[97,82979,82980,82982,82984,82986,82988,82990,82993,82995],{"class":99,"line":1387},[97,82981,77716],{"class":103},[97,82983,58431],{"class":111},[97,82985,82944],{"class":103},[97,82987,82947],{"class":111},[97,82989,323],{"class":103},[97,82991,82992],{"class":118},"\"nonexistent\"",[97,82994,82955],{"class":103},[97,82996,82997],{"class":191},"  \u002F\u002F false\n",[97,82999,83000,83002,83004,83006,83008,83010,83012,83014,83016,83018],{"class":99,"line":1393},[97,83001,77716],{"class":103},[97,83003,58431],{"class":111},[97,83005,82944],{"class":103},[97,83007,82947],{"class":111},[97,83009,323],{"class":103},[97,83011,82952],{"class":118},[97,83013,12626],{"class":103},[97,83015,537],{"class":370},[97,83017,82955],{"class":103},[97,83019,82997],{"class":191},[97,83021,83022,83024,83026,83028,83030,83032,83035,83037],{"class":99,"line":1407},[97,83023,77716],{"class":103},[97,83025,58431],{"class":111},[97,83027,82944],{"class":103},[97,83029,82947],{"class":111},[97,83031,323],{"class":103},[97,83033,83034],{"class":118},"\"TO BE\"",[97,83036,82955],{"class":103},[97,83038,82997],{"class":191},[97,83040,83041,83043,83045,83047,83049,83051,83053,83055],{"class":99,"line":1413},[97,83042,77716],{"class":103},[97,83044,58431],{"class":111},[97,83046,82944],{"class":103},[97,83048,82947],{"class":111},[97,83050,323],{"class":103},[97,83052,7843],{"class":118},[97,83054,82955],{"class":103},[97,83056,82958],{"class":191},[23099,83058,83060],{"id":83059},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[87,83062,83064],{"className":53251,"code":83063,"language":53253,"meta":92,"style":92},"\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",[94,83065,83066,83074,83082,83087,83092,83097,83102,83107,83115],{"__ignoreMap":92},[97,83067,83068,83070,83072],{"class":99,"line":100},[97,83069,104],{"class":103},[97,83071,51984],{"class":107},[97,83073,130],{"class":103},[97,83075,83076,83078,83080],{"class":99,"line":195},[97,83077,52328],{"class":103},[97,83079,51997],{"class":107},[97,83081,130],{"class":103},[97,83083,83084],{"class":99,"line":241},[97,83085,83086],{"class":103},"    const num = 10\n",[97,83088,83089],{"class":99,"line":1387},[97,83090,83091],{"class":103},"    \u002F\u002F 强制转换\n",[97,83093,83094],{"class":99,"line":1393},[97,83095,83096],{"class":103},"    console.log(String(num))\n",[97,83098,83099],{"class":99,"line":1407},[97,83100,83101],{"class":103},"    \u002F\u002F toString()方法转换\n",[97,83103,83104],{"class":99,"line":1413},[97,83105,83106],{"class":103},"    console.log(num.toString())\n",[97,83108,83109,83111,83113],{"class":99,"line":1504},[97,83110,52601],{"class":103},[97,83112,51997],{"class":107},[97,83114,130],{"class":103},[97,83116,83117,83119,83121],{"class":99,"line":1510},[97,83118,51969],{"class":103},[97,83120,51984],{"class":107},[97,83122,130],{"class":103},[23099,83124,83126],{"id":83125},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[24,83128,83129],{},[19,83130],{"alt":92,"src":83131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[87,83133,83135],{"className":50823,"code":83134,"language":50825,"meta":92,"style":92},"\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",[94,83136,83137,83147,83161,83165,83173,83187,83207,83219,83227,83231,83239,83251,83259,83271,83276,83281,83286,83333,83349,83357,83365,83369],{"__ignoreMap":92},[97,83138,83139,83141,83143,83145],{"class":99,"line":100},[97,83140,51487],{"class":103},[97,83142,51490],{"class":107},[97,83144,51493],{"class":111},[97,83146,130],{"class":103},[97,83148,83149,83151,83153,83155,83157,83159],{"class":99,"line":195},[97,83150,104],{"class":103},[97,83152,50825],{"class":107},[97,83154,51504],{"class":111},[97,83156,115],{"class":103},[97,83158,51509],{"class":118},[97,83160,130],{"class":103},[97,83162,83163],{"class":99,"line":241},[97,83164,2591],{"emptyLinePlaceholder":249},[97,83166,83167,83169,83171],{"class":99,"line":1387},[97,83168,104],{"class":103},[97,83170,51522],{"class":107},[97,83172,130],{"class":103},[97,83174,83175,83177,83179,83181,83183,83185],{"class":99,"line":1393},[97,83176,52328],{"class":103},[97,83178,108],{"class":107},[97,83180,51534],{"class":111},[97,83182,115],{"class":103},[97,83184,51539],{"class":118},[97,83186,130],{"class":103},[97,83188,83189,83191,83193,83195,83197,83199,83201,83203,83205],{"class":99,"line":1407},[97,83190,52328],{"class":103},[97,83192,108],{"class":107},[97,83194,112],{"class":111},[97,83196,115],{"class":103},[97,83198,119],{"class":118},[97,83200,122],{"class":111},[97,83202,115],{"class":103},[97,83204,127],{"class":118},[97,83206,130],{"class":103},[97,83208,83209,83211,83213,83215,83217],{"class":99,"line":1413},[97,83210,52328],{"class":103},[97,83212,51591],{"class":107},[97,83214,51594],{"class":103},[97,83216,51591],{"class":107},[97,83218,130],{"class":103},[97,83220,83221,83223,83225],{"class":99,"line":1504},[97,83222,51969],{"class":103},[97,83224,51522],{"class":107},[97,83226,130],{"class":103},[97,83228,83229],{"class":99,"line":1510},[97,83230,2591],{"emptyLinePlaceholder":249},[97,83232,83233,83235,83237],{"class":99,"line":1522},[97,83234,104],{"class":103},[97,83236,51984],{"class":107},[97,83238,130],{"class":103},[97,83240,83241,83243,83245,83247,83249],{"class":99,"line":1804},[97,83242,52328],{"class":103},[97,83244,51795],{"class":107},[97,83246,55498],{"class":103},[97,83248,51795],{"class":107},[97,83250,130],{"class":103},[97,83252,83253,83255,83257],{"class":99,"line":1809},[97,83254,52328],{"class":103},[97,83256,51997],{"class":107},[97,83258,130],{"class":103},[97,83260,83261,83263,83266,83268],{"class":99,"line":1815},[97,83262,11412],{"class":319},[97,83264,83265],{"class":370}," gift",[97,83267,13755],{"class":319},[97,83269,83270],{"class":118}," '50g的茶叶，清洗球'\n",[97,83272,83273],{"class":99,"line":1820},[97,83274,83275],{"class":191},"    \u002F\u002F 1.把字符串拆分为数组\n",[97,83277,83278],{"class":99,"line":1834},[97,83279,83280],{"class":191},"    \u002F\u002F console.log(gift.split(','))\n",[97,83282,83283],{"class":99,"line":1839},[97,83284,83285],{"class":191},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[97,83287,83288,83290,83292,83294,83297,83300,83302,83305,83307,83309,83311,83313,83315,83318,83320,83323,83325,83327,83329,83331],{"class":99,"line":1845},[97,83289,11412],{"class":319},[97,83291,74103],{"class":370},[97,83293,13755],{"class":319},[97,83295,83296],{"class":103}," gift.",[97,83298,83299],{"class":111},"split",[97,83301,323],{"class":103},[97,83303,83304],{"class":118},"'，'",[97,83306,31016],{"class":103},[97,83308,74228],{"class":111},[97,83310,323],{"class":103},[97,83312,79979],{"class":5407},[97,83314,79982],{"class":319},[97,83316,83317],{"class":118}," `\u003Cspan>【赠品】${",[97,83319,79979],{"class":103},[97,83321,83322],{"class":118},"}\u003C\u002Fspan>\u003Cbr>`",[97,83324,31016],{"class":103},[97,83326,74407],{"class":111},[97,83328,323],{"class":103},[97,83330,74412],{"class":118},[97,83332,329],{"class":103},[97,83334,83335,83337,83339,83341,83343,83345,83347],{"class":99,"line":1866},[97,83336,52591],{"class":103},[97,83338,54583],{"class":111},[97,83340,323],{"class":103},[97,83342,82115],{"class":118},[97,83344,74433],{"class":103},[97,83346,115],{"class":319},[97,83348,74169],{"class":103},[97,83350,83351,83353,83355],{"class":99,"line":1871},[97,83352,52601],{"class":103},[97,83354,51997],{"class":107},[97,83356,130],{"class":103},[97,83358,83359,83361,83363],{"class":99,"line":1885},[97,83360,51969],{"class":103},[97,83362,51984],{"class":107},[97,83364,130],{"class":103},[97,83366,83367],{"class":99,"line":1890},[97,83368,2591],{"emptyLinePlaceholder":249},[97,83370,83371,83373,83375],{"class":99,"line":1919},[97,83372,51969],{"class":103},[97,83374,50825],{"class":107},[97,83376,130],{"class":103},[160,83378,83380],{"id":83379},"_41054-number","4.10.5.4 Number",[24,83382,83383],{},[19,83384],{"alt":92,"src":83385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[24,83387,83388],{},"整数也可以进行toFixed来保留小数",[24,83390,83391],{},"比如：",[24,83393,83394],{},"const price=10",[24,83396,83397],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[160,83399,83401],{"id":83400},"_41055-购物车展示","4.10.5.5 购物车展示",[24,83403,83404],{},[19,83405],{"alt":92,"src":83406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[87,83408,83410],{"className":50823,"code":83409,"language":50825,"meta":92,"style":92},"\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",[94,83411,83412,83422,83436,83440,83448,83462,83482,83494,83502,83508,83518,83528,83538,83542,83546,83552,83564,83578,83582,83586,83592,83604,83620,83630,83646,83650,83654,83660,83670,83680,83684,83688,83696,83708,83720,83732,83736,83740,83748,83760,83764,83768,83779,83789,83801,83813,83823,83827,83831,83839,83848,83860,83870,83880,83884,83888,83896,83905,83912,83922,83934,83938,83942,83951,83961,83972,83984,83996,84000,84004,84013,84023,84034,84038,84042,84048,84060,84072,84082,84092,84110,84122,84126,84130,84139,84151,84161,84171,84183,84187,84195,84203,84207,84215,84229,84237,84251,84279,84287,84295,84305,84309,84317,84325,84334,84342,84351,84361,84365,84369,84377,84385,84394,84402,84410,84423,84427,84431,84439,84447,84456,84464,84472,84487,84491,84495,84503,84511,84520,84528,84536,84550,84558,84562,84566,84571,84597,84602,84639,84644,84667,84672,84726,84731,84767,84771,84777,84782,84791,84805,84814,84833,84842,84852,84857,84862,84875,84880,84934,84960,84968,84976,84980],{"__ignoreMap":92},[97,83413,83414,83416,83418,83420],{"class":99,"line":100},[97,83415,51487],{"class":103},[97,83417,51490],{"class":107},[97,83419,51493],{"class":111},[97,83421,130],{"class":103},[97,83423,83424,83426,83428,83430,83432,83434],{"class":99,"line":195},[97,83425,104],{"class":103},[97,83427,50825],{"class":107},[97,83429,51504],{"class":111},[97,83431,115],{"class":103},[97,83433,51509],{"class":118},[97,83435,130],{"class":103},[97,83437,83438],{"class":99,"line":241},[97,83439,2591],{"emptyLinePlaceholder":249},[97,83441,83442,83444,83446],{"class":99,"line":1387},[97,83443,104],{"class":103},[97,83445,51522],{"class":107},[97,83447,130],{"class":103},[97,83449,83450,83452,83454,83456,83458,83460],{"class":99,"line":1393},[97,83451,52328],{"class":103},[97,83453,108],{"class":107},[97,83455,51534],{"class":111},[97,83457,115],{"class":103},[97,83459,51539],{"class":118},[97,83461,130],{"class":103},[97,83463,83464,83466,83468,83470,83472,83474,83476,83478,83480],{"class":99,"line":1407},[97,83465,52328],{"class":103},[97,83467,108],{"class":107},[97,83469,112],{"class":111},[97,83471,115],{"class":103},[97,83473,119],{"class":118},[97,83475,122],{"class":111},[97,83477,115],{"class":103},[97,83479,127],{"class":118},[97,83481,130],{"class":103},[97,83483,83484,83486,83488,83490,83492],{"class":99,"line":1413},[97,83485,52328],{"class":103},[97,83487,51591],{"class":107},[97,83489,51594],{"class":103},[97,83491,51591],{"class":107},[97,83493,130],{"class":103},[97,83495,83496,83498,83500],{"class":99,"line":1504},[97,83497,52328],{"class":103},[97,83499,231],{"class":107},[97,83501,130],{"class":103},[97,83503,83504,83506],{"class":99,"line":1510},[97,83505,6594],{"class":107},[97,83507,15762],{"class":103},[97,83509,83510,83512,83514,83516],{"class":99,"line":1522},[97,83511,54879],{"class":370},[97,83513,51621],{"class":103},[97,83515,511],{"class":370},[97,83517,1483],{"class":103},[97,83519,83520,83522,83524,83526],{"class":99,"line":1804},[97,83521,54890],{"class":370},[97,83523,51621],{"class":103},[97,83525,511],{"class":370},[97,83527,1483],{"class":103},[97,83529,83530,83532,83534,83536],{"class":99,"line":1809},[97,83531,72780],{"class":370},[97,83533,51621],{"class":103},[97,83535,60689],{"class":370},[97,83537,1483],{"class":103},[97,83539,83540],{"class":99,"line":1815},[97,83541,2378],{"class":103},[97,83543,83544],{"class":99,"line":1820},[97,83545,2591],{"emptyLinePlaceholder":249},[97,83547,83548,83550],{"class":99,"line":1834},[97,83549,62307],{"class":111},[97,83551,15762],{"class":103},[97,83553,83554,83556,83558,83560,83562],{"class":99,"line":1839},[97,83555,54955],{"class":370},[97,83557,51621],{"class":103},[97,83559,78758],{"class":370},[97,83561,51676],{"class":319},[97,83563,1483],{"class":103},[97,83565,83566,83568,83570,83572,83574,83576],{"class":99,"line":1845},[97,83567,54890],{"class":370},[97,83569,51621],{"class":103},[97,83571,631],{"class":370},[97,83573,51676],{"class":319},[97,83575,51740],{"class":370},[97,83577,1483],{"class":103},[97,83579,83580],{"class":99,"line":1866},[97,83581,2378],{"class":103},[97,83583,83584],{"class":99,"line":1871},[97,83585,2591],{"emptyLinePlaceholder":249},[97,83587,83588,83590],{"class":99,"line":1885},[97,83589,78809],{"class":111},[97,83591,15762],{"class":103},[97,83593,83594,83596,83598,83600,83602],{"class":99,"line":1890},[97,83595,54879],{"class":370},[97,83597,51621],{"class":103},[97,83599,895],{"class":370},[97,83601,51676],{"class":319},[97,83603,1483],{"class":103},[97,83605,83606,83608,83610,83612,83614,83616,83618],{"class":99,"line":1919},[97,83607,62044],{"class":370},[97,83609,51621],{"class":103},[97,83611,28311],{"class":370},[97,83613,78864],{"class":370},[97,83615,78867],{"class":370},[97,83617,1015],{"class":319},[97,83619,1483],{"class":103},[97,83621,83622,83624,83626,83628],{"class":99,"line":1924},[97,83623,55193],{"class":370},[97,83625,51621],{"class":103},[97,83627,51661],{"class":370},[97,83629,1483],{"class":103},[97,83631,83632,83634,83636,83638,83640,83642,83644],{"class":99,"line":1941},[97,83633,62161],{"class":370},[97,83635,51621],{"class":103},[97,83637,537],{"class":370},[97,83639,51676],{"class":319},[97,83641,51705],{"class":370},[97,83643,62428],{"class":370},[97,83645,1483],{"class":103},[97,83647,83648],{"class":99,"line":1946},[97,83649,2378],{"class":103},[97,83651,83652],{"class":99,"line":1951},[97,83653,2591],{"emptyLinePlaceholder":249},[97,83655,83656,83658],{"class":99,"line":1956},[97,83657,78927],{"class":111},[97,83659,15762],{"class":103},[97,83661,83662,83664,83666,83668],{"class":99,"line":1970},[97,83663,62209],{"class":370},[97,83665,51621],{"class":103},[97,83667,62214],{"class":370},[97,83669,1483],{"class":103},[97,83671,83672,83674,83676,83678],{"class":99,"line":1975},[97,83673,55068],{"class":370},[97,83675,51621],{"class":103},[97,83677,62002],{"class":370},[97,83679,1483],{"class":103},[97,83681,83682],{"class":99,"line":2768},[97,83683,2378],{"class":103},[97,83685,83686],{"class":99,"line":2782},[97,83687,2591],{"emptyLinePlaceholder":249},[97,83689,83690,83692,83694],{"class":99,"line":2790},[97,83691,78809],{"class":111},[97,83693,55799],{"class":107},[97,83695,15762],{"class":103},[97,83697,83698,83700,83702,83704,83706],{"class":99,"line":2795},[97,83699,54955],{"class":370},[97,83701,51621],{"class":103},[97,83703,932],{"class":370},[97,83705,51676],{"class":319},[97,83707,1483],{"class":103},[97,83709,83710,83712,83714,83716,83718],{"class":99,"line":2801},[97,83711,54969],{"class":370},[97,83713,51621],{"class":103},[97,83715,932],{"class":370},[97,83717,51676],{"class":319},[97,83719,1483],{"class":103},[97,83721,83722,83724,83726,83728,83730],{"class":99,"line":2807},[97,83723,61934],{"class":370},[97,83725,51621],{"class":103},[97,83727,639],{"class":370},[97,83729,51676],{"class":319},[97,83731,1483],{"class":103},[97,83733,83734],{"class":99,"line":2812},[97,83735,2378],{"class":103},[97,83737,83738],{"class":99,"line":8139},[97,83739,2591],{"emptyLinePlaceholder":249},[97,83741,83742,83744,83746],{"class":99,"line":8163},[97,83743,78809],{"class":111},[97,83745,62488],{"class":111},[97,83747,15762],{"class":103},[97,83749,83750,83752,83754,83756,83758],{"class":99,"line":8168},[97,83751,54955],{"class":370},[97,83753,51621],{"class":103},[97,83755,1914],{"class":370},[97,83757,51676],{"class":319},[97,83759,1483],{"class":103},[97,83761,83762],{"class":99,"line":8174},[97,83763,2378],{"class":103},[97,83765,83766],{"class":99,"line":8201},[97,83767,2591],{"emptyLinePlaceholder":249},[97,83769,83770,83772,83774,83777],{"class":99,"line":8206},[97,83771,78809],{"class":111},[97,83773,62488],{"class":111},[97,83775,83776],{"class":111}," .tag",[97,83778,15762],{"class":103},[97,83780,83781,83783,83785,83787],{"class":99,"line":8212},[97,83782,55193],{"class":370},[97,83784,51621],{"class":103},[97,83786,61053],{"class":370},[97,83788,1483],{"class":103},[97,83790,83791,83793,83795,83797,83799],{"class":99,"line":8224},[97,83792,54879],{"class":370},[97,83794,51621],{"class":103},[97,83796,398],{"class":370},[97,83798,51676],{"class":319},[97,83800,1483],{"class":103},[97,83802,83803,83805,83807,83809,83811],{"class":99,"line":8236},[97,83804,55106],{"class":370},[97,83806,51621],{"class":103},[97,83808,818],{"class":370},[97,83810,51676],{"class":319},[97,83812,1483],{"class":103},[97,83814,83815,83817,83819,83821],{"class":99,"line":8248},[97,83816,57600],{"class":370},[97,83818,51621],{"class":103},[97,83820,62254],{"class":370},[97,83822,1483],{"class":103},[97,83824,83825],{"class":99,"line":9907},[97,83826,2378],{"class":103},[97,83828,83829],{"class":99,"line":9932},[97,83830,2591],{"emptyLinePlaceholder":249},[97,83832,83833,83835,83837],{"class":99,"line":9955},[97,83834,78809],{"class":111},[97,83836,79101],{"class":111},[97,83838,31656],{"class":103},[97,83840,83841,83843,83846],{"class":99,"line":9979},[97,83842,78809],{"class":111},[97,83844,83845],{"class":111}," .sub-total",[97,83847,15762],{"class":103},[97,83849,83850,83852,83854,83856,83858],{"class":99,"line":9984},[97,83851,55106],{"class":370},[97,83853,51621],{"class":103},[97,83855,970],{"class":370},[97,83857,51676],{"class":319},[97,83859,1483],{"class":103},[97,83861,83862,83864,83866,83868],{"class":99,"line":9989},[97,83863,57600],{"class":370},[97,83865,51621],{"class":103},[97,83867,79124],{"class":370},[97,83869,1483],{"class":103},[97,83871,83872,83874,83876,83878],{"class":99,"line":9994},[97,83873,62021],{"class":370},[97,83875,51621],{"class":103},[97,83877,537],{"class":370},[97,83879,1483],{"class":103},[97,83881,83882],{"class":99,"line":10003},[97,83883,2378],{"class":103},[97,83885,83886],{"class":99,"line":10008},[97,83887,2591],{"emptyLinePlaceholder":249},[97,83889,83890,83892,83894],{"class":99,"line":10014},[97,83891,78809],{"class":111},[97,83893,79141],{"class":111},[97,83895,31656],{"class":103},[97,83897,83898,83900,83903],{"class":99,"line":10035},[97,83899,78809],{"class":111},[97,83901,83902],{"class":111}," .sub-total::before",[97,83904,31656],{"class":103},[97,83906,83907,83910],{"class":99,"line":10041},[97,83908,83909],{"class":111},"    .amount::before",[97,83911,15762],{"class":103},[97,83913,83914,83916,83918,83920],{"class":99,"line":10055},[97,83915,79148],{"class":370},[97,83917,51621],{"class":103},[97,83919,79153],{"class":118},[97,83921,1483],{"class":103},[97,83923,83924,83926,83928,83930,83932],{"class":99,"line":10061},[97,83925,55106],{"class":370},[97,83927,51621],{"class":103},[97,83929,818],{"class":370},[97,83931,51676],{"class":319},[97,83933,1483],{"class":103},[97,83935,83936],{"class":99,"line":10088},[97,83937,2378],{"class":103},[97,83939,83940],{"class":99,"line":10097},[97,83941,2591],{"emptyLinePlaceholder":249},[97,83943,83944,83946,83949],{"class":99,"line":10103},[97,83945,78809],{"class":111},[97,83947,83948],{"class":111}," .spec",[97,83950,15762],{"class":103},[97,83952,83953,83955,83957,83959],{"class":99,"line":10111},[97,83954,62021],{"class":370},[97,83956,51621],{"class":103},[97,83958,398],{"class":370},[97,83960,1483],{"class":103},[97,83962,83963,83965,83967,83970],{"class":99,"line":10116},[97,83964,57600],{"class":370},[97,83966,51621],{"class":103},[97,83968,83969],{"class":370},"#888",[97,83971,1483],{"class":103},[97,83973,83974,83976,83978,83980,83982],{"class":99,"line":16794},[97,83975,55106],{"class":370},[97,83977,51621],{"class":103},[97,83979,869],{"class":370},[97,83981,51676],{"class":319},[97,83983,1483],{"class":103},[97,83985,83986,83988,83990,83992,83994],{"class":99,"line":16800},[97,83987,62184],{"class":370},[97,83989,51621],{"class":103},[97,83991,1020],{"class":370},[97,83993,51676],{"class":319},[97,83995,1483],{"class":103},[97,83997,83998],{"class":99,"line":16823},[97,83999,2378],{"class":103},[97,84001,84002],{"class":99,"line":16829},[97,84003,2591],{"emptyLinePlaceholder":249},[97,84005,84006,84008,84011],{"class":99,"line":16852},[97,84007,78809],{"class":111},[97,84009,84010],{"class":111}," .count",[97,84012,15762],{"class":103},[97,84014,84015,84017,84019,84021],{"class":99,"line":16866},[97,84016,62021],{"class":370},[97,84018,51621],{"class":103},[97,84020,537],{"class":370},[97,84022,1483],{"class":103},[97,84024,84025,84027,84029,84032],{"class":99,"line":16886},[97,84026,57600],{"class":370},[97,84028,51621],{"class":103},[97,84030,84031],{"class":370},"#aaa",[97,84033,1483],{"class":103},[97,84035,84036],{"class":99,"line":16892},[97,84037,2378],{"class":103},[97,84039,84040],{"class":99,"line":16903},[97,84041,2591],{"emptyLinePlaceholder":249},[97,84043,84044,84046],{"class":99,"line":16926},[97,84045,72659],{"class":111},[97,84047,15762],{"class":103},[97,84049,84050,84052,84054,84056,84058],{"class":99,"line":16948},[97,84051,54955],{"class":370},[97,84053,51621],{"class":103},[97,84055,78758],{"class":370},[97,84057,51676],{"class":319},[97,84059,1483],{"class":103},[97,84061,84062,84064,84066,84068,84070],{"class":99,"line":16953},[97,84063,54890],{"class":370},[97,84065,51621],{"class":103},[97,84067,511],{"class":370},[97,84069,51740],{"class":370},[97,84071,1483],{"class":103},[97,84073,84074,84076,84078,84080],{"class":99,"line":16959},[97,84075,55193],{"class":370},[97,84077,51621],{"class":103},[97,84079,51661],{"class":370},[97,84081,1483],{"class":103},[97,84083,84084,84086,84088,84090],{"class":99,"line":16973},[97,84085,55204],{"class":370},[97,84087,51621],{"class":103},[97,84089,51764],{"class":370},[97,84091,1483],{"class":103},[97,84093,84094,84097,84099,84101,84103,84105,84108],{"class":99,"line":16986},[97,84095,84096],{"class":370},"      border-top",[97,84098,51621],{"class":103},[97,84100,537],{"class":370},[97,84102,51676],{"class":319},[97,84104,51705],{"class":370},[97,84106,84107],{"class":370}," #4e4e4e",[97,84109,1483],{"class":103},[97,84111,84112,84114,84116,84118,84120],{"class":99,"line":16991},[97,84113,54879],{"class":370},[97,84115,51621],{"class":103},[97,84117,1020],{"class":370},[97,84119,51676],{"class":319},[97,84121,1483],{"class":103},[97,84123,84124],{"class":99,"line":17005},[97,84125,2378],{"class":103},[97,84127,84128],{"class":99,"line":17010},[97,84129,2591],{"emptyLinePlaceholder":249},[97,84131,84132,84134,84137],{"class":99,"line":17016},[97,84133,72659],{"class":111},[97,84135,84136],{"class":111}," .amount",[97,84138,15762],{"class":103},[97,84140,84141,84143,84145,84147,84149],{"class":99,"line":17021},[97,84142,55106],{"class":370},[97,84144,51621],{"class":103},[97,84146,970],{"class":370},[97,84148,51676],{"class":319},[97,84150,1483],{"class":103},[97,84152,84153,84155,84157,84159],{"class":99,"line":17035},[97,84154,57600],{"class":370},[97,84156,51621],{"class":103},[97,84158,79124],{"class":370},[97,84160,1483],{"class":103},[97,84162,84163,84165,84167,84169],{"class":99,"line":17040},[97,84164,62518],{"class":370},[97,84166,51621],{"class":103},[97,84168,51673],{"class":370},[97,84170,1483],{"class":103},[97,84172,84173,84175,84177,84179,84181],{"class":99,"line":17045},[97,84174,61934],{"class":370},[97,84176,51621],{"class":103},[97,84178,976],{"class":370},[97,84180,51676],{"class":319},[97,84182,1483],{"class":103},[97,84184,84185],{"class":99,"line":17059},[97,84186,2378],{"class":103},[97,84188,84189,84191,84193],{"class":99,"line":17071},[97,84190,52601],{"class":103},[97,84192,231],{"class":107},[97,84194,130],{"class":103},[97,84196,84197,84199,84201],{"class":99,"line":17076},[97,84198,51969],{"class":103},[97,84200,51522],{"class":107},[97,84202,130],{"class":103},[97,84204,84205],{"class":99,"line":17089},[97,84206,2591],{"emptyLinePlaceholder":249},[97,84208,84209,84211,84213],{"class":99,"line":17094},[97,84210,104],{"class":103},[97,84212,51984],{"class":107},[97,84214,130],{"class":103},[97,84216,84217,84219,84221,84223,84225,84227],{"class":99,"line":17099},[97,84218,52328],{"class":103},[97,84220,51795],{"class":107},[97,84222,53670],{"class":111},[97,84224,115],{"class":103},[97,84226,62792],{"class":118},[97,84228,130],{"class":103},[97,84230,84231,84233,84235],{"class":99,"line":17104},[97,84232,52601],{"class":103},[97,84234,51795],{"class":107},[97,84236,130],{"class":103},[97,84238,84239,84241,84243,84245,84247,84249],{"class":99,"line":17117},[97,84240,52328],{"class":103},[97,84242,51795],{"class":107},[97,84244,53670],{"class":111},[97,84246,115],{"class":103},[97,84248,62764],{"class":118},[97,84250,130],{"class":103},[97,84252,84253,84255,84257,84260,84262,84264,84266,84269,84271,84273,84275,84277],{"class":99,"line":17122},[97,84254,51529],{"class":103},[97,84256,51795],{"class":107},[97,84258,84259],{"class":103},">合计：\u003C",[97,84261,97],{"class":107},[97,84263,53670],{"class":111},[97,84265,115],{"class":103},[97,84267,84268],{"class":118},"\"amount\"",[97,84270,55498],{"class":103},[97,84272,97],{"class":107},[97,84274,55498],{"class":103},[97,84276,51795],{"class":107},[97,84278,130],{"class":103},[97,84280,84281,84283,84285],{"class":99,"line":32823},[97,84282,52601],{"class":103},[97,84284,51795],{"class":107},[97,84286,130],{"class":103},[97,84288,84289,84291,84293],{"class":99,"line":32829},[97,84290,52328],{"class":103},[97,84292,51997],{"class":107},[97,84294,130],{"class":103},[97,84296,84297,84299,84301,84303],{"class":99,"line":32835},[97,84298,11412],{"class":319},[97,84300,79561],{"class":370},[97,84302,13755],{"class":319},[97,84304,55631],{"class":103},[97,84306,84307],{"class":99,"line":32841},[97,84308,79570],{"class":103},[97,84310,84311,84313,84315],{"class":99,"line":32847},[97,84312,79575],{"class":103},[97,84314,79578],{"class":118},[97,84316,31656],{"class":103},[97,84318,84319,84321,84323],{"class":99,"line":32858},[97,84320,79585],{"class":103},[97,84322,79588],{"class":118},[97,84324,31656],{"class":103},[97,84326,84327,84329,84332],{"class":99,"line":32864},[97,84328,79595],{"class":103},[97,84330,84331],{"class":370},"289.9",[97,84333,31656],{"class":103},[97,84335,84336,84338,84340],{"class":99,"line":32884},[97,84337,79605],{"class":103},[97,84339,79608],{"class":118},[97,84341,31656],{"class":103},[97,84343,84344,84347,84349],{"class":99,"line":32890},[97,84345,84346],{"class":103},"        count: ",[97,84348,398],{"class":370},[97,84350,31656],{"class":103},[97,84352,84353,84356,84359],{"class":99,"line":32901},[97,84354,84355],{"class":103},"        spec: { color: ",[97,84357,84358],{"class":118},"'白色'",[97,84360,55788],{"class":103},[97,84362,84363],{"class":99,"line":32907},[97,84364,78076],{"class":103},[97,84366,84367],{"class":99,"line":32913},[97,84368,79570],{"class":103},[97,84370,84371,84373,84375],{"class":99,"line":32919},[97,84372,79575],{"class":103},[97,84374,79669],{"class":118},[97,84376,31656],{"class":103},[97,84378,84379,84381,84383],{"class":99,"line":32925},[97,84380,79585],{"class":103},[97,84382,79678],{"class":118},[97,84384,31656],{"class":103},[97,84386,84387,84389,84392],{"class":99,"line":32931},[97,84388,79595],{"class":103},[97,84390,84391],{"class":370},"109.8",[97,84393,31656],{"class":103},[97,84395,84396,84398,84400],{"class":99,"line":32937},[97,84397,79605],{"class":103},[97,84399,79696],{"class":118},[97,84401,31656],{"class":103},[97,84403,84404,84406,84408],{"class":99,"line":32943},[97,84405,84346],{"class":103},[97,84407,392],{"class":370},[97,84409,31656],{"class":103},[97,84411,84412,84415,84417,84419,84421],{"class":99,"line":32963},[97,84413,84414],{"class":103},"        spec: { size: ",[97,84416,82087],{"class":118},[97,84418,55648],{"class":103},[97,84420,82092],{"class":118},[97,84422,55788],{"class":103},[97,84424,84425],{"class":99,"line":32969},[97,84426,78076],{"class":103},[97,84428,84429],{"class":99,"line":32985},[97,84430,79570],{"class":103},[97,84432,84433,84435,84437],{"class":99,"line":32991},[97,84434,79575],{"class":103},[97,84436,79713],{"class":118},[97,84438,31656],{"class":103},[97,84440,84441,84443,84445],{"class":99,"line":33005},[97,84442,79585],{"class":103},[97,84444,79722],{"class":118},[97,84446,31656],{"class":103},[97,84448,84449,84451,84454],{"class":99,"line":33011},[97,84450,79595],{"class":103},[97,84452,84453],{"class":370},"488",[97,84455,31656],{"class":103},[97,84457,84458,84460,84462],{"class":99,"line":33026},[97,84459,79605],{"class":103},[97,84461,79740],{"class":118},[97,84463,31656],{"class":103},[97,84465,84466,84468,84470],{"class":99,"line":33032},[97,84467,84346],{"class":103},[97,84469,537],{"class":370},[97,84471,31656],{"class":103},[97,84473,84474,84476,84479,84482,84485],{"class":99,"line":33041},[97,84475,84355],{"class":103},[97,84477,84478],{"class":118},"'青色'",[97,84480,84481],{"class":103},", sum: ",[97,84483,84484],{"class":118},"'一大四小'",[97,84486,55788],{"class":103},[97,84488,84489],{"class":99,"line":33047},[97,84490,78076],{"class":103},[97,84492,84493],{"class":99,"line":33056},[97,84494,79570],{"class":103},[97,84496,84497,84499,84501],{"class":99,"line":33062},[97,84498,79575],{"class":103},[97,84500,79757],{"class":118},[97,84502,31656],{"class":103},[97,84504,84505,84507,84509],{"class":99,"line":33068},[97,84506,79585],{"class":103},[97,84508,79766],{"class":118},[97,84510,31656],{"class":103},[97,84512,84513,84515,84518],{"class":99,"line":33077},[97,84514,79595],{"class":103},[97,84516,84517],{"class":370},"139",[97,84519,31656],{"class":103},[97,84521,84522,84524,84526],{"class":99,"line":33083},[97,84523,79605],{"class":103},[97,84525,79784],{"class":118},[97,84527,31656],{"class":103},[97,84529,84530,84532,84534],{"class":99,"line":33094},[97,84531,84346],{"class":103},[97,84533,537],{"class":370},[97,84535,31656],{"class":103},[97,84537,84538,84540,84543,84545,84548],{"class":99,"line":33100},[97,84539,84414],{"class":103},[97,84541,84542],{"class":118},"'小号'",[97,84544,55648],{"class":103},[97,84546,84547],{"class":118},"'紫色'",[97,84549,55654],{"class":103},[97,84551,84552,84555],{"class":99,"line":33119},[97,84553,84554],{"class":103},"        gift: ",[97,84556,84557],{"class":118},"'50g茶叶,清洗球'\n",[97,84559,84560],{"class":99,"line":33125},[97,84561,52582],{"class":103},[97,84563,84564],{"class":99,"line":33136},[97,84565,53293],{"class":103},[97,84567,84568],{"class":99,"line":33142},[97,84569,84570],{"class":191},"    \u002F\u002F  1.根据数据渲染页面\n",[97,84572,84573,84575,84577,84579,84581,84583,84585,84587,84589,84591,84593,84595],{"class":99,"line":33162},[97,84574,52591],{"class":103},[97,84576,54583],{"class":111},[97,84578,323],{"class":103},[97,84580,80085],{"class":118},[97,84582,74433],{"class":103},[97,84584,115],{"class":319},[97,84586,80232],{"class":103},[97,84588,74228],{"class":111},[97,84590,323],{"class":103},[97,84592,79979],{"class":5407},[97,84594,79982],{"class":319},[97,84596,15762],{"class":103},[97,84598,84599],{"class":99,"line":33178},[97,84600,84601],{"class":191},"      \u002F\u002F 对象解构\n",[97,84603,84604,84606,84608,84610,84612,84614,84616,84619,84621,84623,84625,84628,84630,84633,84635,84637],{"class":99,"line":33184},[97,84605,58412],{"class":319},[97,84607,79991],{"class":103},[97,84609,80004],{"class":370},[97,84611,12626],{"class":103},[97,84613,79994],{"class":370},[97,84615,12626],{"class":103},[97,84617,84618],{"class":370},"count",[97,84620,12626],{"class":103},[97,84622,79999],{"class":370},[97,84624,12626],{"class":103},[97,84626,84627],{"class":370},"spec",[97,84629,12626],{"class":103},[97,84631,84632],{"class":370},"gift",[97,84634,80007],{"class":103},[97,84636,115],{"class":319},[97,84638,80012],{"class":103},[97,84640,84641],{"class":99,"line":33198},[97,84642,84643],{"class":191},"      \u002F\u002F 规格文字模块处理\n",[97,84645,84646,84648,84651,84653,84655,84657,84659,84661,84663,84665],{"class":99,"line":33204},[97,84647,58412],{"class":319},[97,84649,84650],{"class":370}," text",[97,84652,13755],{"class":319},[97,84654,82122],{"class":103},[97,84656,82125],{"class":111},[97,84658,82128],{"class":103},[97,84660,74407],{"class":111},[97,84662,323],{"class":103},[97,84664,82135],{"class":118},[97,84666,329],{"class":103},[97,84668,84669],{"class":99,"line":33210},[97,84670,84671],{"class":191},"      \u002F\u002F 处理赠品模块\n",[97,84673,84674,84676,84678,84680,84683,84685,84687,84689,84691,84694,84696,84698,84700,84702,84704,84707,84709,84712,84714,84716,84718,84720,84722,84724],{"class":99,"line":33221},[97,84675,58412],{"class":319},[97,84677,74103],{"class":370},[97,84679,13755],{"class":319},[97,84681,84682],{"class":103}," gift ",[97,84684,1305],{"class":319},[97,84686,83296],{"class":103},[97,84688,83299],{"class":111},[97,84690,323],{"class":103},[97,84692,84693],{"class":118},"','",[97,84695,31016],{"class":103},[97,84697,74228],{"class":111},[97,84699,323],{"class":103},[97,84701,79979],{"class":5407},[97,84703,79982],{"class":319},[97,84705,84706],{"class":118}," `\u003Cspan class=\"tag\">【赠品】${",[97,84708,79979],{"class":103},[97,84710,84711],{"class":118},"}\u003C\u002Fspan>`",[97,84713,31016],{"class":103},[97,84715,74407],{"class":111},[97,84717,323],{"class":103},[97,84719,74412],{"class":118},[97,84721,13905],{"class":103},[97,84723,1179],{"class":319},[97,84725,70288],{"class":118},[97,84727,84728],{"class":99,"line":33227},[97,84729,84730],{"class":191},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[97,84732,84733,84735,84738,84740,84743,84745,84747,84749,84752,84754,84756,84758,84761,84763,84765],{"class":99,"line":33233},[97,84734,58412],{"class":319},[97,84736,84737],{"class":370}," subtotal",[97,84739,13755],{"class":319},[97,84741,84742],{"class":103}," ((price ",[97,84744,775],{"class":319},[97,84746,5945],{"class":370},[97,84748,6709],{"class":319},[97,84750,84751],{"class":103}," count) ",[97,84753,904],{"class":319},[97,84755,5945],{"class":370},[97,84757,31016],{"class":103},[97,84759,84760],{"class":111},"toFixed",[97,84762,323],{"class":103},[97,84764,398],{"class":370},[97,84766,329],{"class":103},[97,84768,84769],{"class":99,"line":33243},[97,84770,2591],{"emptyLinePlaceholder":249},[97,84772,84773,84775],{"class":99,"line":33249},[97,84774,74166],{"class":319},[97,84776,70352],{"class":118},[97,84778,84779],{"class":99,"line":33260},[97,84780,84781],{"class":118},"        \u003Cdiv class=\"item\">\n",[97,84783,84784,84787,84789],{"class":99,"line":33266},[97,84785,84786],{"class":118},"          \u003Cimg src=\"${",[97,84788,80004],{"class":103},[97,84790,80036],{"class":118},[97,84792,84793,84796,84798,84801,84803],{"class":99,"line":33276},[97,84794,84795],{"class":118},"          \u003Cp class=\"name\">${",[97,84797,79994],{"class":103},[97,84799,84800],{"class":118},"}${",[97,84802,1492],{"class":103},[97,84804,80046],{"class":118},[97,84806,84807,84810,84812],{"class":99,"line":33281},[97,84808,84809],{"class":118},"          \u003Cp class=\"spec\">${",[97,84811,5378],{"class":103},[97,84813,80046],{"class":118},[97,84815,84816,84819,84821,84823,84825,84827,84829,84831],{"class":99,"line":33287},[97,84817,84818],{"class":118},"          \u003Cp class=\"price\">${",[97,84820,79999],{"class":103},[97,84822,878],{"class":118},[97,84824,84760],{"class":111},[97,84826,323],{"class":118},[97,84828,398],{"class":370},[97,84830,749],{"class":118},[97,84832,80046],{"class":118},[97,84834,84835,84838,84840],{"class":99,"line":33336},[97,84836,84837],{"class":118},"          \u003Cp class=\"count\">x${",[97,84839,84618],{"class":103},[97,84841,80046],{"class":118},[97,84843,84844,84847,84850],{"class":99,"line":33383},[97,84845,84846],{"class":118},"          \u003Cp class=\"sub-total\">${",[97,84848,84849],{"class":103},"subtotal",[97,84851,80046],{"class":118},[97,84853,84854],{"class":99,"line":33388},[97,84855,84856],{"class":118},"        \u003C\u002Fdiv> \n",[97,84858,84859],{"class":99,"line":33394},[97,84860,84861],{"class":118},"             `\n",[97,84863,84864,84867,84869,84871,84873],{"class":99,"line":33413},[97,84865,84866],{"class":103},"    }).",[97,84868,74407],{"class":111},[97,84870,323],{"class":103},[97,84872,74412],{"class":118},[97,84874,329],{"class":103},[97,84876,84877],{"class":99,"line":33419},[97,84878,84879],{"class":191},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[97,84881,84882,84884,84886,84888,84890,84893,84895,84898,84900,84902,84904,84907,84910,84912,84915,84917,84919,84921,84924,84926,84928,84930,84932],{"class":99,"line":33439},[97,84883,11412],{"class":319},[97,84885,62969],{"class":370},[97,84887,13755],{"class":319},[97,84889,80232],{"class":103},[97,84891,84892],{"class":111},"reduce",[97,84894,2567],{"class":103},[97,84896,84897],{"class":5407},"prev",[97,84899,12626],{"class":103},[97,84901,79979],{"class":5407},[97,84903,13905],{"class":103},[97,84905,84906],{"class":319},"=>",[97,84908,84909],{"class":103}," prev ",[97,84911,801],{"class":319},[97,84913,84914],{"class":103}," (item.price ",[97,84916,775],{"class":319},[97,84918,5945],{"class":370},[97,84920,6709],{"class":319},[97,84922,84923],{"class":103}," item.count) ",[97,84925,904],{"class":319},[97,84927,5945],{"class":370},[97,84929,12626],{"class":103},[97,84931,511],{"class":370},[97,84933,329],{"class":103},[97,84935,84936,84938,84940,84942,84945,84947,84949,84952,84954,84956,84958],{"class":99,"line":33445},[97,84937,52591],{"class":103},[97,84939,54583],{"class":111},[97,84941,323],{"class":103},[97,84943,84944],{"class":118},"'.amount'",[97,84946,74433],{"class":103},[97,84948,115],{"class":319},[97,84950,84951],{"class":103}," total.",[97,84953,84760],{"class":111},[97,84955,323],{"class":103},[97,84957,398],{"class":370},[97,84959,329],{"class":103},[97,84961,84962,84964,84966],{"class":99,"line":33451},[97,84963,52601],{"class":103},[97,84965,51997],{"class":107},[97,84967,130],{"class":103},[97,84969,84970,84972,84974],{"class":99,"line":33461},[97,84971,51969],{"class":103},[97,84973,51984],{"class":107},[97,84975,130],{"class":103},[97,84977,84978],{"class":99,"line":33466},[97,84979,2591],{"emptyLinePlaceholder":249},[97,84981,84982,84984,84986],{"class":99,"line":33472},[97,84983,51969],{"class":103},[97,84985,50825],{"class":107},[97,84987,130],{"class":103},[14,84989,84991],{"id":84990},"_411-编程思想","4.11 编程思想",[48,84993,84995],{"id":84994},"_4111-面向过程介绍","4.11.1 面向过程介绍",[24,84997,84998,85001],{},[469,84999,85000],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[24,85003,85004],{},"调用就可以了",[24,85006,85007],{},[19,85008],{"alt":92,"src":85009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[48,85011,85013],{"id":85012},"_4112-面向对象","4.11.2 面向对象",[24,85015,85016],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[24,85018,85019],{},[19,85020],{"alt":92,"src":85021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[24,85023,85024],{},"面向对象的特性：",[67,85026,85027,85030,85033],{},[70,85028,85029],{},"封装性",[70,85031,85032],{},"继承性",[70,85034,85035],{},"多态性",[48,85037,85039],{"id":85038},"_4113-两者比较","4.11.3 两者比较",[24,85041,85042],{},[19,85043],{"alt":92,"src":85044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85046,85048],{"id":85047},"_412-构造函数回顾","4.12 构造函数回顾",[24,85050,85051],{},[19,85052],{"alt":92,"src":85053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[24,85055,85056],{},[19,85057],{"alt":92,"src":85058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[24,85060,85061],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[24,85063,85064],{},[19,85065],{"alt":92,"src":85066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85068,85070],{"id":85069},"_413-原型","4.13 原型",[48,85072,85074],{"id":85073},"_4131-原型对象的认识","4.13.1 原型对象的认识",[24,85076,85077],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[24,85079,85080],{},[19,85081],{"alt":92,"src":85082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[24,85084,85085],{},[19,85086],{"alt":92,"src":85087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[24,85089,85090],{},"原型是构造函数的属性，它也是一个对象",[24,85092,85093],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[24,85095,85096],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[87,85098,85100],{"className":53251,"code":85099,"language":53253,"meta":92,"style":92},"\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",[94,85101,85102,85110,85115,85123,85128,85133,85138,85143,85148,85152,85156,85160,85165,85170,85174,85179,85184,85189,85194,85199,85203,85211],{"__ignoreMap":92},[97,85103,85104,85106,85108],{"class":99,"line":100},[97,85105,104],{"class":103},[97,85107,51984],{"class":107},[97,85109,130],{"class":103},[97,85111,85112],{"class":99,"line":195},[97,85113,85114],{"class":191},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[97,85116,85117,85119,85121],{"class":99,"line":241},[97,85118,52328],{"class":103},[97,85120,51997],{"class":107},[97,85122,130],{"class":103},[97,85124,85125],{"class":99,"line":1387},[97,85126,85127],{"class":103},"    function Star(uname, age) {\n",[97,85129,85130],{"class":99,"line":1393},[97,85131,85132],{"class":103},"      this.uname = uname,\n",[97,85134,85135],{"class":99,"line":1407},[97,85136,85137],{"class":103},"        this.age = age\n",[97,85139,85140],{"class":99,"line":1413},[97,85141,85142],{"class":103},"      \u002F\u002F this.sing = function () {\n",[97,85144,85145],{"class":99,"line":1504},[97,85146,85147],{"class":103},"      \u002F\u002F   console.log('唱歌')\n",[97,85149,85150],{"class":99,"line":1510},[97,85151,2591],{"emptyLinePlaceholder":249},[97,85153,85154],{"class":99,"line":1522},[97,85155,60221],{"class":103},[97,85157,85158],{"class":99,"line":1804},[97,85159,2378],{"class":103},[97,85161,85162],{"class":99,"line":1809},[97,85163,85164],{"class":103},"    Star.prototype.sing = function () {\n",[97,85166,85167],{"class":99,"line":1815},[97,85168,85169],{"class":103},"      console.log('唱歌')\n",[97,85171,85172],{"class":99,"line":1820},[97,85173,2378],{"class":103},[97,85175,85176],{"class":99,"line":1834},[97,85177,85178],{"class":103},"    \u002F\u002F console.dir(Star.prototype)\n",[97,85180,85181],{"class":99,"line":1839},[97,85182,85183],{"class":103},"    const pink = new Star('pink', 18)\n",[97,85185,85186],{"class":99,"line":1845},[97,85187,85188],{"class":103},"    const red = new Star('red', 20)\n",[97,85190,85191],{"class":99,"line":1866},[97,85192,85193],{"class":103},"    pink.sing()\n",[97,85195,85196],{"class":99,"line":1871},[97,85197,85198],{"class":103},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[97,85200,85201],{"class":99,"line":1885},[97,85202,2591],{"emptyLinePlaceholder":249},[97,85204,85205,85207,85209],{"class":99,"line":1890},[97,85206,52601],{"class":103},[97,85208,51997],{"class":107},[97,85210,130],{"class":103},[97,85212,85213,85215,85217],{"class":99,"line":1919},[97,85214,51969],{"class":103},[97,85216,51984],{"class":107},[97,85218,130],{"class":103},[24,85220,85221],{},[19,85222],{"alt":92,"src":85223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[87,85225,85227],{"className":53251,"code":85226,"language":53253,"meta":92,"style":92},"\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",[94,85228,85229,85237,85245,85250,85255,85260,85265,85269,85274,85279,85284,85288,85293,85297,85301,85306,85310,85318],{"__ignoreMap":92},[97,85230,85231,85233,85235],{"class":99,"line":100},[97,85232,104],{"class":103},[97,85234,51984],{"class":107},[97,85236,130],{"class":103},[97,85238,85239,85241,85243],{"class":99,"line":195},[97,85240,52328],{"class":103},[97,85242,51997],{"class":107},[97,85244,130],{"class":103},[97,85246,85247],{"class":99,"line":241},[97,85248,85249],{"class":103},"    let that\n",[97,85251,85252],{"class":99,"line":1387},[97,85253,85254],{"class":103},"    function Star(uname) {\n",[97,85256,85257],{"class":99,"line":1393},[97,85258,85259],{"class":103},"      this.uname = uname\n",[97,85261,85262],{"class":99,"line":1407},[97,85263,85264],{"class":103},"      that = this\n",[97,85266,85267],{"class":99,"line":1413},[97,85268,2378],{"class":103},[97,85270,85271],{"class":99,"line":1504},[97,85272,85273],{"class":103},"    \u002F\u002F 实例对象是 ldh\n",[97,85275,85276],{"class":99,"line":1510},[97,85277,85278],{"class":103},"    const ldh = new Star('刘德华')\n",[97,85280,85281],{"class":99,"line":1522},[97,85282,85283],{"class":103},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[97,85285,85286],{"class":99,"line":1804},[97,85287,2591],{"emptyLinePlaceholder":249},[97,85289,85290],{"class":99,"line":1809},[97,85291,85292],{"class":103},"    Star.sing = function () {\n",[97,85294,85295],{"class":99,"line":1815},[97,85296,85169],{"class":103},[97,85298,85299],{"class":99,"line":1820},[97,85300,2378],{"class":103},[97,85302,85303],{"class":99,"line":1834},[97,85304,85305],{"class":103},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[97,85307,85308],{"class":99,"line":1839},[97,85309,2591],{"emptyLinePlaceholder":249},[97,85311,85312,85314,85316],{"class":99,"line":1845},[97,85313,52601],{"class":103},[97,85315,51997],{"class":107},[97,85317,130],{"class":103},[97,85319,85320,85322,85324],{"class":99,"line":1866},[97,85321,51969],{"class":103},[97,85323,51984],{"class":107},[97,85325,130],{"class":103},[24,85327,85328],{},"构造函数的this指向的是实例对象；",[24,85330,85331],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[48,85333,85335],{"id":85334},"_4132-数组扩展方法","4.13.2 数组扩展方法",[24,85337,85338],{},[19,85339],{"alt":92,"src":85340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[87,85342,85344],{"className":53251,"code":85343,"language":53253,"meta":92,"style":92},"\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",[94,85345,85346,85354,85362,85367,85372,85377,85382,85387,85392,85397,85402,85407,85412,85416,85421,85426,85431,85436,85440,85445,85450,85455,85460,85464,85469,85474,85479,85484,85488,85493,85497,85505],{"__ignoreMap":92},[97,85347,85348,85350,85352],{"class":99,"line":100},[97,85349,104],{"class":103},[97,85351,51984],{"class":107},[97,85353,130],{"class":103},[97,85355,85356,85358,85360],{"class":99,"line":195},[97,85357,52328],{"class":103},[97,85359,51997],{"class":107},[97,85361,130],{"class":103},[97,85363,85364],{"class":99,"line":241},[97,85365,85366],{"class":103},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[97,85368,85369],{"class":99,"line":1387},[97,85370,85371],{"class":103},"    const arr = [1, 2, 3]\n",[97,85373,85374],{"class":99,"line":1393},[97,85375,85376],{"class":103},"    \u002F\u002F 自己定义数组的扩展方法\n",[97,85378,85379],{"class":99,"line":1407},[97,85380,85381],{"class":103},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[97,85383,85384],{"class":99,"line":1413},[97,85385,85386],{"class":103},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[97,85388,85389],{"class":99,"line":1504},[97,85390,85391],{"class":103},"    \u002F\u002F ①.最大值\n",[97,85393,85394],{"class":99,"line":1510},[97,85395,85396],{"class":103},"    Array.prototype.max = function () {\n",[97,85398,85399],{"class":99,"line":1522},[97,85400,85401],{"class":103},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[97,85403,85404],{"class":99,"line":1804},[97,85405,85406],{"class":103},"      return Math.max(...this)\n",[97,85408,85409],{"class":99,"line":1809},[97,85410,85411],{"class":103},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[97,85413,85414],{"class":99,"line":1815},[97,85415,2378],{"class":103},[97,85417,85418],{"class":99,"line":1820},[97,85419,85420],{"class":103},"    console.log(arr.max())\n",[97,85422,85423],{"class":99,"line":1834},[97,85424,85425],{"class":103},"    \u002F\u002F ②最小值\n",[97,85427,85428],{"class":99,"line":1839},[97,85429,85430],{"class":103},"    Array.prototype.min = function () {\n",[97,85432,85433],{"class":99,"line":1845},[97,85434,85435],{"class":103},"      return Math.min(...this)\n",[97,85437,85438],{"class":99,"line":1866},[97,85439,2378],{"class":103},[97,85441,85442],{"class":99,"line":1871},[97,85443,85444],{"class":103},"    console.log(arr.min())\n",[97,85446,85447],{"class":99,"line":1885},[97,85448,85449],{"class":103},"    \u002F\u002F③求和\n",[97,85451,85452],{"class":99,"line":1890},[97,85453,85454],{"class":103},"    Array.prototype.sum = function () {\n",[97,85456,85457],{"class":99,"line":1919},[97,85458,85459],{"class":103},"      return this.reduce((prev, current) => prev + current, 0)\n",[97,85461,85462],{"class":99,"line":1924},[97,85463,2378],{"class":103},[97,85465,85466],{"class":99,"line":1941},[97,85467,85468],{"class":103},"    console.log(arr.sum())\n",[97,85470,85471],{"class":99,"line":1946},[97,85472,85473],{"class":103},"    \u002F\u002F ③排序\n",[97,85475,85476],{"class":99,"line":1951},[97,85477,85478],{"class":103},"    Array.prototype.rever = function () {\n",[97,85480,85481],{"class":99,"line":1956},[97,85482,85483],{"class":103},"      return this.reverse()\n",[97,85485,85486],{"class":99,"line":1970},[97,85487,2378],{"class":103},[97,85489,85490],{"class":99,"line":1975},[97,85491,85492],{"class":103},"    console.log(arr.rever())\n",[97,85494,85495],{"class":99,"line":2768},[97,85496,2591],{"emptyLinePlaceholder":249},[97,85498,85499,85501,85503],{"class":99,"line":2782},[97,85500,52601],{"class":103},[97,85502,51997],{"class":107},[97,85504,130],{"class":103},[97,85506,85507,85509,85511],{"class":99,"line":2790},[97,85508,51969],{"class":103},[97,85510,51984],{"class":107},[97,85512,130],{"class":103},[24,85514,85515],{},[19,85516],{"alt":92,"src":85517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[48,85519,85521],{"id":85520},"_4133-constructor-属性","4.13.3 constructor 属性",[24,85523,85524],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[24,85526,85527],{},[19,85528],{"alt":92,"src":85529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[87,85531,85533],{"className":53251,"code":85532,"language":53253,"meta":92,"style":92},"\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",[94,85534,85535,85543,85551,85556,85561,85565,85570,85575,85580,85588],{"__ignoreMap":92},[97,85536,85537,85539,85541],{"class":99,"line":100},[97,85538,104],{"class":103},[97,85540,51984],{"class":107},[97,85542,130],{"class":103},[97,85544,85545,85547,85549],{"class":99,"line":195},[97,85546,52328],{"class":103},[97,85548,51997],{"class":107},[97,85550,130],{"class":103},[97,85552,85553],{"class":99,"line":241},[97,85554,85555],{"class":103},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[97,85557,85558],{"class":99,"line":1387},[97,85559,85560],{"class":103},"    function Star() {\n",[97,85562,85563],{"class":99,"line":1393},[97,85564,2378],{"class":103},[97,85566,85567],{"class":99,"line":1407},[97,85568,85569],{"class":103},"    const ldh = new Star()\n",[97,85571,85572],{"class":99,"line":1413},[97,85573,85574],{"class":103},"    console.log(Star.prototype)\n",[97,85576,85577],{"class":99,"line":1504},[97,85578,85579],{"class":103},"    console.log(Star.prototype.constructor === Star)\n",[97,85581,85582,85584,85586],{"class":99,"line":1510},[97,85583,52601],{"class":103},[97,85585,51997],{"class":107},[97,85587,130],{"class":103},[97,85589,85590,85592,85594],{"class":99,"line":1522},[97,85591,51969],{"class":103},[97,85593,51984],{"class":107},[97,85595,130],{"class":103},[24,85597,85598],{},[19,85599],{"alt":92,"src":85600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[24,85602,85603],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[87,85605,85607],{"className":53251,"code":85606,"language":53253,"meta":92,"style":92},"  \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",[94,85608,85609,85617,85621,85625,85629,85634,85639,85644,85648,85653,85658,85663,85668,85673,85678,85682,85686,85691,85696,85701,85705,85710,85715,85719,85723,85727],{"__ignoreMap":92},[97,85610,85611,85613,85615],{"class":99,"line":100},[97,85612,52328],{"class":103},[97,85614,51997],{"class":107},[97,85616,130],{"class":103},[97,85618,85619],{"class":99,"line":195},[97,85620,85555],{"class":103},[97,85622,85623],{"class":99,"line":241},[97,85624,85560],{"class":103},[97,85626,85627],{"class":99,"line":1387},[97,85628,2378],{"class":103},[97,85630,85631],{"class":99,"line":1393},[97,85632,85633],{"class":103},"    \u002F\u002F const ldh = new Star()\n",[97,85635,85636],{"class":99,"line":1407},[97,85637,85638],{"class":103},"    \u002F\u002F console.log(Star.prototype)\n",[97,85640,85641],{"class":99,"line":1413},[97,85642,85643],{"class":103},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[97,85645,85646],{"class":99,"line":1504},[97,85647,2591],{"emptyLinePlaceholder":249},[97,85649,85650],{"class":99,"line":1510},[97,85651,85652],{"class":103},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[97,85654,85655],{"class":99,"line":1522},[97,85656,85657],{"class":103},"    \u002F\u002F Star.prototype.sing = function () {\n",[97,85659,85660],{"class":99,"line":1804},[97,85661,85662],{"class":103},"    \u002F\u002F   console.log('唱歌')\n",[97,85664,85665],{"class":99,"line":1809},[97,85666,85667],{"class":103},"    \u002F\u002F }\n",[97,85669,85670],{"class":99,"line":1815},[97,85671,85672],{"class":103},"    \u002F\u002F Star.prototype.dance = function () {\n",[97,85674,85675],{"class":99,"line":1820},[97,85676,85677],{"class":103},"    \u002F\u002F   console.log('跳舞')\n",[97,85679,85680],{"class":99,"line":1834},[97,85681,85667],{"class":103},[97,85683,85684],{"class":99,"line":1839},[97,85685,85574],{"class":103},[97,85687,85688],{"class":99,"line":1845},[97,85689,85690],{"class":103},"    Star.prototype = {\n",[97,85692,85693],{"class":99,"line":1866},[97,85694,85695],{"class":103},"      sing: function () {\n",[97,85697,85698],{"class":99,"line":1871},[97,85699,85700],{"class":103},"        console.log('唱歌')\n",[97,85702,85703],{"class":99,"line":1885},[97,85704,78076],{"class":103},[97,85706,85707],{"class":99,"line":1890},[97,85708,85709],{"class":103},"      dance: function () {\n",[97,85711,85712],{"class":99,"line":1919},[97,85713,85714],{"class":103},"        console.log('跳舞')\n",[97,85716,85717],{"class":99,"line":1924},[97,85718,52582],{"class":103},[97,85720,85721],{"class":99,"line":1941},[97,85722,2378],{"class":103},[97,85724,85725],{"class":99,"line":1946},[97,85726,85574],{"class":103},[97,85728,85729,85731,85733],{"class":99,"line":1951},[97,85730,52601],{"class":103},[97,85732,51997],{"class":107},[97,85734,130],{"class":103},[24,85736,85737],{},"进行输出结果后会发现：",[24,85739,85740],{},[19,85741],{"alt":92,"src":85742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[24,85744,85745],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[24,85747,85748],{},"所以，要重新指回创造这个原型对象的构造函数",[87,85750,85752],{"className":71397,"code":85751,"language":71399,"meta":92,"style":92},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[94,85753,85754,85768,85773,85778,85789,85802,85807,85818,85832,85836],{"__ignoreMap":92},[97,85755,85756,85759,85761,85764,85766],{"class":99,"line":100},[97,85757,85758],{"class":370},"Star",[97,85760,878],{"class":103},[97,85762,85763],{"class":370},"prototype",[97,85765,13755],{"class":319},[97,85767,15762],{"class":103},[97,85769,85770],{"class":99,"line":195},[97,85771,85772],{"class":191},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[97,85774,85775],{"class":99,"line":241},[97,85776,85777],{"class":103},"  constructor: Star,\n",[97,85779,85780,85783,85785,85787],{"class":99,"line":1387},[97,85781,85782],{"class":111},"  sing",[97,85784,51621],{"class":103},[97,85786,54633],{"class":319},[97,85788,54636],{"class":103},[97,85790,85791,85793,85795,85797,85800],{"class":99,"line":1393},[97,85792,73937],{"class":103},[97,85794,58431],{"class":111},[97,85796,323],{"class":103},[97,85798,85799],{"class":118},"'唱歌'",[97,85801,329],{"class":103},[97,85803,85804],{"class":99,"line":1407},[97,85805,85806],{"class":103},"   },\n",[97,85808,85809,85812,85814,85816],{"class":99,"line":1413},[97,85810,85811],{"class":111},"   dance",[97,85813,51621],{"class":103},[97,85815,54633],{"class":319},[97,85817,54636],{"class":103},[97,85819,85820,85823,85825,85827,85830],{"class":99,"line":1504},[97,85821,85822],{"class":103},"     console.",[97,85824,58431],{"class":111},[97,85826,323],{"class":103},[97,85828,85829],{"class":118},"'跳舞'",[97,85831,329],{"class":103},[97,85833,85834],{"class":99,"line":1510},[97,85835,4500],{"class":103},[97,85837,85838],{"class":99,"line":1522},[97,85839,1757],{"class":103},[24,85841,85842],{},[19,85843],{"alt":92,"src":85844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[24,85846,85847],{},"总结1：",[24,85849,85850],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[24,85852,85853],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[24,85855,85856],{},"constructor指的是他的来源",[24,85858,85859],{},[19,85860],{"alt":92,"src":85861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[24,85863,85864],{},[19,85865],{"alt":92,"src":85866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[24,85868,85869],{},"总结2：",[24,85871,85872],{},[19,85873],{"alt":92,"src":85874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[24,85876,85877],{},[19,85878],{"alt":92,"src":85879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[24,85881,85882],{},[19,85883],{"alt":92,"src":85884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[48,85886,85888],{"id":85887},"_4134-对象原型","4.13.4 对象原型",[24,85890,85891],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[24,85893,85894],{},"对象原型就是__proto__这个属性",[24,85896,85897],{},[19,85898],{"alt":92,"src":85899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[24,85901,85902],{},[19,85903],{"alt":92,"src":85904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[24,85906,85907],{},[19,85908],{"alt":92,"src":85909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[24,85911,85912],{},[19,85913],{"alt":92,"src":85914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[87,85916,85918],{"className":53251,"code":85917,"language":53253,"meta":92,"style":92},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[94,85919,85920,85928,85936,85940,85944,85948,85953,85961],{"__ignoreMap":92},[97,85921,85922,85924,85926],{"class":99,"line":100},[97,85923,104],{"class":103},[97,85925,51984],{"class":107},[97,85927,130],{"class":103},[97,85929,85930,85932,85934],{"class":99,"line":195},[97,85931,52328],{"class":103},[97,85933,51997],{"class":107},[97,85935,130],{"class":103},[97,85937,85938],{"class":99,"line":241},[97,85939,85560],{"class":103},[97,85941,85942],{"class":99,"line":1387},[97,85943,2378],{"class":103},[97,85945,85946],{"class":99,"line":1393},[97,85947,85569],{"class":103},[97,85949,85950],{"class":99,"line":1407},[97,85951,85952],{"class":103},"    console.log(ldh)\n",[97,85954,85955,85957,85959],{"class":99,"line":1413},[97,85956,52601],{"class":103},[97,85958,51997],{"class":107},[97,85960,130],{"class":103},[97,85962,85963,85965,85967],{"class":99,"line":1504},[97,85964,51969],{"class":103},[97,85966,51984],{"class":107},[97,85968,130],{"class":103},[24,85970,85971],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[24,85973,85974],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[24,85976,85977],{},[19,85978],{"alt":92,"src":85979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[24,85981,85982],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[24,85984,85985],{},"对象原型指向原型对象",[24,85987,85988],{},[19,85989],{"alt":92,"src":85990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[24,85992,85993],{},[19,85994],{"alt":92,"src":85995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[24,85997,85998],{},[19,85999],{"alt":92,"src":86000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[48,86002,86004],{"id":86003},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[24,86006,86007],{},[19,86008],{"alt":92,"src":86009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[138,86011,86012,86015,86018,86021],{},[70,86013,86014],{},"构造函数通过new的形式实例化得到实例对象",[70,86016,86017],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[70,86019,86020],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[70,86022,86023],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[24,86025,86026],{},[19,86027],{"alt":92,"src":86028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[24,86030,86031],{},"题目梳理：",[24,86033,86034],{},[19,86035],{"alt":92,"src":86036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[48,86038,86040],{"id":86039},"_4136-原型继承","4.13.6 原型继承",[24,86042,86043],{},[19,86044],{"alt":92,"src":86045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[24,86047,86048],{},[19,86049],{"alt":92,"src":86050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[24,86052,86053],{},[19,86054],{"alt":92,"src":86055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[24,86057,86058],{},[19,86059],{"alt":92,"src":86060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[24,86062,86063],{},[19,86064],{"alt":92,"src":86065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[24,86067,86068],{},[19,86069],{"alt":92,"src":86070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[24,86072,86073],{},[19,86074],{"alt":92,"src":86075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[24,86077,86078],{},[19,86079],{"alt":92,"src":86080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[24,86082,86083],{},"回顾：构造函数每次new得到对象都是不同的",[48,86085,86087],{"id":86086},"_4137-原型链","4.13.7 原型链",[24,86089,86090],{},[19,86091],{"alt":92,"src":86092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[24,86094,86095],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[24,86097,86098],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[24,86100,86101],{},"大哥是Object",[24,86103,86104],{},[19,86105],{"alt":92,"src":86106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[24,86108,86109],{},[19,86110],{"alt":92,"src":86111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[24,86113,86114],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[24,86116,86117],{},"万物皆对象",[48,86119,86121],{"id":86120},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[24,86123,86124],{},"模态框",[24,86126,86127],{},"以后遇见这个效果直接使用这个就行",[24,86129,86130],{},[19,86131],{"alt":92,"src":86132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[24,86134,86135],{},[19,86136],{"alt":92,"src":86137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[24,86139,86140],{},[19,86141],{"alt":92,"src":86142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[24,86144,86145],{},[19,86146],{"alt":92,"src":86147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[24,86149,86150],{},"补充知识点：",[138,86152,86153],{},[70,86154,86155],{},"append()",[24,86157,86158],{},[19,86159],{"alt":92,"src":86160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[87,86162,86164],{"className":50823,"code":86163,"language":50825,"meta":92,"style":92},"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",[94,86165,86166,86171,86176,86181,86185,86189,86193,86198,86203,86208,86212],{"__ignoreMap":92},[97,86167,86168],{"class":99,"line":100},[97,86169,86170],{"class":103},"append(param1)\n",[97,86172,86173],{"class":99,"line":195},[97,86174,86175],{"class":103},"append(param1, param2)\n",[97,86177,86178],{"class":99,"line":241},[97,86179,86180],{"class":103},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[97,86182,86183],{"class":99,"line":1387},[97,86184,2591],{"emptyLinePlaceholder":249},[97,86186,86187],{"class":99,"line":1393},[97,86188,2591],{"emptyLinePlaceholder":249},[97,86190,86191],{"class":99,"line":1407},[97,86192,2591],{"emptyLinePlaceholder":249},[97,86194,86195],{"class":99,"line":1413},[97,86196,86197],{"class":103},"let div = document.createElement(\"div\");\n",[97,86199,86200],{"class":99,"line":1504},[97,86201,86202],{"class":103},"let p = document.createElement(\"p\");\n",[97,86204,86205],{"class":99,"line":1510},[97,86206,86207],{"class":103},"div.append(p);\n",[97,86209,86210],{"class":99,"line":1522},[97,86211,2591],{"emptyLinePlaceholder":249},[97,86213,86214,86217,86219],{"class":99,"line":1804},[97,86215,86216],{"class":103},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[97,86218,24],{"class":107},[97,86220,86221],{"class":103},"> ]\n",[138,86223,86224],{"start":195},[70,86225,86226],{},"remove()",[24,86228,86229],{},"自己删自己",[24,86231,86232],{},[19,86233],{"alt":92,"src":86234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[87,86236,86238],{"className":50823,"code":86237,"language":50825,"meta":92,"style":92},"\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",[94,86239,86240,86250,86264,86268,86276,86290,86310,86322,86330,86337,86349,86362,86397,86409,86420,86432,86444,86456,86483,86493,86497,86501,86510,86522,86536,86546,86558,86562,86566,86576,86587,86597,86607,86620,86633,86643,86647,86651,86660,86670,86682,86686,86690,86699,86709,86719,86731,86735,86739,86749,86765,86776,86786,86796,86808,86820,86832,86836,86840,86853,86864,86868,86876,86884,86888,86896,86916,86936,86944,86949,86975,86980,86985,87004,87009,87021,87026,87037,87047,87057,87062,87067,87071,87076,87081,87086,87106,87111,87131,87136,87150,87155,87160,87165,87181,87185,87190,87219,87224,87229,87234,87245,87249,87253,87257,87262,87287,87292,87317,87322,87331,87335,87340,87365,87369,87394,87398,87407,87411,87416,87434,87444,87448,87456,87464,87468],{"__ignoreMap":92},[97,86241,86242,86244,86246,86248],{"class":99,"line":100},[97,86243,51487],{"class":103},[97,86245,51490],{"class":107},[97,86247,51493],{"class":111},[97,86249,130],{"class":103},[97,86251,86252,86254,86256,86258,86260,86262],{"class":99,"line":195},[97,86253,104],{"class":103},[97,86255,50825],{"class":107},[97,86257,51504],{"class":111},[97,86259,115],{"class":103},[97,86261,51509],{"class":118},[97,86263,130],{"class":103},[97,86265,86266],{"class":99,"line":241},[97,86267,2591],{"emptyLinePlaceholder":249},[97,86269,86270,86272,86274],{"class":99,"line":1387},[97,86271,104],{"class":103},[97,86273,51522],{"class":107},[97,86275,130],{"class":103},[97,86277,86278,86280,86282,86284,86286,86288],{"class":99,"line":1393},[97,86279,52328],{"class":103},[97,86281,108],{"class":107},[97,86283,51534],{"class":111},[97,86285,115],{"class":103},[97,86287,51539],{"class":118},[97,86289,130],{"class":103},[97,86291,86292,86294,86296,86298,86300,86302,86304,86306,86308],{"class":99,"line":1407},[97,86293,52328],{"class":103},[97,86295,108],{"class":107},[97,86297,112],{"class":111},[97,86299,115],{"class":103},[97,86301,119],{"class":118},[97,86303,122],{"class":111},[97,86305,115],{"class":103},[97,86307,127],{"class":118},[97,86309,130],{"class":103},[97,86311,86312,86314,86316,86318,86320],{"class":99,"line":1413},[97,86313,52328],{"class":103},[97,86315,51591],{"class":107},[97,86317,51594],{"class":103},[97,86319,51591],{"class":107},[97,86321,130],{"class":103},[97,86323,86324,86326,86328],{"class":99,"line":1504},[97,86325,52328],{"class":103},[97,86327,231],{"class":107},[97,86329,130],{"class":103},[97,86331,86332,86335],{"class":99,"line":1510},[97,86333,86334],{"class":111},"    .modal",[97,86336,15762],{"class":103},[97,86338,86339,86341,86343,86345,86347],{"class":99,"line":1522},[97,86340,54955],{"class":370},[97,86342,51621],{"class":103},[97,86344,4164],{"class":370},[97,86346,51676],{"class":319},[97,86348,1483],{"class":103},[97,86350,86351,86354,86356,86358,86360],{"class":99,"line":1804},[97,86352,86353],{"class":370},"      min-height",[97,86355,51621],{"class":103},[97,86357,631],{"class":370},[97,86359,51676],{"class":319},[97,86361,1483],{"class":103},[97,86363,86364,86366,86368,86370,86372,86374,86376,86378,86380,86382,86384,86386,86388,86390,86392,86395],{"class":99,"line":1809},[97,86365,78934],{"class":370},[97,86367,51621],{"class":103},[97,86369,511],{"class":370},[97,86371,4284],{"class":370},[97,86373,2229],{"class":370},[97,86375,51676],{"class":319},[97,86377,78951],{"class":370},[97,86379,323],{"class":103},[97,86381,511],{"class":370},[97,86383,12626],{"class":103},[97,86385,511],{"class":370},[97,86387,12626],{"class":103},[97,86389,511],{"class":370},[97,86391,12626],{"class":103},[97,86393,86394],{"class":370},"0.1",[97,86396,2910],{"class":103},[97,86398,86399,86401,86403,86405,86407],{"class":99,"line":1815},[97,86400,55318],{"class":370},[97,86402,51621],{"class":103},[97,86404,613],{"class":370},[97,86406,51676],{"class":319},[97,86408,1483],{"class":103},[97,86410,86411,86413,86415,86418],{"class":99,"line":1820},[97,86412,54943],{"class":370},[97,86414,51621],{"class":103},[97,86416,86417],{"class":370},"fixed",[97,86419,1483],{"class":103},[97,86421,86422,86425,86427,86430],{"class":99,"line":1834},[97,86423,86424],{"class":370},"      z-index",[97,86426,51621],{"class":103},[97,86428,86429],{"class":370},"999",[97,86431,1483],{"class":103},[97,86433,86434,86436,86438,86440,86442],{"class":99,"line":1839},[97,86435,55022],{"class":370},[97,86437,51621],{"class":103},[97,86439,976],{"class":370},[97,86441,648],{"class":319},[97,86443,1483],{"class":103},[97,86445,86446,86448,86450,86452,86454],{"class":99,"line":1845},[97,86447,55131],{"class":370},[97,86449,51621],{"class":103},[97,86451,976],{"class":370},[97,86453,648],{"class":319},[97,86455,1483],{"class":103},[97,86457,86458,86460,86462,86464,86466,86469,86471,86473,86475,86477,86479,86481],{"class":99,"line":1866},[97,86459,78975],{"class":370},[97,86461,51621],{"class":103},[97,86463,78980],{"class":370},[97,86465,323],{"class":103},[97,86467,86468],{"class":370},"-50",[97,86470,648],{"class":319},[97,86472,12626],{"class":103},[97,86474,86468],{"class":370},[97,86476,648],{"class":319},[97,86478,12626],{"class":103},[97,86480,511],{"class":370},[97,86482,2910],{"class":103},[97,86484,86485,86487,86489,86491],{"class":99,"line":1871},[97,86486,55068],{"class":370},[97,86488,51621],{"class":103},[97,86490,61026],{"class":370},[97,86492,1483],{"class":103},[97,86494,86495],{"class":99,"line":1885},[97,86496,2378],{"class":103},[97,86498,86499],{"class":99,"line":1890},[97,86500,2591],{"emptyLinePlaceholder":249},[97,86502,86503,86505,86508],{"class":99,"line":1919},[97,86504,86334],{"class":111},[97,86506,86507],{"class":111}," .header",[97,86509,15762],{"class":103},[97,86511,86512,86514,86516,86518,86520],{"class":99,"line":1924},[97,86513,57543],{"class":370},[97,86515,51621],{"class":103},[97,86517,721],{"class":370},[97,86519,51676],{"class":319},[97,86521,1483],{"class":103},[97,86523,86524,86526,86528,86530,86532,86534],{"class":99,"line":1941},[97,86525,54879],{"class":370},[97,86527,51621],{"class":103},[97,86529,511],{"class":370},[97,86531,2229],{"class":370},[97,86533,51676],{"class":319},[97,86535,1483],{"class":103},[97,86537,86538,86540,86542,86544],{"class":99,"line":1946},[97,86539,54943],{"class":370},[97,86541,51621],{"class":103},[97,86543,54948],{"class":370},[97,86545,1483],{"class":103},[97,86547,86548,86550,86552,86554,86556],{"class":99,"line":1951},[97,86549,55106],{"class":370},[97,86551,51621],{"class":103},[97,86553,1020],{"class":370},[97,86555,51676],{"class":319},[97,86557,1483],{"class":103},[97,86559,86560],{"class":99,"line":1956},[97,86561,2378],{"class":103},[97,86563,86564],{"class":99,"line":1970},[97,86565,2591],{"emptyLinePlaceholder":249},[97,86567,86568,86570,86572,86574],{"class":99,"line":1975},[97,86569,86334],{"class":111},[97,86571,86507],{"class":111},[97,86573,3223],{"class":107},[97,86575,15762],{"class":103},[97,86577,86578,86581,86583,86585],{"class":99,"line":2768},[97,86579,86580],{"class":370},"      font-style",[97,86582,51621],{"class":103},[97,86584,64025],{"class":370},[97,86586,1483],{"class":103},[97,86588,86589,86591,86593,86595],{"class":99,"line":2782},[97,86590,57600],{"class":370},[97,86592,51621],{"class":103},[97,86594,62254],{"class":370},[97,86596,1483],{"class":103},[97,86598,86599,86601,86603,86605],{"class":99,"line":2790},[97,86600,54943],{"class":370},[97,86602,51621],{"class":103},[97,86604,55015],{"class":370},[97,86606,1483],{"class":103},[97,86608,86609,86612,86614,86616,86618],{"class":99,"line":2795},[97,86610,86611],{"class":370},"      right",[97,86613,51621],{"class":103},[97,86615,895],{"class":370},[97,86617,51676],{"class":319},[97,86619,1483],{"class":103},[97,86621,86622,86624,86626,86629,86631],{"class":99,"line":2801},[97,86623,55131],{"class":370},[97,86625,51621],{"class":103},[97,86627,86628],{"class":370},"-2",[97,86630,51676],{"class":319},[97,86632,1483],{"class":103},[97,86634,86635,86637,86639,86641],{"class":99,"line":2807},[97,86636,62209],{"class":370},[97,86638,51621],{"class":103},[97,86640,62214],{"class":370},[97,86642,1483],{"class":103},[97,86644,86645],{"class":99,"line":2812},[97,86646,2378],{"class":103},[97,86648,86649],{"class":99,"line":8139},[97,86650,2591],{"emptyLinePlaceholder":249},[97,86652,86653,86655,86658],{"class":99,"line":8163},[97,86654,86334],{"class":111},[97,86656,86657],{"class":111}," .body",[97,86659,15762],{"class":103},[97,86661,86662,86664,86666,86668],{"class":99,"line":8168},[97,86663,57470],{"class":370},[97,86665,51621],{"class":103},[97,86667,51776],{"class":370},[97,86669,1483],{"class":103},[97,86671,86672,86674,86676,86678,86680],{"class":99,"line":8174},[97,86673,54879],{"class":370},[97,86675,51621],{"class":103},[97,86677,766],{"class":370},[97,86679,51676],{"class":319},[97,86681,1483],{"class":103},[97,86683,86684],{"class":99,"line":8201},[97,86685,2378],{"class":103},[97,86687,86688],{"class":99,"line":8206},[97,86689,2591],{"emptyLinePlaceholder":249},[97,86691,86692,86694,86697],{"class":99,"line":8212},[97,86693,86334],{"class":111},[97,86695,86696],{"class":111}," .footer",[97,86698,15762],{"class":103},[97,86700,86701,86703,86705,86707],{"class":99,"line":8224},[97,86702,55193],{"class":370},[97,86704,51621],{"class":103},[97,86706,51661],{"class":370},[97,86708,1483],{"class":103},[97,86710,86711,86713,86715,86717],{"class":99,"line":8236},[97,86712,55204],{"class":370},[97,86714,51621],{"class":103},[97,86716,51764],{"class":370},[97,86718,1483],{"class":103},[97,86720,86721,86723,86725,86727,86729],{"class":99,"line":8248},[97,86722,54879],{"class":370},[97,86724,51621],{"class":103},[97,86726,766],{"class":370},[97,86728,51676],{"class":319},[97,86730,1483],{"class":103},[97,86732,86733],{"class":99,"line":9907},[97,86734,2378],{"class":103},[97,86736,86737],{"class":99,"line":9932},[97,86738,2591],{"emptyLinePlaceholder":249},[97,86740,86741,86743,86745,86747],{"class":99,"line":9955},[97,86742,86334],{"class":111},[97,86744,86696],{"class":111},[97,86746,1591],{"class":107},[97,86748,15762],{"class":103},[97,86750,86751,86753,86755,86757,86759,86761,86763],{"class":99,"line":9979},[97,86752,54879],{"class":370},[97,86754,51621],{"class":103},[97,86756,392],{"class":370},[97,86758,51676],{"class":319},[97,86760,2274],{"class":370},[97,86762,51676],{"class":319},[97,86764,1483],{"class":103},[97,86766,86767,86769,86771,86774],{"class":99,"line":9984},[97,86768,61905],{"class":370},[97,86770,51621],{"class":103},[97,86772,86773],{"class":370},"#ccc",[97,86775,1483],{"class":103},[97,86777,86778,86780,86782,86784],{"class":99,"line":9989},[97,86779,64154],{"class":370},[97,86781,51621],{"class":103},[97,86783,54921],{"class":370},[97,86785,1483],{"class":103},[97,86787,86788,86790,86792,86794],{"class":99,"line":9994},[97,86789,57600],{"class":370},[97,86791,51621],{"class":103},[97,86793,61026],{"class":370},[97,86795,1483],{"class":103},[97,86797,86798,86800,86802,86804,86806],{"class":99,"line":10003},[97,86799,55318],{"class":370},[97,86801,51621],{"class":103},[97,86803,398],{"class":370},[97,86805,51676],{"class":319},[97,86807,1483],{"class":103},[97,86809,86810,86812,86814,86816,86818],{"class":99,"line":10008},[97,86811,61934],{"class":370},[97,86813,51621],{"class":103},[97,86815,766],{"class":370},[97,86817,51676],{"class":319},[97,86819,1483],{"class":103},[97,86821,86822,86824,86826,86828,86830],{"class":99,"line":10014},[97,86823,55106],{"class":370},[97,86825,51621],{"class":103},[97,86827,869],{"class":370},[97,86829,51676],{"class":319},[97,86831,1483],{"class":103},[97,86833,86834],{"class":99,"line":10035},[97,86835,2378],{"class":103},[97,86837,86838],{"class":99,"line":10041},[97,86839,2591],{"emptyLinePlaceholder":249},[97,86841,86842,86844,86846,86848,86851],{"class":99,"line":10055},[97,86843,86334],{"class":111},[97,86845,86696],{"class":111},[97,86847,1591],{"class":107},[97,86849,86850],{"class":111},".submit",[97,86852,15762],{"class":103},[97,86854,86855,86857,86859,86862],{"class":99,"line":10061},[97,86856,55068],{"class":370},[97,86858,51621],{"class":103},[97,86860,86861],{"class":370},"#369",[97,86863,1483],{"class":103},[97,86865,86866],{"class":99,"line":10088},[97,86867,2378],{"class":103},[97,86869,86870,86872,86874],{"class":99,"line":10097},[97,86871,52601],{"class":103},[97,86873,231],{"class":107},[97,86875,130],{"class":103},[97,86877,86878,86880,86882],{"class":99,"line":10103},[97,86879,51969],{"class":103},[97,86881,51522],{"class":107},[97,86883,130],{"class":103},[97,86885,86886],{"class":99,"line":10111},[97,86887,2591],{"emptyLinePlaceholder":249},[97,86889,86890,86892,86894],{"class":99,"line":10116},[97,86891,104],{"class":103},[97,86893,51984],{"class":107},[97,86895,130],{"class":103},[97,86897,86898,86900,86902,86904,86906,86909,86912,86914],{"class":99,"line":16794},[97,86899,52328],{"class":103},[97,86901,54071],{"class":107},[97,86903,15149],{"class":111},[97,86905,115],{"class":103},[97,86907,86908],{"class":118},"\"delete\"",[97,86910,86911],{"class":103},">删除\u003C\u002F",[97,86913,54071],{"class":107},[97,86915,130],{"class":103},[97,86917,86918,86920,86922,86924,86926,86929,86932,86934],{"class":99,"line":16800},[97,86919,52328],{"class":103},[97,86921,54071],{"class":107},[97,86923,15149],{"class":111},[97,86925,115],{"class":103},[97,86927,86928],{"class":118},"\"login\"",[97,86930,86931],{"class":103},">登录\u003C\u002F",[97,86933,54071],{"class":107},[97,86935,130],{"class":103},[97,86937,86938,86940,86942],{"class":99,"line":16823},[97,86939,52328],{"class":103},[97,86941,51997],{"class":107},[97,86943,130],{"class":103},[97,86945,86946],{"class":99,"line":16829},[97,86947,86948],{"class":191},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[97,86950,86951,86953,86956,86958,86960,86962,86964,86966,86969,86971,86973],{"class":99,"line":16852},[97,86952,70268],{"class":319},[97,86954,86955],{"class":111}," Modal",[97,86957,323],{"class":103},[97,86959,51591],{"class":5407},[97,86961,13755],{"class":319},[97,86963,70114],{"class":118},[97,86965,12626],{"class":103},[97,86967,86968],{"class":5407},"message",[97,86970,13755],{"class":319},[97,86972,70114],{"class":118},[97,86974,12633],{"class":103},[97,86976,86977],{"class":99,"line":16866},[97,86978,86979],{"class":191},"      \u002F\u002F 创建Model 模态框盒子\n",[97,86981,86982],{"class":99,"line":16886},[97,86983,86984],{"class":191},"      \u002F\u002F 1.1 创建div标签\n",[97,86986,86987,86989,86992,86994,86996,86998,87000,87002],{"class":99,"line":16892},[97,86988,70235],{"class":370},[97,86990,86991],{"class":103},".modalBox ",[97,86993,115],{"class":319},[97,86995,54580],{"class":103},[97,86997,70335],{"class":111},[97,86999,323],{"class":103},[97,87001,82115],{"class":118},[97,87003,329],{"class":103},[97,87005,87006],{"class":99,"line":16903},[97,87007,87008],{"class":191},"      \u002F\u002F 1.2 给div 添加类名为model\n",[97,87010,87011,87013,87016,87018],{"class":99,"line":16926},[97,87012,70235],{"class":370},[97,87014,87015],{"class":103},".modalBox.className ",[97,87017,115],{"class":319},[97,87019,87020],{"class":118}," 'modal'\n",[97,87022,87023],{"class":99,"line":16948},[97,87024,87025],{"class":191},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[97,87027,87028,87030,87033,87035],{"class":99,"line":16953},[97,87029,70235],{"class":370},[97,87031,87032],{"class":103},".modalBox.innerHTML ",[97,87034,115],{"class":319},[97,87036,70352],{"class":118},[97,87038,87039,87042,87044],{"class":99,"line":16959},[97,87040,87041],{"class":118},"        \u003Cdiv class=\"header\">${",[97,87043,51591],{"class":103},[97,87045,87046],{"class":118},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[97,87048,87049,87052,87054],{"class":99,"line":16973},[97,87050,87051],{"class":118},"        \u003Cdiv class=\"body\">${",[97,87053,86968],{"class":103},[97,87055,87056],{"class":118},"}\u003C\u002Fdiv>\n",[97,87058,87059],{"class":99,"line":16986},[97,87060,87061],{"class":118},"      `\n",[97,87063,87064],{"class":99,"line":16991},[97,87065,87066],{"class":191},"      \u002F\u002F console.log(this.modalBox)\n",[97,87068,87069],{"class":99,"line":17005},[97,87070,2378],{"class":103},[97,87072,87073],{"class":99,"line":17010},[97,87074,87075],{"class":191},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[97,87077,87078],{"class":99,"line":17016},[97,87079,87080],{"class":191},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[97,87082,87083],{"class":99,"line":17021},[97,87084,87085],{"class":191},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[97,87087,87088,87091,87093,87095,87097,87100,87102,87104],{"class":99,"line":17035},[97,87089,87090],{"class":370},"    Modal",[97,87092,878],{"class":103},[97,87094,85763],{"class":370},[97,87096,878],{"class":103},[97,87098,87099],{"class":111},"open",[97,87101,13755],{"class":319},[97,87103,59102],{"class":319},[97,87105,54636],{"class":103},[97,87107,87108],{"class":99,"line":17040},[97,87109,87110],{"class":191},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[97,87112,87113,87115,87118,87120,87122,87124,87126,87129],{"class":99,"line":17045},[97,87114,58412],{"class":319},[97,87116,87117],{"class":370}," box",[97,87119,13755],{"class":319},[97,87121,54580],{"class":103},[97,87123,54583],{"class":111},[97,87125,323],{"class":103},[97,87127,87128],{"class":118},"'.modal'",[97,87130,329],{"class":103},[97,87132,87133],{"class":99,"line":17059},[97,87134,87135],{"class":191},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[97,87137,87138,87141,87143,87146,87148],{"class":99,"line":17071},[97,87139,87140],{"class":103},"      box ",[97,87142,1907],{"class":319},[97,87144,87145],{"class":103}," box.",[97,87147,57190],{"class":111},[97,87149,2167],{"class":103},[97,87151,87152],{"class":99,"line":17076},[97,87153,87154],{"class":191},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[97,87156,87157],{"class":99,"line":17089},[97,87158,87159],{"class":191},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[97,87161,87162],{"class":99,"line":17094},[97,87163,87164],{"class":191},"      \u002F\u002F append可以增加对象\n",[97,87166,87167,87170,87173,87175,87178],{"class":99,"line":17099},[97,87168,87169],{"class":103},"      document.body.",[97,87171,87172],{"class":111},"append",[97,87174,323],{"class":103},[97,87176,87177],{"class":370},"this",[97,87179,87180],{"class":103},".modalBox)\n",[97,87182,87183],{"class":99,"line":17104},[97,87184,2591],{"emptyLinePlaceholder":249},[97,87186,87187],{"class":99,"line":17117},[97,87188,87189],{"class":191},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[97,87191,87192,87194,87197,87199,87201,87204,87206,87208,87210,87212,87215,87217],{"class":99,"line":17122},[97,87193,70235],{"class":370},[97,87195,87196],{"class":103},".modalBox.",[97,87198,54583],{"class":111},[97,87200,323],{"class":103},[97,87202,87203],{"class":118},"'i'",[97,87205,31016],{"class":103},[97,87207,57997],{"class":111},[97,87209,323],{"class":103},[97,87211,58002],{"class":118},[97,87213,87214],{"class":103},", () ",[97,87216,84906],{"class":319},[97,87218,15762],{"class":103},[97,87220,87221],{"class":99,"line":32823},[97,87222,87223],{"class":191},"        \u002F\u002F 这个地方需要用到箭头函数\n",[97,87225,87226],{"class":99,"line":32829},[97,87227,87228],{"class":191},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[97,87230,87231],{"class":99,"line":32835},[97,87232,87233],{"class":191},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[97,87235,87236,87238,87240,87243],{"class":99,"line":32841},[97,87237,64910],{"class":370},[97,87239,878],{"class":103},[97,87241,87242],{"class":111},"close",[97,87244,2167],{"class":103},[97,87246,87247],{"class":99,"line":32847},[97,87248,64999],{"class":103},[97,87250,87251],{"class":99,"line":32858},[97,87252,2378],{"class":103},[97,87254,87255],{"class":99,"line":32864},[97,87256,2591],{"emptyLinePlaceholder":249},[97,87258,87259],{"class":99,"line":32884},[97,87260,87261],{"class":191},"    \u002F\u002F 测试一下 点击 删除按钮\n",[97,87263,87264,87266,87268,87270,87273,87275,87277,87279,87281,87283,87285],{"class":99,"line":32890},[97,87265,52591],{"class":103},[97,87267,54583],{"class":111},[97,87269,323],{"class":103},[97,87271,87272],{"class":118},"'#delete'",[97,87274,31016],{"class":103},[97,87276,57997],{"class":111},[97,87278,323],{"class":103},[97,87280,58002],{"class":118},[97,87282,87214],{"class":103},[97,87284,84906],{"class":319},[97,87286,15762],{"class":103},[97,87288,87289],{"class":99,"line":32901},[97,87290,87291],{"class":191},"      \u002F\u002F 先调用Model构造函数\n",[97,87293,87294,87296,87299,87301,87303,87305,87307,87310,87312,87315],{"class":99,"line":32907},[97,87295,58412],{"class":319},[97,87297,87298],{"class":370}," del",[97,87300,13755],{"class":319},[97,87302,11769],{"class":319},[97,87304,86955],{"class":111},[97,87306,323],{"class":103},[97,87308,87309],{"class":118},"'温馨的提示'",[97,87311,12626],{"class":103},[97,87313,87314],{"class":118},"'您没有删除权限操作'",[97,87316,329],{"class":103},[97,87318,87319],{"class":99,"line":32913},[97,87320,87321],{"class":191},"      \u002F\u002F 实例对象调用open方法\n",[97,87323,87324,87327,87329],{"class":99,"line":32919},[97,87325,87326],{"class":103},"      del.",[97,87328,87099],{"class":111},[97,87330,2167],{"class":103},[97,87332,87333],{"class":99,"line":32925},[97,87334,33651],{"class":103},[97,87336,87337],{"class":99,"line":32931},[97,87338,87339],{"class":191},"    \u002F\u002F 测试一下 点击 登录按钮\n",[97,87341,87342,87344,87346,87348,87351,87353,87355,87357,87359,87361,87363],{"class":99,"line":32937},[97,87343,52591],{"class":103},[97,87345,54583],{"class":111},[97,87347,323],{"class":103},[97,87349,87350],{"class":118},"'#login'",[97,87352,31016],{"class":103},[97,87354,57997],{"class":111},[97,87356,323],{"class":103},[97,87358,58002],{"class":118},[97,87360,87214],{"class":103},[97,87362,84906],{"class":319},[97,87364,15762],{"class":103},[97,87366,87367],{"class":99,"line":32943},[97,87368,87291],{"class":191},[97,87370,87371,87373,87376,87378,87380,87382,87384,87387,87389,87392],{"class":99,"line":32963},[97,87372,58412],{"class":319},[97,87374,87375],{"class":370}," log",[97,87377,13755],{"class":319},[97,87379,11769],{"class":319},[97,87381,86955],{"class":111},[97,87383,323],{"class":103},[97,87385,87386],{"class":118},"'友情提示'",[97,87388,12626],{"class":103},[97,87390,87391],{"class":118},"'您还没有登录呢'",[97,87393,329],{"class":103},[97,87395,87396],{"class":99,"line":32969},[97,87397,87321],{"class":191},[97,87399,87400,87403,87405],{"class":99,"line":32985},[97,87401,87402],{"class":103},"      log.",[97,87404,87099],{"class":111},[97,87406,2167],{"class":103},[97,87408,87409],{"class":99,"line":32991},[97,87410,33651],{"class":103},[97,87412,87413],{"class":99,"line":33005},[97,87414,87415],{"class":191},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[97,87417,87418,87420,87422,87424,87426,87428,87430,87432],{"class":99,"line":33011},[97,87419,87090],{"class":370},[97,87421,878],{"class":103},[97,87423,85763],{"class":370},[97,87425,878],{"class":103},[97,87427,87242],{"class":111},[97,87429,13755],{"class":319},[97,87431,59102],{"class":319},[97,87433,54636],{"class":103},[97,87435,87436,87438,87440,87442],{"class":99,"line":33026},[97,87437,70235],{"class":370},[97,87439,87196],{"class":103},[97,87441,57190],{"class":111},[97,87443,2167],{"class":103},[97,87445,87446],{"class":99,"line":33032},[97,87447,2378],{"class":103},[97,87449,87450,87452,87454],{"class":99,"line":33041},[97,87451,52601],{"class":103},[97,87453,51997],{"class":107},[97,87455,130],{"class":103},[97,87457,87458,87460,87462],{"class":99,"line":33047},[97,87459,51969],{"class":103},[97,87461,51984],{"class":107},[97,87463,130],{"class":103},[97,87465,87466],{"class":99,"line":33056},[97,87467,2591],{"emptyLinePlaceholder":249},[97,87469,87470,87472,87474],{"class":99,"line":33062},[97,87471,51969],{"class":103},[97,87473,50825],{"class":107},[97,87475,130],{"class":103},[24,87477,87478],{},[19,87479],{"alt":92,"src":87480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87482,87484],{"id":87483},"_414-深浅拷贝","4.14 深浅拷贝",[48,87486,87488],{"id":87487},"_4141-浅拷贝","4.14.1 浅拷贝",[24,87490,87491],{},[19,87492],{"alt":92,"src":87493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[24,87495,87496],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[24,87498,87499],{},[19,87500],{"alt":92,"src":87501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[24,87503,87504],{},[19,87505],{"alt":92,"src":87506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[24,87508,87509],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[24,87511,87512],{},[19,87513],{"alt":92,"src":87514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[24,87516,11523],{},[24,87518,87519],{},[19,87520],{"alt":92,"src":87521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[48,87523,87525],{"id":87524},"_4142-深拷贝","4.14.2 深拷贝",[24,87527,87528],{},"深拷贝：拷贝的是对象，不是地址",[24,87530,87531],{},"常用的三种方法：",[138,87533,87534,87537,87540],{},[70,87535,87536],{},"通过递归实现深拷贝",[70,87538,87539],{},"lodash\u002FcloneDeep",[70,87541,87542],{},"通过JSON.stringify()实现",[160,87544,87546],{"id":87545},"_41421-递归函数","4.14.2.1 递归函数",[24,87548,87549],{},[19,87550],{"alt":92,"src":87551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[138,87553,87554],{},[70,87555,87556],{},"死递归占溢出：",[87,87558,87560],{"className":53251,"code":87559,"language":53253,"meta":92,"style":92},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[94,87561,87562,87570,87578,87582,87587,87591,87596,87604],{"__ignoreMap":92},[97,87563,87564,87566,87568],{"class":99,"line":100},[97,87565,104],{"class":103},[97,87567,51984],{"class":107},[97,87569,130],{"class":103},[97,87571,87572,87574,87576],{"class":99,"line":195},[97,87573,52328],{"class":103},[97,87575,51997],{"class":107},[97,87577,130],{"class":103},[97,87579,87580],{"class":99,"line":241},[97,87581,77327],{"class":103},[97,87583,87584],{"class":99,"line":1387},[97,87585,87586],{"class":103},"      fn()\n",[97,87588,87589],{"class":99,"line":1393},[97,87590,2378],{"class":103},[97,87592,87593],{"class":99,"line":1407},[97,87594,87595],{"class":103},"    fn()\n",[97,87597,87598,87600,87602],{"class":99,"line":1413},[97,87599,52601],{"class":103},[97,87601,51997],{"class":107},[97,87603,130],{"class":103},[97,87605,87606,87608,87610],{"class":99,"line":1504},[97,87607,51969],{"class":103},[97,87609,51984],{"class":107},[97,87611,130],{"class":103},[138,87613,87614],{"start":195},[70,87615,87616],{},"递归函数要加判断条件：",[24,87618,87619],{},[19,87620],{"alt":92,"src":87621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[138,87623,87624],{"start":241},[70,87625,87626],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[87,87628,87630],{"className":50823,"code":87629,"language":50825,"meta":92,"style":92},"\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",[94,87631,87632,87642,87656,87660,87668,87682,87702,87714,87722,87726,87734,87746,87754,87762,87787,87799,87803,87810,87818,87826,87830],{"__ignoreMap":92},[97,87633,87634,87636,87638,87640],{"class":99,"line":100},[97,87635,51487],{"class":103},[97,87637,51490],{"class":107},[97,87639,51493],{"class":111},[97,87641,130],{"class":103},[97,87643,87644,87646,87648,87650,87652,87654],{"class":99,"line":195},[97,87645,104],{"class":103},[97,87647,50825],{"class":107},[97,87649,51504],{"class":111},[97,87651,115],{"class":103},[97,87653,51509],{"class":118},[97,87655,130],{"class":103},[97,87657,87658],{"class":99,"line":241},[97,87659,2591],{"emptyLinePlaceholder":249},[97,87661,87662,87664,87666],{"class":99,"line":1387},[97,87663,104],{"class":103},[97,87665,51522],{"class":107},[97,87667,130],{"class":103},[97,87669,87670,87672,87674,87676,87678,87680],{"class":99,"line":1393},[97,87671,52328],{"class":103},[97,87673,108],{"class":107},[97,87675,51534],{"class":111},[97,87677,115],{"class":103},[97,87679,51539],{"class":118},[97,87681,130],{"class":103},[97,87683,87684,87686,87688,87690,87692,87694,87696,87698,87700],{"class":99,"line":1407},[97,87685,52328],{"class":103},[97,87687,108],{"class":107},[97,87689,112],{"class":111},[97,87691,115],{"class":103},[97,87693,119],{"class":118},[97,87695,122],{"class":111},[97,87697,115],{"class":103},[97,87699,127],{"class":118},[97,87701,130],{"class":103},[97,87703,87704,87706,87708,87710,87712],{"class":99,"line":1413},[97,87705,52328],{"class":103},[97,87707,51591],{"class":107},[97,87709,51594],{"class":103},[97,87711,51591],{"class":107},[97,87713,130],{"class":103},[97,87715,87716,87718,87720],{"class":99,"line":1504},[97,87717,51969],{"class":103},[97,87719,51522],{"class":107},[97,87721,130],{"class":103},[97,87723,87724],{"class":99,"line":1510},[97,87725,2591],{"emptyLinePlaceholder":249},[97,87727,87728,87730,87732],{"class":99,"line":1522},[97,87729,104],{"class":103},[97,87731,51984],{"class":107},[97,87733,130],{"class":103},[97,87735,87736,87738,87740,87742,87744],{"class":99,"line":1804},[97,87737,52328],{"class":103},[97,87739,51795],{"class":107},[97,87741,55498],{"class":103},[97,87743,51795],{"class":107},[97,87745,130],{"class":103},[97,87747,87748,87750,87752],{"class":99,"line":1809},[97,87749,52328],{"class":103},[97,87751,51997],{"class":107},[97,87753,130],{"class":103},[97,87755,87756,87758,87760],{"class":99,"line":1815},[97,87757,70268],{"class":319},[97,87759,73957],{"class":111},[97,87761,11044],{"class":103},[97,87763,87764,87766,87768,87770,87772,87774,87776,87778,87780,87782,87785],{"class":99,"line":1820},[97,87765,55955],{"class":103},[97,87767,54583],{"class":111},[97,87769,323],{"class":103},[97,87771,82115],{"class":118},[97,87773,74433],{"class":103},[97,87775,115],{"class":319},[97,87777,11769],{"class":319},[97,87779,73973],{"class":111},[97,87781,17451],{"class":103},[97,87783,87784],{"class":111},"toLocaleString",[97,87786,2167],{"class":103},[97,87788,87789,87792,87795,87797],{"class":99,"line":1834},[97,87790,87791],{"class":111},"      setTimeout",[97,87793,87794],{"class":103},"(getTime, ",[97,87796,6601],{"class":370},[97,87798,329],{"class":103},[97,87800,87801],{"class":99,"line":1839},[97,87802,2378],{"class":103},[97,87804,87805,87808],{"class":99,"line":1845},[97,87806,87807],{"class":111},"    getTime",[97,87809,2167],{"class":103},[97,87811,87812,87814,87816],{"class":99,"line":1866},[97,87813,52601],{"class":103},[97,87815,51997],{"class":107},[97,87817,130],{"class":103},[97,87819,87820,87822,87824],{"class":99,"line":1871},[97,87821,51969],{"class":103},[97,87823,51984],{"class":107},[97,87825,130],{"class":103},[97,87827,87828],{"class":99,"line":1885},[97,87829,2591],{"emptyLinePlaceholder":249},[97,87831,87832,87834,87836],{"class":99,"line":1890},[97,87833,51969],{"class":103},[97,87835,50825],{"class":107},[97,87837,130],{"class":103},[24,87839,87840],{},[19,87841],{"alt":92,"src":87842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[138,87844,87845],{"start":1387},[70,87846,87536],{},[24,87848,87849],{},[19,87850],{"alt":92,"src":87851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[24,87853,87854],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[24,87856,39379],{},[24,87858,87859],{},"这个是简易版的递归函数深拷贝",[24,87861,87862],{},"一定要注意先数组再对象，因为万物皆可对象",[87,87864,87866],{"className":50823,"code":87865,"language":50825,"meta":92,"style":92},"\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",[94,87867,87868,87878,87892,87896,87904,87918,87938,87950,87958,87962,87970,87978,87988,87997,88005,88021,88025,88033,88037,88041,88053,88058,88077,88093,88098,88103,88108,88123,88128,88133,88142,88150,88167,88175,88181,88189,88194,88199,88208,88212,88216,88220,88231,88240,88250,88264,88274,88282,88290,88298,88302],{"__ignoreMap":92},[97,87869,87870,87872,87874,87876],{"class":99,"line":100},[97,87871,51487],{"class":103},[97,87873,51490],{"class":107},[97,87875,51493],{"class":111},[97,87877,130],{"class":103},[97,87879,87880,87882,87884,87886,87888,87890],{"class":99,"line":195},[97,87881,104],{"class":103},[97,87883,50825],{"class":107},[97,87885,51504],{"class":111},[97,87887,115],{"class":103},[97,87889,51509],{"class":118},[97,87891,130],{"class":103},[97,87893,87894],{"class":99,"line":241},[97,87895,2591],{"emptyLinePlaceholder":249},[97,87897,87898,87900,87902],{"class":99,"line":1387},[97,87899,104],{"class":103},[97,87901,51522],{"class":107},[97,87903,130],{"class":103},[97,87905,87906,87908,87910,87912,87914,87916],{"class":99,"line":1393},[97,87907,52328],{"class":103},[97,87909,108],{"class":107},[97,87911,51534],{"class":111},[97,87913,115],{"class":103},[97,87915,51539],{"class":118},[97,87917,130],{"class":103},[97,87919,87920,87922,87924,87926,87928,87930,87932,87934,87936],{"class":99,"line":1407},[97,87921,52328],{"class":103},[97,87923,108],{"class":107},[97,87925,112],{"class":111},[97,87927,115],{"class":103},[97,87929,119],{"class":118},[97,87931,122],{"class":111},[97,87933,115],{"class":103},[97,87935,127],{"class":118},[97,87937,130],{"class":103},[97,87939,87940,87942,87944,87946,87948],{"class":99,"line":1413},[97,87941,52328],{"class":103},[97,87943,51591],{"class":107},[97,87945,51594],{"class":103},[97,87947,51591],{"class":107},[97,87949,130],{"class":103},[97,87951,87952,87954,87956],{"class":99,"line":1504},[97,87953,51969],{"class":103},[97,87955,51522],{"class":107},[97,87957,130],{"class":103},[97,87959,87960],{"class":99,"line":1510},[97,87961,2591],{"emptyLinePlaceholder":249},[97,87963,87964,87966,87968],{"class":99,"line":1522},[97,87965,104],{"class":103},[97,87967,51984],{"class":107},[97,87969,130],{"class":103},[97,87971,87972,87974,87976],{"class":99,"line":1804},[97,87973,52328],{"class":103},[97,87975,51997],{"class":107},[97,87977,130],{"class":103},[97,87979,87980,87982,87984,87986],{"class":99,"line":1809},[97,87981,11412],{"class":319},[97,87983,70155],{"class":370},[97,87985,13755],{"class":319},[97,87987,15762],{"class":103},[97,87989,87990,87992,87995],{"class":99,"line":1815},[97,87991,71800],{"class":103},[97,87993,87994],{"class":118},"'pink'",[97,87996,31656],{"class":103},[97,87998,87999,88001,88003],{"class":99,"line":1820},[97,88000,71810],{"class":103},[97,88002,970],{"class":370},[97,88004,31656],{"class":103},[97,88006,88007,88010,88013,88015,88018],{"class":99,"line":1834},[97,88008,88009],{"class":103},"      hobby: [",[97,88011,88012],{"class":118},"'乒乓球'",[97,88014,12626],{"class":103},[97,88016,88017],{"class":118},"'足球'",[97,88019,88020],{"class":103},"],\n",[97,88022,88023],{"class":99,"line":1839},[97,88024,78056],{"class":103},[97,88026,88027,88030],{"class":99,"line":1845},[97,88028,88029],{"class":103},"        baby: ",[97,88031,88032],{"class":118},"'小pink'\n",[97,88034,88035],{"class":99,"line":1866},[97,88036,52582],{"class":103},[97,88038,88039],{"class":99,"line":1871},[97,88040,2378],{"class":103},[97,88042,88043,88045,88048,88050],{"class":99,"line":1885},[97,88044,11412],{"class":319},[97,88046,88047],{"class":370}," o",[97,88049,13755],{"class":319},[97,88051,88052],{"class":103}," {}\n",[97,88054,88055],{"class":99,"line":1890},[97,88056,88057],{"class":191},"    \u002F\u002F 拷贝函数\n",[97,88059,88060,88062,88065,88067,88070,88072,88075],{"class":99,"line":1919},[97,88061,70268],{"class":319},[97,88063,88064],{"class":111}," deepCopy",[97,88066,323],{"class":103},[97,88068,88069],{"class":5407},"newObj",[97,88071,12626],{"class":103},[97,88073,88074],{"class":5407},"oldObj",[97,88076,12633],{"class":103},[97,88078,88079,88081,88083,88085,88088,88090],{"class":99,"line":1924},[97,88080,52468],{"class":319},[97,88082,1850],{"class":103},[97,88084,52031],{"class":319},[97,88086,88087],{"class":103}," k ",[97,88089,26233],{"class":319},[97,88091,88092],{"class":103}," oldObj) {\n",[97,88094,88095],{"class":99,"line":1941},[97,88096,88097],{"class":191},"        \u002F\u002F 处理数组的问题\n",[97,88099,88100],{"class":99,"line":1946},[97,88101,88102],{"class":191},"        \u002F\u002F 判断是否属于数组\n",[97,88104,88105],{"class":99,"line":1951},[97,88106,88107],{"class":191},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[97,88109,88110,88112,88115,88118,88121],{"class":99,"line":1956},[97,88111,2688],{"class":319},[97,88113,88114],{"class":103}," (oldObj[k] ",[97,88116,88117],{"class":319},"instanceof",[97,88119,88120],{"class":111}," Array",[97,88122,12633],{"class":103},[97,88124,88125],{"class":99,"line":1970},[97,88126,88127],{"class":191},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[97,88129,88130],{"class":99,"line":1975},[97,88131,88132],{"class":191},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[97,88134,88135,88138,88140],{"class":99,"line":2768},[97,88136,88137],{"class":103},"          newObj[k] ",[97,88139,115],{"class":319},[97,88141,52022],{"class":103},[97,88143,88144,88147],{"class":99,"line":2782},[97,88145,88146],{"class":111},"          deepCopy",[97,88148,88149],{"class":103},"(newObj[k], oldObj[k])\n",[97,88151,88152,88154,88156,88158,88160,88162,88165],{"class":99,"line":2790},[97,88153,80264],{"class":103},[97,88155,1893],{"class":319},[97,88157,1896],{"class":319},[97,88159,88114],{"class":103},[97,88161,88117],{"class":319},[97,88163,88164],{"class":111}," Object",[97,88166,12633],{"class":103},[97,88168,88169,88171,88173],{"class":99,"line":2795},[97,88170,88137],{"class":103},[97,88172,115],{"class":319},[97,88174,88052],{"class":103},[97,88176,88177,88179],{"class":99,"line":2801},[97,88178,88146],{"class":111},[97,88180,88149],{"class":103},[97,88182,88183,88185,88187],{"class":99,"line":2807},[97,88184,80264],{"class":103},[97,88186,1893],{"class":319},[97,88188,15762],{"class":103},[97,88190,88191],{"class":99,"line":2812},[97,88192,88193],{"class":191},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[97,88195,88196],{"class":99,"line":8139},[97,88197,88198],{"class":191},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[97,88200,88201,88203,88205],{"class":99,"line":8163},[97,88202,88137],{"class":103},[97,88204,115],{"class":319},[97,88206,88207],{"class":103}," oldObj[k]\n",[97,88209,88210],{"class":99,"line":8168},[97,88211,2720],{"class":103},[97,88213,88214],{"class":99,"line":8174},[97,88215,52582],{"class":103},[97,88217,88218],{"class":99,"line":8201},[97,88219,2378],{"class":103},[97,88221,88222,88225,88228],{"class":99,"line":8206},[97,88223,88224],{"class":111},"    deepCopy",[97,88226,88227],{"class":103},"(o, obj) ",[97,88229,88230],{"class":191},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[97,88232,88233,88235,88237],{"class":99,"line":8212},[97,88234,73937],{"class":103},[97,88236,58431],{"class":111},[97,88238,88239],{"class":103},"(o)\n",[97,88241,88242,88245,88247],{"class":99,"line":8224},[97,88243,88244],{"class":103},"    o.age ",[97,88246,115],{"class":319},[97,88248,88249],{"class":370}," 20\n",[97,88251,88252,88255,88257,88259,88261],{"class":99,"line":8236},[97,88253,88254],{"class":103},"    o.hobby[",[97,88256,511],{"class":370},[97,88258,4634],{"class":103},[97,88260,115],{"class":319},[97,88262,88263],{"class":118}," '篮球'\n",[97,88265,88266,88269,88271],{"class":99,"line":8248},[97,88267,88268],{"class":103},"    o.family ",[97,88270,115],{"class":319},[97,88272,88273],{"class":118}," '老pink'\n",[97,88275,88276,88278,88280],{"class":99,"line":9907},[97,88277,73937],{"class":103},[97,88279,58431],{"class":111},[97,88281,70220],{"class":103},[97,88283,88284,88286,88288],{"class":99,"line":9932},[97,88285,52601],{"class":103},[97,88287,51997],{"class":107},[97,88289,130],{"class":103},[97,88291,88292,88294,88296],{"class":99,"line":9955},[97,88293,51969],{"class":103},[97,88295,51984],{"class":107},[97,88297,130],{"class":103},[97,88299,88300],{"class":99,"line":9979},[97,88301,2591],{"emptyLinePlaceholder":249},[97,88303,88304,88306,88308],{"class":99,"line":9984},[97,88305,51969],{"class":103},[97,88307,50825],{"class":107},[97,88309,130],{"class":103},[24,88311,88312],{},[19,88313],{"alt":92,"src":88314},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[160,88316,88318,88319],{"id":88317},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[469,88320,88321],{},"js库lodash里面cloneDeep内部实现了深拷贝",[24,88323,88324],{},[558,88325,88326],{"href":88326,"rel":88327},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24054],[24,88329,88330],{},"lodash里边的方法都要加上一个下划线_",[24,88332,88333],{},"_.cloneDeep()",[87,88335,88337],{"className":50823,"code":88336,"language":50825,"meta":92,"style":92},"\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",[94,88338,88339,88349,88363,88367,88375,88389,88409,88421,88429,88433,88441,88446,88465,88473,88483,88491,88499,88511,88515,88521,88525,88529,88545,88553,88562,88570,88578,88586,88590],{"__ignoreMap":92},[97,88340,88341,88343,88345,88347],{"class":99,"line":100},[97,88342,51487],{"class":103},[97,88344,51490],{"class":107},[97,88346,51493],{"class":111},[97,88348,130],{"class":103},[97,88350,88351,88353,88355,88357,88359,88361],{"class":99,"line":195},[97,88352,104],{"class":103},[97,88354,50825],{"class":107},[97,88356,51504],{"class":111},[97,88358,115],{"class":103},[97,88360,51509],{"class":118},[97,88362,130],{"class":103},[97,88364,88365],{"class":99,"line":241},[97,88366,2591],{"emptyLinePlaceholder":249},[97,88368,88369,88371,88373],{"class":99,"line":1387},[97,88370,104],{"class":103},[97,88372,51522],{"class":107},[97,88374,130],{"class":103},[97,88376,88377,88379,88381,88383,88385,88387],{"class":99,"line":1393},[97,88378,52328],{"class":103},[97,88380,108],{"class":107},[97,88382,51534],{"class":111},[97,88384,115],{"class":103},[97,88386,51539],{"class":118},[97,88388,130],{"class":103},[97,88390,88391,88393,88395,88397,88399,88401,88403,88405,88407],{"class":99,"line":1407},[97,88392,52328],{"class":103},[97,88394,108],{"class":107},[97,88396,112],{"class":111},[97,88398,115],{"class":103},[97,88400,119],{"class":118},[97,88402,122],{"class":111},[97,88404,115],{"class":103},[97,88406,127],{"class":118},[97,88408,130],{"class":103},[97,88410,88411,88413,88415,88417,88419],{"class":99,"line":1413},[97,88412,52328],{"class":103},[97,88414,51591],{"class":107},[97,88416,51594],{"class":103},[97,88418,51591],{"class":107},[97,88420,130],{"class":103},[97,88422,88423,88425,88427],{"class":99,"line":1504},[97,88424,51969],{"class":103},[97,88426,51522],{"class":107},[97,88428,130],{"class":103},[97,88430,88431],{"class":99,"line":1510},[97,88432,2591],{"emptyLinePlaceholder":249},[97,88434,88435,88437,88439],{"class":99,"line":1522},[97,88436,104],{"class":103},[97,88438,51984],{"class":107},[97,88440,130],{"class":103},[97,88442,88443],{"class":99,"line":1804},[97,88444,88445],{"class":191},"  \u003C!-- 先引用这个库 -->\n",[97,88447,88448,88450,88452,88454,88456,88459,88461,88463],{"class":99,"line":1809},[97,88449,52328],{"class":103},[97,88451,51997],{"class":107},[97,88453,55423],{"class":111},[97,88455,115],{"class":103},[97,88457,88458],{"class":118},"\"lodash.min.js\"",[97,88460,55498],{"class":103},[97,88462,51997],{"class":107},[97,88464,130],{"class":103},[97,88466,88467,88469,88471],{"class":99,"line":1815},[97,88468,52328],{"class":103},[97,88470,51997],{"class":107},[97,88472,130],{"class":103},[97,88474,88475,88477,88479,88481],{"class":99,"line":1820},[97,88476,11412],{"class":319},[97,88478,70155],{"class":370},[97,88480,13755],{"class":319},[97,88482,15762],{"class":103},[97,88484,88485,88487,88489],{"class":99,"line":1834},[97,88486,71800],{"class":103},[97,88488,87994],{"class":118},[97,88490,31656],{"class":103},[97,88492,88493,88495,88497],{"class":99,"line":1839},[97,88494,71810],{"class":103},[97,88496,970],{"class":370},[97,88498,31656],{"class":103},[97,88500,88501,88503,88505,88507,88509],{"class":99,"line":1845},[97,88502,88009],{"class":103},[97,88504,88012],{"class":118},[97,88506,12626],{"class":103},[97,88508,88017],{"class":118},[97,88510,88020],{"class":103},[97,88512,88513],{"class":99,"line":1866},[97,88514,78056],{"class":103},[97,88516,88517,88519],{"class":99,"line":1871},[97,88518,88029],{"class":103},[97,88520,88032],{"class":118},[97,88522,88523],{"class":99,"line":1885},[97,88524,52582],{"class":103},[97,88526,88527],{"class":99,"line":1890},[97,88528,2378],{"class":103},[97,88530,88531,88533,88535,88537,88540,88543],{"class":99,"line":1919},[97,88532,11412],{"class":319},[97,88534,88047],{"class":370},[97,88536,13755],{"class":319},[97,88538,88539],{"class":103}," _.",[97,88541,88542],{"class":111},"cloneDeep",[97,88544,70220],{"class":103},[97,88546,88547,88549,88551],{"class":99,"line":1924},[97,88548,73937],{"class":103},[97,88550,58431],{"class":111},[97,88552,88239],{"class":103},[97,88554,88555,88558,88560],{"class":99,"line":1941},[97,88556,88557],{"class":103},"    o.family.baby ",[97,88559,115],{"class":319},[97,88561,88273],{"class":118},[97,88563,88564,88566,88568],{"class":99,"line":1946},[97,88565,73937],{"class":103},[97,88567,58431],{"class":111},[97,88569,70220],{"class":103},[97,88571,88572,88574,88576],{"class":99,"line":1951},[97,88573,52601],{"class":103},[97,88575,51997],{"class":107},[97,88577,130],{"class":103},[97,88579,88580,88582,88584],{"class":99,"line":1956},[97,88581,51969],{"class":103},[97,88583,51984],{"class":107},[97,88585,130],{"class":103},[97,88587,88588],{"class":99,"line":1970},[97,88589,2591],{"emptyLinePlaceholder":249},[97,88591,88592,88594,88596],{"class":99,"line":1975},[97,88593,51969],{"class":103},[97,88595,50825],{"class":107},[97,88597,130],{"class":103},[24,88599,88600],{},[19,88601],{"alt":92,"src":88602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[160,88604,88606],{"id":88605},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[87,88608,88610],{"className":50823,"code":88609,"language":50825,"meta":92,"style":92},"\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",[94,88611,88612,88622,88636,88640,88648,88662,88682,88694,88702,88706,88714,88722,88732,88740,88748,88760,88764,88770,88774,88778,88783,88788,88793,88819,88827,88836,88844,88852,88860,88864],{"__ignoreMap":92},[97,88613,88614,88616,88618,88620],{"class":99,"line":100},[97,88615,51487],{"class":103},[97,88617,51490],{"class":107},[97,88619,51493],{"class":111},[97,88621,130],{"class":103},[97,88623,88624,88626,88628,88630,88632,88634],{"class":99,"line":195},[97,88625,104],{"class":103},[97,88627,50825],{"class":107},[97,88629,51504],{"class":111},[97,88631,115],{"class":103},[97,88633,51509],{"class":118},[97,88635,130],{"class":103},[97,88637,88638],{"class":99,"line":241},[97,88639,2591],{"emptyLinePlaceholder":249},[97,88641,88642,88644,88646],{"class":99,"line":1387},[97,88643,104],{"class":103},[97,88645,51522],{"class":107},[97,88647,130],{"class":103},[97,88649,88650,88652,88654,88656,88658,88660],{"class":99,"line":1393},[97,88651,52328],{"class":103},[97,88653,108],{"class":107},[97,88655,51534],{"class":111},[97,88657,115],{"class":103},[97,88659,51539],{"class":118},[97,88661,130],{"class":103},[97,88663,88664,88666,88668,88670,88672,88674,88676,88678,88680],{"class":99,"line":1407},[97,88665,52328],{"class":103},[97,88667,108],{"class":107},[97,88669,112],{"class":111},[97,88671,115],{"class":103},[97,88673,119],{"class":118},[97,88675,122],{"class":111},[97,88677,115],{"class":103},[97,88679,127],{"class":118},[97,88681,130],{"class":103},[97,88683,88684,88686,88688,88690,88692],{"class":99,"line":1413},[97,88685,52328],{"class":103},[97,88687,51591],{"class":107},[97,88689,51594],{"class":103},[97,88691,51591],{"class":107},[97,88693,130],{"class":103},[97,88695,88696,88698,88700],{"class":99,"line":1504},[97,88697,51969],{"class":103},[97,88699,51522],{"class":107},[97,88701,130],{"class":103},[97,88703,88704],{"class":99,"line":1510},[97,88705,2591],{"emptyLinePlaceholder":249},[97,88707,88708,88710,88712],{"class":99,"line":1522},[97,88709,104],{"class":103},[97,88711,51984],{"class":107},[97,88713,130],{"class":103},[97,88715,88716,88718,88720],{"class":99,"line":1804},[97,88717,52328],{"class":103},[97,88719,51997],{"class":107},[97,88721,130],{"class":103},[97,88723,88724,88726,88728,88730],{"class":99,"line":1809},[97,88725,11412],{"class":319},[97,88727,70155],{"class":370},[97,88729,13755],{"class":319},[97,88731,15762],{"class":103},[97,88733,88734,88736,88738],{"class":99,"line":1815},[97,88735,71800],{"class":103},[97,88737,87994],{"class":118},[97,88739,31656],{"class":103},[97,88741,88742,88744,88746],{"class":99,"line":1820},[97,88743,71810],{"class":103},[97,88745,970],{"class":370},[97,88747,31656],{"class":103},[97,88749,88750,88752,88754,88756,88758],{"class":99,"line":1834},[97,88751,88009],{"class":103},[97,88753,88012],{"class":118},[97,88755,12626],{"class":103},[97,88757,88017],{"class":118},[97,88759,88020],{"class":103},[97,88761,88762],{"class":99,"line":1839},[97,88763,78056],{"class":103},[97,88765,88766,88768],{"class":99,"line":1845},[97,88767,88029],{"class":103},[97,88769,88032],{"class":118},[97,88771,88772],{"class":99,"line":1866},[97,88773,52582],{"class":103},[97,88775,88776],{"class":99,"line":1871},[97,88777,2378],{"class":103},[97,88779,88780],{"class":99,"line":1885},[97,88781,88782],{"class":191},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[97,88784,88785],{"class":99,"line":1890},[97,88786,88787],{"class":191},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[97,88789,88790],{"class":99,"line":1919},[97,88791,88792],{"class":191},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[97,88794,88795,88797,88799,88801,88804,88806,88809,88811,88813,88815,88817],{"class":99,"line":1924},[97,88796,11412],{"class":319},[97,88798,88047],{"class":370},[97,88800,13755],{"class":319},[97,88802,88803],{"class":370}," JSON",[97,88805,878],{"class":103},[97,88807,88808],{"class":111},"parse",[97,88810,323],{"class":103},[97,88812,71848],{"class":370},[97,88814,878],{"class":103},[97,88816,71853],{"class":111},[97,88818,71856],{"class":103},[97,88820,88821,88823,88825],{"class":99,"line":1941},[97,88822,73937],{"class":103},[97,88824,58431],{"class":111},[97,88826,88239],{"class":103},[97,88828,88829,88831,88833],{"class":99,"line":1946},[97,88830,88557],{"class":103},[97,88832,115],{"class":319},[97,88834,88835],{"class":118}," '123'\n",[97,88837,88838,88840,88842],{"class":99,"line":1951},[97,88839,73937],{"class":103},[97,88841,58431],{"class":111},[97,88843,70220],{"class":103},[97,88845,88846,88848,88850],{"class":99,"line":1956},[97,88847,52601],{"class":103},[97,88849,51997],{"class":107},[97,88851,130],{"class":103},[97,88853,88854,88856,88858],{"class":99,"line":1970},[97,88855,51969],{"class":103},[97,88857,51984],{"class":107},[97,88859,130],{"class":103},[97,88861,88862],{"class":99,"line":1975},[97,88863,2591],{"emptyLinePlaceholder":249},[97,88865,88866,88868,88870],{"class":99,"line":2768},[97,88867,51969],{"class":103},[97,88869,50825],{"class":107},[97,88871,130],{"class":103},[24,88873,88874],{},[19,88875],{"alt":92,"src":88876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88878,88880],{"id":88879},"_415-异常处理","4.15 异常处理",[138,88882,88883],{},[70,88884,88885],{},"throw抛异常",[24,88887,88888],{},[19,88889],{"alt":92,"src":88890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[138,88892,88893],{"start":195},[70,88894,88895],{},"try\u002Fcatch 捕获错误信息",[24,88897,88898],{},[19,88899],{"alt":92,"src":88900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[87,88902,88904],{"className":50823,"code":88903,"language":50825,"meta":92,"style":92},"\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",[94,88905,88906,88916,88930,88934,88942,88956,88976,88988,88996,89000,89008,89020,89028,89037,89044,89049,89068,89077,89088,89093,89103,89108,89113,89118,89135,89139,89144,89151,89163,89167,89179,89183,89187,89192,89197,89204,89212,89220,89224],{"__ignoreMap":92},[97,88907,88908,88910,88912,88914],{"class":99,"line":100},[97,88909,51487],{"class":103},[97,88911,51490],{"class":107},[97,88913,51493],{"class":111},[97,88915,130],{"class":103},[97,88917,88918,88920,88922,88924,88926,88928],{"class":99,"line":195},[97,88919,104],{"class":103},[97,88921,50825],{"class":107},[97,88923,51504],{"class":111},[97,88925,115],{"class":103},[97,88927,51509],{"class":118},[97,88929,130],{"class":103},[97,88931,88932],{"class":99,"line":241},[97,88933,2591],{"emptyLinePlaceholder":249},[97,88935,88936,88938,88940],{"class":99,"line":1387},[97,88937,104],{"class":103},[97,88939,51522],{"class":107},[97,88941,130],{"class":103},[97,88943,88944,88946,88948,88950,88952,88954],{"class":99,"line":1393},[97,88945,52328],{"class":103},[97,88947,108],{"class":107},[97,88949,51534],{"class":111},[97,88951,115],{"class":103},[97,88953,51539],{"class":118},[97,88955,130],{"class":103},[97,88957,88958,88960,88962,88964,88966,88968,88970,88972,88974],{"class":99,"line":1407},[97,88959,52328],{"class":103},[97,88961,108],{"class":107},[97,88963,112],{"class":111},[97,88965,115],{"class":103},[97,88967,119],{"class":118},[97,88969,122],{"class":111},[97,88971,115],{"class":103},[97,88973,127],{"class":118},[97,88975,130],{"class":103},[97,88977,88978,88980,88982,88984,88986],{"class":99,"line":1413},[97,88979,52328],{"class":103},[97,88981,51591],{"class":107},[97,88983,51594],{"class":103},[97,88985,51591],{"class":107},[97,88987,130],{"class":103},[97,88989,88990,88992,88994],{"class":99,"line":1504},[97,88991,51969],{"class":103},[97,88993,51522],{"class":107},[97,88995,130],{"class":103},[97,88997,88998],{"class":99,"line":1510},[97,88999,2591],{"emptyLinePlaceholder":249},[97,89001,89002,89004,89006],{"class":99,"line":1522},[97,89003,104],{"class":103},[97,89005,51984],{"class":107},[97,89007,130],{"class":103},[97,89009,89010,89012,89014,89016,89018],{"class":99,"line":1804},[97,89011,52328],{"class":103},[97,89013,24],{"class":107},[97,89015,53678],{"class":103},[97,89017,24],{"class":107},[97,89019,130],{"class":103},[97,89021,89022,89024,89026],{"class":99,"line":1809},[97,89023,52328],{"class":103},[97,89025,51997],{"class":107},[97,89027,130],{"class":103},[97,89029,89030,89032,89035],{"class":99,"line":1815},[97,89031,70268],{"class":319},[97,89033,89034],{"class":111}," fn",[97,89036,11044],{"class":103},[97,89038,89039,89042],{"class":99,"line":1820},[97,89040,89041],{"class":319},"      try",[97,89043,15762],{"class":103},[97,89045,89046],{"class":99,"line":1834},[97,89047,89048],{"class":191},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[97,89050,89051,89053,89055,89057,89059,89061,89063,89066],{"class":99,"line":1839},[97,89052,61454],{"class":319},[97,89054,7016],{"class":370},[97,89056,13755],{"class":319},[97,89058,54580],{"class":103},[97,89060,54583],{"class":111},[97,89062,323],{"class":103},[97,89064,89065],{"class":118},"'.p'",[97,89067,329],{"class":103},[97,89069,89070,89073,89075],{"class":99,"line":1845},[97,89071,89072],{"class":103},"        p.style.color ",[97,89074,115],{"class":319},[97,89076,67235],{"class":118},[97,89078,89079,89082,89085],{"class":99,"line":1866},[97,89080,89081],{"class":103},"      } ",[97,89083,89084],{"class":319},"catch",[97,89086,89087],{"class":103}," (err) {\n",[97,89089,89090],{"class":99,"line":1871},[97,89091,89092],{"class":191},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[97,89094,89095,89098,89100],{"class":99,"line":1885},[97,89096,89097],{"class":103},"        console.",[97,89099,58431],{"class":111},[97,89101,89102],{"class":103},"(err.message)\n",[97,89104,89105],{"class":99,"line":1890},[97,89106,89107],{"class":191},"        \u002F\u002F 想要中断程序，需要加return\n",[97,89109,89110],{"class":99,"line":1919},[97,89111,89112],{"class":191},"        \u002F\u002F return\n",[97,89114,89115],{"class":99,"line":1924},[97,89116,89117],{"class":191},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[97,89119,89120,89123,89125,89128,89130,89133],{"class":99,"line":1941},[97,89121,89122],{"class":319},"        throw",[97,89124,11769],{"class":319},[97,89126,89127],{"class":111}," Error",[97,89129,323],{"class":103},[97,89131,89132],{"class":118},"'你看看，选择器错误了吧'",[97,89134,329],{"class":103},[97,89136,89137],{"class":99,"line":1946},[97,89138,52582],{"class":103},[97,89140,89141],{"class":99,"line":1951},[97,89142,89143],{"class":191},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[97,89145,89146,89149],{"class":99,"line":1956},[97,89147,89148],{"class":319},"      finally",[97,89150,15762],{"class":103},[97,89152,89153,89156,89158,89161],{"class":99,"line":1970},[97,89154,89155],{"class":111},"        alert",[97,89157,323],{"class":103},[97,89159,89160],{"class":118},"'弹出对话框'",[97,89162,329],{"class":103},[97,89164,89165],{"class":99,"line":1975},[97,89166,52582],{"class":103},[97,89168,89169,89171,89173,89175,89177],{"class":99,"line":2768},[97,89170,58428],{"class":103},[97,89172,58431],{"class":111},[97,89174,323],{"class":103},[97,89176,792],{"class":370},[97,89178,329],{"class":103},[97,89180,89181],{"class":99,"line":2782},[97,89182,2591],{"emptyLinePlaceholder":249},[97,89184,89185],{"class":99,"line":2790},[97,89186,2378],{"class":103},[97,89188,89189],{"class":99,"line":2795},[97,89190,89191],{"class":191},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[97,89193,89194],{"class":99,"line":2801},[97,89195,89196],{"class":191},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[97,89198,89199,89202],{"class":99,"line":2807},[97,89200,89201],{"class":111},"    fn",[97,89203,2167],{"class":103},[97,89205,89206,89208,89210],{"class":99,"line":2812},[97,89207,52601],{"class":103},[97,89209,51997],{"class":107},[97,89211,130],{"class":103},[97,89213,89214,89216,89218],{"class":99,"line":8139},[97,89215,51969],{"class":103},[97,89217,51984],{"class":107},[97,89219,130],{"class":103},[97,89221,89222],{"class":99,"line":8163},[97,89223,2591],{"emptyLinePlaceholder":249},[97,89225,89226,89228,89230],{"class":99,"line":8168},[97,89227,51969],{"class":103},[97,89229,50825],{"class":107},[97,89231,130],{"class":103},[24,89233,89234],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[138,89236,89237],{"start":241},[70,89238,89239],{},"debugger",[24,89241,89242],{},[19,89243],{"alt":92,"src":89244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[24,89246,89247],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89249,89251],{"id":89250},"_416-处理this","4.16 处理this",[48,89253,89255],{"id":89254},"_4161-this的指向","4.16.1 this的指向",[138,89257,89258],{},[70,89259,89260],{},"普通函数的this",[24,89262,89263],{},[19,89264],{"alt":92,"src":89265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[138,89267,89268],{"start":195},[70,89269,89270],{},"箭头函数的this",[24,89272,89273],{},[19,89274],{"alt":92,"src":89275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[24,89277,89278],{},[19,89279],{"alt":92,"src":89280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[24,89282,89283],{},[19,89284],{"alt":92,"src":89285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[48,89287,89289],{"id":89288},"_4162-this的改变","4.16.2 this的改变",[24,89291,89292],{},"call() apply() bind()",[138,89294,89295],{},[70,89296,89297],{},"call()",[24,89299,89300],{},[19,89301],{"alt":92,"src":89302},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[24,89304,89305],{},"两个作用：①调用函数；②改变this指向",[87,89307,89309],{"className":53251,"code":89308,"language":53253,"meta":92,"style":92},"\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",[94,89310,89311,89319,89327,89331,89336,89340,89345,89350,89355,89359,89364,89372],{"__ignoreMap":92},[97,89312,89313,89315,89317],{"class":99,"line":100},[97,89314,104],{"class":103},[97,89316,51984],{"class":107},[97,89318,130],{"class":103},[97,89320,89321,89323,89325],{"class":99,"line":195},[97,89322,52328],{"class":103},[97,89324,51997],{"class":107},[97,89326,130],{"class":103},[97,89328,89329],{"class":99,"line":241},[97,89330,71707],{"class":103},[97,89332,89333],{"class":99,"line":1387},[97,89334,89335],{"class":103},"      uname: 'pink'\n",[97,89337,89338],{"class":99,"line":1393},[97,89339,2378],{"class":103},[97,89341,89342],{"class":99,"line":1407},[97,89343,89344],{"class":103},"    function fn(x, y) {\n",[97,89346,89347],{"class":99,"line":1413},[97,89348,89349],{"class":103},"      console.log(this)  \u002F\u002Fwindow\n",[97,89351,89352],{"class":99,"line":1504},[97,89353,89354],{"class":103},"      console.log(x + y)\n",[97,89356,89357],{"class":99,"line":1510},[97,89358,2378],{"class":103},[97,89360,89361],{"class":99,"line":1522},[97,89362,89363],{"class":103},"    fn.call(obj, 1, 2)\n",[97,89365,89366,89368,89370],{"class":99,"line":1804},[97,89367,52601],{"class":103},[97,89369,51997],{"class":107},[97,89371,130],{"class":103},[97,89373,89374,89376,89378],{"class":99,"line":1809},[97,89375,51969],{"class":103},[97,89377,51984],{"class":107},[97,89379,130],{"class":103},[24,89381,89382],{},[19,89383],{"alt":92,"src":89384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[138,89386,89387],{"start":195},[70,89388,89389],{},"apply()",[24,89391,89392],{},[19,89393],{"alt":92,"src":89394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[24,89396,89305],{},[24,89398,89399],{},"call传递的是普通参数，而apply必须传递的是数组",[87,89401,89403],{"className":50823,"code":89402,"language":50825,"meta":92,"style":92},"\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",[94,89404,89405,89415,89429,89433,89441,89455,89475,89487,89495,89499,89507,89515,89525,89532,89536,89541,89557,89569,89583,89587,89592,89611,89616,89620,89625,89630,89638,89643,89665,89670,89686,89702,89714,89718,89723,89742,89750,89758,89762],{"__ignoreMap":92},[97,89406,89407,89409,89411,89413],{"class":99,"line":100},[97,89408,51487],{"class":103},[97,89410,51490],{"class":107},[97,89412,51493],{"class":111},[97,89414,130],{"class":103},[97,89416,89417,89419,89421,89423,89425,89427],{"class":99,"line":195},[97,89418,104],{"class":103},[97,89420,50825],{"class":107},[97,89422,51504],{"class":111},[97,89424,115],{"class":103},[97,89426,51509],{"class":118},[97,89428,130],{"class":103},[97,89430,89431],{"class":99,"line":241},[97,89432,2591],{"emptyLinePlaceholder":249},[97,89434,89435,89437,89439],{"class":99,"line":1387},[97,89436,104],{"class":103},[97,89438,51522],{"class":107},[97,89440,130],{"class":103},[97,89442,89443,89445,89447,89449,89451,89453],{"class":99,"line":1393},[97,89444,52328],{"class":103},[97,89446,108],{"class":107},[97,89448,51534],{"class":111},[97,89450,115],{"class":103},[97,89452,51539],{"class":118},[97,89454,130],{"class":103},[97,89456,89457,89459,89461,89463,89465,89467,89469,89471,89473],{"class":99,"line":1407},[97,89458,52328],{"class":103},[97,89460,108],{"class":107},[97,89462,112],{"class":111},[97,89464,115],{"class":103},[97,89466,119],{"class":118},[97,89468,122],{"class":111},[97,89470,115],{"class":103},[97,89472,127],{"class":118},[97,89474,130],{"class":103},[97,89476,89477,89479,89481,89483,89485],{"class":99,"line":1413},[97,89478,52328],{"class":103},[97,89480,51591],{"class":107},[97,89482,51594],{"class":103},[97,89484,51591],{"class":107},[97,89486,130],{"class":103},[97,89488,89489,89491,89493],{"class":99,"line":1504},[97,89490,51969],{"class":103},[97,89492,51522],{"class":107},[97,89494,130],{"class":103},[97,89496,89497],{"class":99,"line":1510},[97,89498,2591],{"emptyLinePlaceholder":249},[97,89500,89501,89503,89505],{"class":99,"line":1522},[97,89502,104],{"class":103},[97,89504,51984],{"class":107},[97,89506,130],{"class":103},[97,89508,89509,89511,89513],{"class":99,"line":1804},[97,89510,52328],{"class":103},[97,89512,51997],{"class":107},[97,89514,130],{"class":103},[97,89516,89517,89519,89521,89523],{"class":99,"line":1809},[97,89518,11412],{"class":319},[97,89520,70155],{"class":370},[97,89522,13755],{"class":319},[97,89524,15762],{"class":103},[97,89526,89527,89529],{"class":99,"line":1815},[97,89528,71810],{"class":103},[97,89530,89531],{"class":370},"18\n",[97,89533,89534],{"class":99,"line":1820},[97,89535,2378],{"class":103},[97,89537,89538],{"class":99,"line":1834},[97,89539,89540],{"class":191},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[97,89542,89543,89545,89547,89549,89551,89553,89555],{"class":99,"line":1839},[97,89544,70268],{"class":319},[97,89546,89034],{"class":111},[97,89548,323],{"class":103},[97,89550,1140],{"class":5407},[97,89552,12626],{"class":103},[97,89554,1165],{"class":5407},[97,89556,12633],{"class":103},[97,89558,89559,89561,89563,89565,89567],{"class":99,"line":1845},[97,89560,58428],{"class":103},[97,89562,58431],{"class":111},[97,89564,323],{"class":103},[97,89566,87177],{"class":370},[97,89568,329],{"class":103},[97,89570,89571,89573,89575,89578,89580],{"class":99,"line":1866},[97,89572,58428],{"class":103},[97,89574,58431],{"class":111},[97,89576,89577],{"class":103},"(x ",[97,89579,801],{"class":319},[97,89581,89582],{"class":103}," y)\n",[97,89584,89585],{"class":99,"line":1871},[97,89586,2378],{"class":103},[97,89588,89589],{"class":99,"line":1885},[97,89590,89591],{"class":191},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[97,89593,89594,89597,89600,89603,89605,89607,89609],{"class":99,"line":1890},[97,89595,89596],{"class":103},"    fn.",[97,89598,89599],{"class":111},"apply",[97,89601,89602],{"class":103},"(obj, [",[97,89604,537],{"class":370},[97,89606,12626],{"class":103},[97,89608,398],{"class":370},[97,89610,4848],{"class":103},[97,89612,89613],{"class":99,"line":1919},[97,89614,89615],{"class":191},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[97,89617,89618],{"class":99,"line":1924},[97,89619,2591],{"emptyLinePlaceholder":249},[97,89621,89622],{"class":99,"line":1941},[97,89623,89624],{"class":191},"    \u002F\u002F 使用场景：求数组最大值\n",[97,89626,89627],{"class":99,"line":1946},[97,89628,89629],{"class":191},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[97,89631,89632,89635],{"class":99,"line":1951},[97,89633,89634],{"class":191},"    \u002F\u002F console.log(max)",[97,89636,89637],{"class":191},"   \u002F\u002F3\n",[97,89639,89640],{"class":99,"line":1956},[97,89641,89642],{"class":191},"    \u002F\u002F 指向空或者Math都是可以的\n",[97,89644,89645,89647,89649,89651,89653,89655,89657,89659,89661,89663],{"class":99,"line":1970},[97,89646,11412],{"class":319},[97,89648,57879],{"class":370},[97,89650,13755],{"class":319},[97,89652,52410],{"class":103},[97,89654,631],{"class":370},[97,89656,12626],{"class":103},[97,89658,824],{"class":370},[97,89660,12626],{"class":103},[97,89662,855],{"class":370},[97,89664,33436],{"class":103},[97,89666,89667],{"class":99,"line":1975},[97,89668,89669],{"class":191},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[97,89671,89672,89674,89676,89678,89681,89683],{"class":99,"line":2768},[97,89673,11412],{"class":319},[97,89675,6142],{"class":370},[97,89677,13755],{"class":319},[97,89679,89680],{"class":103}," Math.max.",[97,89682,89599],{"class":111},[97,89684,89685],{"class":103},"(Math, arr)\n",[97,89687,89688,89690,89693,89695,89698,89700],{"class":99,"line":2782},[97,89689,11412],{"class":319},[97,89691,89692],{"class":370}," min",[97,89694,13755],{"class":319},[97,89696,89697],{"class":103}," Math.min.",[97,89699,89599],{"class":111},[97,89701,89685],{"class":103},[97,89703,89704,89706,89708,89711],{"class":99,"line":2790},[97,89705,73937],{"class":103},[97,89707,58431],{"class":111},[97,89709,89710],{"class":103},"(max, min)     ",[97,89712,89713],{"class":191},"\u002F\u002F100,4\n",[97,89715,89716],{"class":99,"line":2795},[97,89717,2591],{"emptyLinePlaceholder":249},[97,89719,89720],{"class":99,"line":2801},[97,89721,89722],{"class":191},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[97,89724,89725,89727,89729,89732,89734,89736,89739],{"class":99,"line":2807},[97,89726,73937],{"class":103},[97,89728,58431],{"class":111},[97,89730,89731],{"class":103},"(Max.",[97,89733,6206],{"class":111},[97,89735,323],{"class":103},[97,89737,89738],{"class":319},"...",[97,89740,89741],{"class":103},"arr))\n",[97,89743,89744,89746,89748],{"class":99,"line":2812},[97,89745,52601],{"class":103},[97,89747,51997],{"class":107},[97,89749,130],{"class":103},[97,89751,89752,89754,89756],{"class":99,"line":8139},[97,89753,51969],{"class":103},[97,89755,51984],{"class":107},[97,89757,130],{"class":103},[97,89759,89760],{"class":99,"line":8163},[97,89761,2591],{"emptyLinePlaceholder":249},[97,89763,89764,89766,89768],{"class":99,"line":8168},[97,89765,51969],{"class":103},[97,89767,50825],{"class":107},[97,89769,130],{"class":103},[24,89771,89772],{},[19,89773],{"alt":92,"src":89774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[138,89776,89777],{"start":241},[70,89778,89779],{},"bind()",[24,89781,89782],{},[19,89783],{"alt":92,"src":89784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[24,89786,89787],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[24,89789,89790],{},"bind的语法跟call很相似",[87,89792,89794],{"className":53251,"code":89793,"language":53253,"meta":92,"style":92},"\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",[94,89795,89796,89804,89812,89816,89821,89825,89829,89834,89838,89843,89848,89853,89858,89863,89868,89873,89877,89885],{"__ignoreMap":92},[97,89797,89798,89800,89802],{"class":99,"line":100},[97,89799,104],{"class":103},[97,89801,51984],{"class":107},[97,89803,130],{"class":103},[97,89805,89806,89808,89810],{"class":99,"line":195},[97,89807,52328],{"class":103},[97,89809,51997],{"class":107},[97,89811,130],{"class":103},[97,89813,89814],{"class":99,"line":241},[97,89815,71707],{"class":103},[97,89817,89818],{"class":99,"line":1387},[97,89819,89820],{"class":103},"      age: 18\n",[97,89822,89823],{"class":99,"line":1393},[97,89824,2378],{"class":103},[97,89826,89827],{"class":99,"line":1407},[97,89828,77327],{"class":103},[97,89830,89831],{"class":99,"line":1413},[97,89832,89833],{"class":103},"      console.log(this)\n",[97,89835,89836],{"class":99,"line":1504},[97,89837,2378],{"class":103},[97,89839,89840],{"class":99,"line":1510},[97,89841,89842],{"class":103},"    \u002F\u002F 1.bind 不会调用函数\n",[97,89844,89845],{"class":99,"line":1522},[97,89846,89847],{"class":103},"    \u002F\u002F 2.bind能改变this的指向\n",[97,89849,89850],{"class":99,"line":1804},[97,89851,89852],{"class":103},"    fn.bind()\n",[97,89854,89855],{"class":99,"line":1809},[97,89856,89857],{"class":103},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[97,89859,89860],{"class":99,"line":1815},[97,89861,89862],{"class":103},"    const fun = fn.bind(obj)\n",[97,89864,89865],{"class":99,"line":1820},[97,89866,89867],{"class":103},"    \u002F\u002F console.log(fun)\n",[97,89869,89870],{"class":99,"line":1834},[97,89871,89872],{"class":103},"    \u002F\u002F 调用,查看this的指向\n",[97,89874,89875],{"class":99,"line":1839},[97,89876,52835],{"class":103},[97,89878,89879,89881,89883],{"class":99,"line":1845},[97,89880,52601],{"class":103},[97,89882,51997],{"class":107},[97,89884,130],{"class":103},[97,89886,89887,89889,89891],{"class":99,"line":1866},[97,89888,51969],{"class":103},[97,89890,51984],{"class":107},[97,89892,130],{"class":103},[24,89894,89895],{},[19,89896],{"alt":92,"src":89897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[138,89899,89900],{"start":1387},[70,89901,89902],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[87,89904,89906],{"className":53251,"code":89905,"language":53253,"meta":92,"style":92},"\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",[94,89907,89908,89916,89929,89937,89942,89946,89951,89956,89961,89966,89971,89976,89981,89986,89990,89998],{"__ignoreMap":92},[97,89909,89910,89912,89914],{"class":99,"line":100},[97,89911,104],{"class":103},[97,89913,51984],{"class":107},[97,89915,130],{"class":103},[97,89917,89918,89920,89922,89925,89927],{"class":99,"line":195},[97,89919,52328],{"class":103},[97,89921,54071],{"class":107},[97,89923,89924],{"class":103},">禁用\u003C\u002F",[97,89926,54071],{"class":107},[97,89928,130],{"class":103},[97,89930,89931,89933,89935],{"class":99,"line":241},[97,89932,52328],{"class":103},[97,89934,51997],{"class":107},[97,89936,130],{"class":103},[97,89938,89939],{"class":99,"line":1387},[97,89940,89941],{"class":103},"    const btn = document.querySelector('button')\n",[97,89943,89944],{"class":99,"line":1393},[97,89945,59200],{"class":103},[97,89947,89948],{"class":99,"line":1407},[97,89949,89950],{"class":103},"      this.disabled = true\n",[97,89952,89953],{"class":99,"line":1413},[97,89954,89955],{"class":103},"      \u002F\u002F 定时器是window进行调用的\n",[97,89957,89958],{"class":99,"line":1504},[97,89959,89960],{"class":103},"      setTimeout(function () {\n",[97,89962,89963],{"class":99,"line":1510},[97,89964,89965],{"class":103},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[97,89967,89968],{"class":99,"line":1522},[97,89969,89970],{"class":103},"        this.disabled = false\n",[97,89972,89973],{"class":99,"line":1804},[97,89974,89975],{"class":103},"      }.bind(this), 2000)\n",[97,89977,89978],{"class":99,"line":1809},[97,89979,89980],{"class":103},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[97,89982,89983],{"class":99,"line":1815},[97,89984,89985],{"class":103},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[97,89987,89988],{"class":99,"line":1820},[97,89989,33651],{"class":103},[97,89991,89992,89994,89996],{"class":99,"line":1834},[97,89993,52601],{"class":103},[97,89995,51997],{"class":107},[97,89997,130],{"class":103},[97,89999,90000,90002,90004],{"class":99,"line":1839},[97,90001,51969],{"class":103},[97,90003,51984],{"class":107},[97,90005,130],{"class":103},[138,90007,90008],{"start":1393},[70,90009,22143],{},[24,90011,90012],{},[19,90013],{"alt":92,"src":90014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90016,90018],{"id":90017},"_417-性能优化","4.17 性能优化",[48,90020,90022],{"id":90021},"_4171-防抖","4.17.1 防抖",[24,90024,90025],{},[19,90026],{"alt":92,"src":90027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[24,90029,90030],{},[469,90031,90032],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[24,90034,90035],{},"防抖实现方式：",[67,90037,90038],{},[70,90039,90040],{},"lodash 提供了防抖处理",[24,90042,90043],{},"_.debounce(func,[wait=0],[options={}])",[24,90045,90046],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[87,90048,90050],{"className":50823,"code":90049,"language":50825,"meta":92,"style":92},"\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",[94,90051,90052,90062,90076,90080,90088,90102,90122,90134,90142,90148,90158,90170,90182,90193,90205,90215,90225,90238,90242,90250,90258,90262,90270,90288,90306,90314,90333,90343,90352,90363,90368,90372,90377,90382,90387,90412,90420,90428,90432],{"__ignoreMap":92},[97,90053,90054,90056,90058,90060],{"class":99,"line":100},[97,90055,51487],{"class":103},[97,90057,51490],{"class":107},[97,90059,51493],{"class":111},[97,90061,130],{"class":103},[97,90063,90064,90066,90068,90070,90072,90074],{"class":99,"line":195},[97,90065,104],{"class":103},[97,90067,50825],{"class":107},[97,90069,51504],{"class":111},[97,90071,115],{"class":103},[97,90073,51509],{"class":118},[97,90075,130],{"class":103},[97,90077,90078],{"class":99,"line":241},[97,90079,2591],{"emptyLinePlaceholder":249},[97,90081,90082,90084,90086],{"class":99,"line":1387},[97,90083,104],{"class":103},[97,90085,51522],{"class":107},[97,90087,130],{"class":103},[97,90089,90090,90092,90094,90096,90098,90100],{"class":99,"line":1393},[97,90091,52328],{"class":103},[97,90093,108],{"class":107},[97,90095,51534],{"class":111},[97,90097,115],{"class":103},[97,90099,51539],{"class":118},[97,90101,130],{"class":103},[97,90103,90104,90106,90108,90110,90112,90114,90116,90118,90120],{"class":99,"line":1407},[97,90105,52328],{"class":103},[97,90107,108],{"class":107},[97,90109,112],{"class":111},[97,90111,115],{"class":103},[97,90113,119],{"class":118},[97,90115,122],{"class":111},[97,90117,115],{"class":103},[97,90119,127],{"class":118},[97,90121,130],{"class":103},[97,90123,90124,90126,90128,90130,90132],{"class":99,"line":1413},[97,90125,52328],{"class":103},[97,90127,51591],{"class":107},[97,90129,51594],{"class":103},[97,90131,51591],{"class":107},[97,90133,130],{"class":103},[97,90135,90136,90138,90140],{"class":99,"line":1504},[97,90137,52328],{"class":103},[97,90139,231],{"class":107},[97,90141,130],{"class":103},[97,90143,90144,90146],{"class":99,"line":1510},[97,90145,54936],{"class":111},[97,90147,15762],{"class":103},[97,90149,90150,90152,90154,90156],{"class":99,"line":1522},[97,90151,72780],{"class":370},[97,90153,51621],{"class":103},[97,90155,60689],{"class":370},[97,90157,1483],{"class":103},[97,90159,90160,90162,90164,90166,90168],{"class":99,"line":1804},[97,90161,54955],{"class":370},[97,90163,51621],{"class":103},[97,90165,1914],{"class":370},[97,90167,51676],{"class":319},[97,90169,1483],{"class":103},[97,90171,90172,90174,90176,90178,90180],{"class":99,"line":1809},[97,90173,54969],{"class":370},[97,90175,51621],{"class":103},[97,90177,1914],{"class":370},[97,90179,51676],{"class":319},[97,90181,1483],{"class":103},[97,90183,90184,90186,90188,90191],{"class":99,"line":1815},[97,90185,55068],{"class":370},[97,90187,51621],{"class":103},[97,90189,90190],{"class":370},"gray",[97,90192,1483],{"class":103},[97,90194,90195,90197,90199,90201,90203],{"class":99,"line":1820},[97,90196,55106],{"class":370},[97,90198,51621],{"class":103},[97,90200,1145],{"class":370},[97,90202,51676],{"class":319},[97,90204,1483],{"class":103},[97,90206,90207,90209,90211,90213],{"class":99,"line":1834},[97,90208,57600],{"class":370},[97,90210,51621],{"class":103},[97,90212,61026],{"class":370},[97,90214,1483],{"class":103},[97,90216,90217,90219,90221,90223],{"class":99,"line":1839},[97,90218,57470],{"class":370},[97,90220,51621],{"class":103},[97,90222,51776],{"class":370},[97,90224,1483],{"class":103},[97,90226,90227,90230,90232,90234,90236],{"class":99,"line":1845},[97,90228,90229],{"class":370},"      padding-top",[97,90231,51621],{"class":103},[97,90233,639],{"class":370},[97,90235,51676],{"class":319},[97,90237,1483],{"class":103},[97,90239,90240],{"class":99,"line":1866},[97,90241,2378],{"class":103},[97,90243,90244,90246,90248],{"class":99,"line":1871},[97,90245,52601],{"class":103},[97,90247,231],{"class":107},[97,90249,130],{"class":103},[97,90251,90252,90254,90256],{"class":99,"line":1885},[97,90253,51969],{"class":103},[97,90255,51522],{"class":107},[97,90257,130],{"class":103},[97,90259,90260],{"class":99,"line":1890},[97,90261,2591],{"emptyLinePlaceholder":249},[97,90263,90264,90266,90268],{"class":99,"line":1919},[97,90265,104],{"class":103},[97,90267,51984],{"class":107},[97,90269,130],{"class":103},[97,90271,90272,90274,90276,90278,90280,90282,90284,90286],{"class":99,"line":1924},[97,90273,52328],{"class":103},[97,90275,51795],{"class":107},[97,90277,53670],{"class":111},[97,90279,115],{"class":103},[97,90281,53675],{"class":118},[97,90283,55498],{"class":103},[97,90285,51795],{"class":107},[97,90287,130],{"class":103},[97,90289,90290,90292,90294,90296,90298,90300,90302,90304],{"class":99,"line":1941},[97,90291,52328],{"class":103},[97,90293,51997],{"class":107},[97,90295,55423],{"class":111},[97,90297,115],{"class":103},[97,90299,88458],{"class":118},[97,90301,55498],{"class":103},[97,90303,51997],{"class":107},[97,90305,130],{"class":103},[97,90307,90308,90310,90312],{"class":99,"line":1946},[97,90309,52328],{"class":103},[97,90311,51997],{"class":107},[97,90313,130],{"class":103},[97,90315,90316,90318,90320,90322,90324,90326,90328,90331],{"class":99,"line":1951},[97,90317,11412],{"class":319},[97,90319,87117],{"class":370},[97,90321,13755],{"class":319},[97,90323,54580],{"class":103},[97,90325,54583],{"class":111},[97,90327,323],{"class":103},[97,90329,90330],{"class":118},"'.box'",[97,90332,329],{"class":103},[97,90334,90335,90337,90339,90341],{"class":99,"line":1956},[97,90336,52403],{"class":319},[97,90338,9629],{"class":103},[97,90340,115],{"class":319},[97,90342,47523],{"class":370},[97,90344,90345,90347,90350],{"class":99,"line":1970},[97,90346,70268],{"class":319},[97,90348,90349],{"class":111}," mouseMove",[97,90351,11044],{"class":103},[97,90353,90354,90357,90359,90361],{"class":99,"line":1975},[97,90355,90356],{"class":103},"      box.innerHTML ",[97,90358,115],{"class":319},[97,90360,3223],{"class":103},[97,90362,2893],{"class":319},[97,90364,90365],{"class":99,"line":2768},[97,90366,90367],{"class":191},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[97,90369,90370],{"class":99,"line":2782},[97,90371,2378],{"class":103},[97,90373,90374],{"class":99,"line":2790},[97,90375,90376],{"class":191},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[97,90378,90379],{"class":99,"line":2795},[97,90380,90381],{"class":191},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[97,90383,90384],{"class":99,"line":2801},[97,90385,90386],{"class":191},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[97,90388,90389,90392,90394,90396,90399,90402,90405,90408,90410],{"class":99,"line":2807},[97,90390,90391],{"class":103},"    box.",[97,90393,57997],{"class":111},[97,90395,323],{"class":103},[97,90397,90398],{"class":118},"'mousemove'",[97,90400,90401],{"class":103},", _.",[97,90403,90404],{"class":111},"debounce",[97,90406,90407],{"class":103},"(mouseMove, ",[97,90409,65258],{"class":370},[97,90411,30687],{"class":103},[97,90413,90414,90416,90418],{"class":99,"line":2812},[97,90415,52601],{"class":103},[97,90417,51997],{"class":107},[97,90419,130],{"class":103},[97,90421,90422,90424,90426],{"class":99,"line":8139},[97,90423,51969],{"class":103},[97,90425,51984],{"class":107},[97,90427,130],{"class":103},[97,90429,90430],{"class":99,"line":8163},[97,90431,2591],{"emptyLinePlaceholder":249},[97,90433,90434,90436,90438],{"class":99,"line":8168},[97,90435,51969],{"class":103},[97,90437,50825],{"class":107},[97,90439,130],{"class":103},[67,90441,90442],{},[70,90443,90444],{},"手写一个防抖函数来处理",[24,90446,90447],{},"防抖的核心就是利用定时器来实现的：",[24,90449,90450],{},"①声明一个定时器变量",[24,90452,90453],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[24,90455,90456],{},"③如果没有定时器则开启定时器，记得存到变量里面",[87,90458,90460],{"className":50823,"code":90459,"language":50825,"meta":92,"style":92},"\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",[94,90461,90462,90472,90486,90490,90498,90512,90532,90544,90552,90558,90568,90580,90592,90602,90614,90624,90634,90646,90650,90658,90666,90670,90678,90696,90714,90722,90740,90750,90758,90768,90772,90776,90780,90785,90790,90795,90800,90805,90810,90828,90835,90840,90848,90853,90866,90882,90892,90897,90901,90905,90925,90929,90934,90939,90944,90949,90957,90965,90969],{"__ignoreMap":92},[97,90463,90464,90466,90468,90470],{"class":99,"line":100},[97,90465,51487],{"class":103},[97,90467,51490],{"class":107},[97,90469,51493],{"class":111},[97,90471,130],{"class":103},[97,90473,90474,90476,90478,90480,90482,90484],{"class":99,"line":195},[97,90475,104],{"class":103},[97,90477,50825],{"class":107},[97,90479,51504],{"class":111},[97,90481,115],{"class":103},[97,90483,51509],{"class":118},[97,90485,130],{"class":103},[97,90487,90488],{"class":99,"line":241},[97,90489,2591],{"emptyLinePlaceholder":249},[97,90491,90492,90494,90496],{"class":99,"line":1387},[97,90493,104],{"class":103},[97,90495,51522],{"class":107},[97,90497,130],{"class":103},[97,90499,90500,90502,90504,90506,90508,90510],{"class":99,"line":1393},[97,90501,52328],{"class":103},[97,90503,108],{"class":107},[97,90505,51534],{"class":111},[97,90507,115],{"class":103},[97,90509,51539],{"class":118},[97,90511,130],{"class":103},[97,90513,90514,90516,90518,90520,90522,90524,90526,90528,90530],{"class":99,"line":1407},[97,90515,52328],{"class":103},[97,90517,108],{"class":107},[97,90519,112],{"class":111},[97,90521,115],{"class":103},[97,90523,119],{"class":118},[97,90525,122],{"class":111},[97,90527,115],{"class":103},[97,90529,127],{"class":118},[97,90531,130],{"class":103},[97,90533,90534,90536,90538,90540,90542],{"class":99,"line":1413},[97,90535,52328],{"class":103},[97,90537,51591],{"class":107},[97,90539,51594],{"class":103},[97,90541,51591],{"class":107},[97,90543,130],{"class":103},[97,90545,90546,90548,90550],{"class":99,"line":1504},[97,90547,52328],{"class":103},[97,90549,231],{"class":107},[97,90551,130],{"class":103},[97,90553,90554,90556],{"class":99,"line":1510},[97,90555,54936],{"class":111},[97,90557,15762],{"class":103},[97,90559,90560,90562,90564,90566],{"class":99,"line":1522},[97,90561,72780],{"class":370},[97,90563,51621],{"class":103},[97,90565,60689],{"class":370},[97,90567,1483],{"class":103},[97,90569,90570,90572,90574,90576,90578],{"class":99,"line":1804},[97,90571,54955],{"class":370},[97,90573,51621],{"class":103},[97,90575,1914],{"class":370},[97,90577,51676],{"class":319},[97,90579,1483],{"class":103},[97,90581,90582,90584,90586,90588,90590],{"class":99,"line":1809},[97,90583,54969],{"class":370},[97,90585,51621],{"class":103},[97,90587,1914],{"class":370},[97,90589,51676],{"class":319},[97,90591,1483],{"class":103},[97,90593,90594,90596,90598,90600],{"class":99,"line":1815},[97,90595,55068],{"class":370},[97,90597,51621],{"class":103},[97,90599,90190],{"class":370},[97,90601,1483],{"class":103},[97,90603,90604,90606,90608,90610,90612],{"class":99,"line":1820},[97,90605,55106],{"class":370},[97,90607,51621],{"class":103},[97,90609,1145],{"class":370},[97,90611,51676],{"class":319},[97,90613,1483],{"class":103},[97,90615,90616,90618,90620,90622],{"class":99,"line":1834},[97,90617,57600],{"class":370},[97,90619,51621],{"class":103},[97,90621,61026],{"class":370},[97,90623,1483],{"class":103},[97,90625,90626,90628,90630,90632],{"class":99,"line":1839},[97,90627,57470],{"class":370},[97,90629,51621],{"class":103},[97,90631,51776],{"class":370},[97,90633,1483],{"class":103},[97,90635,90636,90638,90640,90642,90644],{"class":99,"line":1845},[97,90637,90229],{"class":370},[97,90639,51621],{"class":103},[97,90641,639],{"class":370},[97,90643,51676],{"class":319},[97,90645,1483],{"class":103},[97,90647,90648],{"class":99,"line":1866},[97,90649,2378],{"class":103},[97,90651,90652,90654,90656],{"class":99,"line":1871},[97,90653,52601],{"class":103},[97,90655,231],{"class":107},[97,90657,130],{"class":103},[97,90659,90660,90662,90664],{"class":99,"line":1885},[97,90661,51969],{"class":103},[97,90663,51522],{"class":107},[97,90665,130],{"class":103},[97,90667,90668],{"class":99,"line":1890},[97,90669,2591],{"emptyLinePlaceholder":249},[97,90671,90672,90674,90676],{"class":99,"line":1919},[97,90673,104],{"class":103},[97,90675,51984],{"class":107},[97,90677,130],{"class":103},[97,90679,90680,90682,90684,90686,90688,90690,90692,90694],{"class":99,"line":1924},[97,90681,52328],{"class":103},[97,90683,51795],{"class":107},[97,90685,53670],{"class":111},[97,90687,115],{"class":103},[97,90689,53675],{"class":118},[97,90691,55498],{"class":103},[97,90693,51795],{"class":107},[97,90695,130],{"class":103},[97,90697,90698,90700,90702,90704,90706,90708,90710,90712],{"class":99,"line":1941},[97,90699,52328],{"class":103},[97,90701,51997],{"class":107},[97,90703,55423],{"class":111},[97,90705,115],{"class":103},[97,90707,88458],{"class":118},[97,90709,55498],{"class":103},[97,90711,51997],{"class":107},[97,90713,130],{"class":103},[97,90715,90716,90718,90720],{"class":99,"line":1946},[97,90717,52328],{"class":103},[97,90719,51997],{"class":107},[97,90721,130],{"class":103},[97,90723,90724,90726,90728,90730,90732,90734,90736,90738],{"class":99,"line":1951},[97,90725,11412],{"class":319},[97,90727,87117],{"class":370},[97,90729,13755],{"class":319},[97,90731,54580],{"class":103},[97,90733,54583],{"class":111},[97,90735,323],{"class":103},[97,90737,90330],{"class":118},[97,90739,329],{"class":103},[97,90741,90742,90744,90746,90748],{"class":99,"line":1956},[97,90743,52403],{"class":319},[97,90745,9629],{"class":103},[97,90747,115],{"class":319},[97,90749,47523],{"class":370},[97,90751,90752,90754,90756],{"class":99,"line":1970},[97,90753,70268],{"class":319},[97,90755,90349],{"class":111},[97,90757,11044],{"class":103},[97,90759,90760,90762,90764,90766],{"class":99,"line":1975},[97,90761,90356],{"class":103},[97,90763,115],{"class":319},[97,90765,3223],{"class":103},[97,90767,2893],{"class":319},[97,90769,90770],{"class":99,"line":2768},[97,90771,90367],{"class":191},[97,90773,90774],{"class":99,"line":2782},[97,90775,2378],{"class":103},[97,90777,90778],{"class":99,"line":2790},[97,90779,90376],{"class":191},[97,90781,90782],{"class":99,"line":2795},[97,90783,90784],{"class":191},"    \u002F\u002F 手写防抖函数\n",[97,90786,90787],{"class":99,"line":2801},[97,90788,90789],{"class":191},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[97,90791,90792],{"class":99,"line":2807},[97,90793,90794],{"class":191},"    \u002F\u002F 1.声明定时器变量\n",[97,90796,90797],{"class":99,"line":2812},[97,90798,90799],{"class":191},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[97,90801,90802],{"class":99,"line":8139},[97,90803,90804],{"class":191},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[97,90806,90807],{"class":99,"line":8163},[97,90808,90809],{"class":191},"    \u002F\u002F 4.定时器里面写函数调用\n",[97,90811,90812,90814,90817,90819,90822,90824,90826],{"class":99,"line":8168},[97,90813,70268],{"class":319},[97,90815,90816],{"class":111}," debounce",[97,90818,323],{"class":103},[97,90820,90821],{"class":5407},"fn",[97,90823,12626],{"class":103},[97,90825,1040],{"class":5407},[97,90827,12633],{"class":103},[97,90829,90830,90832],{"class":99,"line":8174},[97,90831,79956],{"class":319},[97,90833,90834],{"class":103}," timer\n",[97,90836,90837],{"class":99,"line":8201},[97,90838,90839],{"class":191},"      \u002F\u002F return 返回一个匿名函数\n",[97,90841,90842,90844,90846],{"class":99,"line":8206},[97,90843,74166],{"class":319},[97,90845,59102],{"class":319},[97,90847,54636],{"class":103},[97,90849,90850],{"class":99,"line":8212},[97,90851,90852],{"class":191},"        \u002F\u002F 这里边写第二三四步\n",[97,90854,90855,90857,90860,90863],{"class":99,"line":8224},[97,90856,2688],{"class":319},[97,90858,90859],{"class":103}," (timer) ",[97,90861,90862],{"class":111},"clearTimeout",[97,90864,90865],{"class":103},"(timer)\n",[97,90867,90868,90871,90873,90876,90878,90880],{"class":99,"line":8236},[97,90869,90870],{"class":103},"        timer ",[97,90872,115],{"class":319},[97,90874,90875],{"class":111}," setTimeout",[97,90877,323],{"class":103},[97,90879,54633],{"class":319},[97,90881,54636],{"class":103},[97,90883,90884,90887,90889],{"class":99,"line":8248},[97,90885,90886],{"class":111},"          fn",[97,90888,13241],{"class":103},[97,90890,90891],{"class":191},"\u002F\u002F加小括号调用fn }, t)\n",[97,90893,90894],{"class":99,"line":9907},[97,90895,90896],{"class":103},"        }, t)\n",[97,90898,90899],{"class":99,"line":9932},[97,90900,52582],{"class":103},[97,90902,90903],{"class":99,"line":9955},[97,90904,2378],{"class":103},[97,90906,90907,90909,90911,90913,90915,90917,90919,90921,90923],{"class":99,"line":9979},[97,90908,90391],{"class":103},[97,90910,57997],{"class":111},[97,90912,323],{"class":103},[97,90914,90398],{"class":118},[97,90916,12626],{"class":103},[97,90918,90404],{"class":111},[97,90920,90407],{"class":103},[97,90922,65258],{"class":370},[97,90924,30687],{"class":103},[97,90926,90927],{"class":99,"line":9984},[97,90928,2591],{"emptyLinePlaceholder":249},[97,90930,90931],{"class":99,"line":9989},[97,90932,90933],{"class":191},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[97,90935,90936],{"class":99,"line":9994},[97,90937,90938],{"class":191},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[97,90940,90941],{"class":99,"line":10003},[97,90942,90943],{"class":191},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[97,90945,90946],{"class":99,"line":10008},[97,90947,90948],{"class":191},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[97,90950,90951,90953,90955],{"class":99,"line":10014},[97,90952,52601],{"class":103},[97,90954,51997],{"class":107},[97,90956,130],{"class":103},[97,90958,90959,90961,90963],{"class":99,"line":10035},[97,90960,51969],{"class":103},[97,90962,51984],{"class":107},[97,90964,130],{"class":103},[97,90966,90967],{"class":99,"line":10041},[97,90968,2591],{"emptyLinePlaceholder":249},[97,90970,90971,90973,90975],{"class":99,"line":10055},[97,90972,51969],{"class":103},[97,90974,50825],{"class":107},[97,90976,130],{"class":103},[48,90978,90980],{"id":90979},"_4172-节流","4.17.2 节流",[24,90982,90983],{},[19,90984],{"alt":92,"src":90985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[24,90987,90988],{},[19,90989],{"alt":92,"src":90990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[24,90992,90993],{},[469,90994,90995],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[24,90997,90998],{},"实现方式：",[67,91000,91001],{},[70,91002,91003],{},"lodash 提供的节流函数来处理",[24,91005,91006],{},"_.throttle(func,[wait=0],[options=])",[24,91008,91009],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[87,91011,91013],{"className":50823,"code":91012,"language":50825,"meta":92,"style":92},"\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",[94,91014,91015,91025,91039,91043,91051,91065,91085,91097,91105,91111,91121,91133,91145,91155,91167,91177,91187,91199,91203,91211,91219,91223,91231,91249,91267,91275,91293,91303,91311,91321,91325,91329,91333,91338,91343,91364,91372,91380,91384],{"__ignoreMap":92},[97,91016,91017,91019,91021,91023],{"class":99,"line":100},[97,91018,51487],{"class":103},[97,91020,51490],{"class":107},[97,91022,51493],{"class":111},[97,91024,130],{"class":103},[97,91026,91027,91029,91031,91033,91035,91037],{"class":99,"line":195},[97,91028,104],{"class":103},[97,91030,50825],{"class":107},[97,91032,51504],{"class":111},[97,91034,115],{"class":103},[97,91036,51509],{"class":118},[97,91038,130],{"class":103},[97,91040,91041],{"class":99,"line":241},[97,91042,2591],{"emptyLinePlaceholder":249},[97,91044,91045,91047,91049],{"class":99,"line":1387},[97,91046,104],{"class":103},[97,91048,51522],{"class":107},[97,91050,130],{"class":103},[97,91052,91053,91055,91057,91059,91061,91063],{"class":99,"line":1393},[97,91054,52328],{"class":103},[97,91056,108],{"class":107},[97,91058,51534],{"class":111},[97,91060,115],{"class":103},[97,91062,51539],{"class":118},[97,91064,130],{"class":103},[97,91066,91067,91069,91071,91073,91075,91077,91079,91081,91083],{"class":99,"line":1407},[97,91068,52328],{"class":103},[97,91070,108],{"class":107},[97,91072,112],{"class":111},[97,91074,115],{"class":103},[97,91076,119],{"class":118},[97,91078,122],{"class":111},[97,91080,115],{"class":103},[97,91082,127],{"class":118},[97,91084,130],{"class":103},[97,91086,91087,91089,91091,91093,91095],{"class":99,"line":1413},[97,91088,52328],{"class":103},[97,91090,51591],{"class":107},[97,91092,51594],{"class":103},[97,91094,51591],{"class":107},[97,91096,130],{"class":103},[97,91098,91099,91101,91103],{"class":99,"line":1504},[97,91100,52328],{"class":103},[97,91102,231],{"class":107},[97,91104,130],{"class":103},[97,91106,91107,91109],{"class":99,"line":1510},[97,91108,54936],{"class":111},[97,91110,15762],{"class":103},[97,91112,91113,91115,91117,91119],{"class":99,"line":1522},[97,91114,72780],{"class":370},[97,91116,51621],{"class":103},[97,91118,60689],{"class":370},[97,91120,1483],{"class":103},[97,91122,91123,91125,91127,91129,91131],{"class":99,"line":1804},[97,91124,54955],{"class":370},[97,91126,51621],{"class":103},[97,91128,1914],{"class":370},[97,91130,51676],{"class":319},[97,91132,1483],{"class":103},[97,91134,91135,91137,91139,91141,91143],{"class":99,"line":1809},[97,91136,54969],{"class":370},[97,91138,51621],{"class":103},[97,91140,1914],{"class":370},[97,91142,51676],{"class":319},[97,91144,1483],{"class":103},[97,91146,91147,91149,91151,91153],{"class":99,"line":1815},[97,91148,55068],{"class":370},[97,91150,51621],{"class":103},[97,91152,90190],{"class":370},[97,91154,1483],{"class":103},[97,91156,91157,91159,91161,91163,91165],{"class":99,"line":1820},[97,91158,55106],{"class":370},[97,91160,51621],{"class":103},[97,91162,1145],{"class":370},[97,91164,51676],{"class":319},[97,91166,1483],{"class":103},[97,91168,91169,91171,91173,91175],{"class":99,"line":1834},[97,91170,57600],{"class":370},[97,91172,51621],{"class":103},[97,91174,61026],{"class":370},[97,91176,1483],{"class":103},[97,91178,91179,91181,91183,91185],{"class":99,"line":1839},[97,91180,57470],{"class":370},[97,91182,51621],{"class":103},[97,91184,51776],{"class":370},[97,91186,1483],{"class":103},[97,91188,91189,91191,91193,91195,91197],{"class":99,"line":1845},[97,91190,90229],{"class":370},[97,91192,51621],{"class":103},[97,91194,639],{"class":370},[97,91196,51676],{"class":319},[97,91198,1483],{"class":103},[97,91200,91201],{"class":99,"line":1866},[97,91202,2378],{"class":103},[97,91204,91205,91207,91209],{"class":99,"line":1871},[97,91206,52601],{"class":103},[97,91208,231],{"class":107},[97,91210,130],{"class":103},[97,91212,91213,91215,91217],{"class":99,"line":1885},[97,91214,51969],{"class":103},[97,91216,51522],{"class":107},[97,91218,130],{"class":103},[97,91220,91221],{"class":99,"line":1890},[97,91222,2591],{"emptyLinePlaceholder":249},[97,91224,91225,91227,91229],{"class":99,"line":1919},[97,91226,104],{"class":103},[97,91228,51984],{"class":107},[97,91230,130],{"class":103},[97,91232,91233,91235,91237,91239,91241,91243,91245,91247],{"class":99,"line":1924},[97,91234,52328],{"class":103},[97,91236,51795],{"class":107},[97,91238,53670],{"class":111},[97,91240,115],{"class":103},[97,91242,53675],{"class":118},[97,91244,55498],{"class":103},[97,91246,51795],{"class":107},[97,91248,130],{"class":103},[97,91250,91251,91253,91255,91257,91259,91261,91263,91265],{"class":99,"line":1941},[97,91252,52328],{"class":103},[97,91254,51997],{"class":107},[97,91256,55423],{"class":111},[97,91258,115],{"class":103},[97,91260,88458],{"class":118},[97,91262,55498],{"class":103},[97,91264,51997],{"class":107},[97,91266,130],{"class":103},[97,91268,91269,91271,91273],{"class":99,"line":1946},[97,91270,52328],{"class":103},[97,91272,51997],{"class":107},[97,91274,130],{"class":103},[97,91276,91277,91279,91281,91283,91285,91287,91289,91291],{"class":99,"line":1951},[97,91278,11412],{"class":319},[97,91280,87117],{"class":370},[97,91282,13755],{"class":319},[97,91284,54580],{"class":103},[97,91286,54583],{"class":111},[97,91288,323],{"class":103},[97,91290,90330],{"class":118},[97,91292,329],{"class":103},[97,91294,91295,91297,91299,91301],{"class":99,"line":1956},[97,91296,52403],{"class":319},[97,91298,9629],{"class":103},[97,91300,115],{"class":319},[97,91302,47523],{"class":370},[97,91304,91305,91307,91309],{"class":99,"line":1970},[97,91306,70268],{"class":319},[97,91308,90349],{"class":111},[97,91310,11044],{"class":103},[97,91312,91313,91315,91317,91319],{"class":99,"line":1975},[97,91314,90356],{"class":103},[97,91316,115],{"class":319},[97,91318,3223],{"class":103},[97,91320,2893],{"class":319},[97,91322,91323],{"class":99,"line":2768},[97,91324,90367],{"class":191},[97,91326,91327],{"class":99,"line":2782},[97,91328,2378],{"class":103},[97,91330,91331],{"class":99,"line":2790},[97,91332,90376],{"class":191},[97,91334,91335],{"class":99,"line":2795},[97,91336,91337],{"class":191},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[97,91339,91340],{"class":99,"line":2801},[97,91341,91342],{"class":191},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[97,91344,91345,91347,91349,91351,91353,91355,91358,91360,91362],{"class":99,"line":2807},[97,91346,90391],{"class":103},[97,91348,57997],{"class":111},[97,91350,323],{"class":103},[97,91352,90398],{"class":118},[97,91354,90401],{"class":103},[97,91356,91357],{"class":111},"throttle",[97,91359,90407],{"class":103},[97,91361,65258],{"class":370},[97,91363,30687],{"class":103},[97,91365,91366,91368,91370],{"class":99,"line":2812},[97,91367,52601],{"class":103},[97,91369,51997],{"class":107},[97,91371,130],{"class":103},[97,91373,91374,91376,91378],{"class":99,"line":8139},[97,91375,51969],{"class":103},[97,91377,51984],{"class":107},[97,91379,130],{"class":103},[97,91381,91382],{"class":99,"line":8163},[97,91383,2591],{"emptyLinePlaceholder":249},[97,91385,91386,91388,91390],{"class":99,"line":8168},[97,91387,51969],{"class":103},[97,91389,50825],{"class":107},[97,91391,130],{"class":103},[67,91393,91394],{},[70,91395,91396],{},"手写一个节流函数来处理",[24,91398,71136],{},[24,91400,90450],{},[24,91402,91403],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[24,91405,91406],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[87,91408,91410],{"className":50823,"code":91409,"language":50825,"meta":92,"style":92},"\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",[94,91411,91412,91422,91436,91440,91448,91462,91482,91494,91502,91508,91518,91530,91542,91552,91564,91574,91584,91596,91600,91608,91616,91620,91628,91646,91664,91672,91690,91700,91708,91718,91722,91726,91730,91735,91740,91745,91750,91755,91760,91777,91783,91791,91802,91817,91824,91829,91834,91844,91849,91854,91859,91863,91867,91871,91891,91899,91907,91911],{"__ignoreMap":92},[97,91413,91414,91416,91418,91420],{"class":99,"line":100},[97,91415,51487],{"class":103},[97,91417,51490],{"class":107},[97,91419,51493],{"class":111},[97,91421,130],{"class":103},[97,91423,91424,91426,91428,91430,91432,91434],{"class":99,"line":195},[97,91425,104],{"class":103},[97,91427,50825],{"class":107},[97,91429,51504],{"class":111},[97,91431,115],{"class":103},[97,91433,51509],{"class":118},[97,91435,130],{"class":103},[97,91437,91438],{"class":99,"line":241},[97,91439,2591],{"emptyLinePlaceholder":249},[97,91441,91442,91444,91446],{"class":99,"line":1387},[97,91443,104],{"class":103},[97,91445,51522],{"class":107},[97,91447,130],{"class":103},[97,91449,91450,91452,91454,91456,91458,91460],{"class":99,"line":1393},[97,91451,52328],{"class":103},[97,91453,108],{"class":107},[97,91455,51534],{"class":111},[97,91457,115],{"class":103},[97,91459,51539],{"class":118},[97,91461,130],{"class":103},[97,91463,91464,91466,91468,91470,91472,91474,91476,91478,91480],{"class":99,"line":1407},[97,91465,52328],{"class":103},[97,91467,108],{"class":107},[97,91469,112],{"class":111},[97,91471,115],{"class":103},[97,91473,119],{"class":118},[97,91475,122],{"class":111},[97,91477,115],{"class":103},[97,91479,127],{"class":118},[97,91481,130],{"class":103},[97,91483,91484,91486,91488,91490,91492],{"class":99,"line":1413},[97,91485,52328],{"class":103},[97,91487,51591],{"class":107},[97,91489,51594],{"class":103},[97,91491,51591],{"class":107},[97,91493,130],{"class":103},[97,91495,91496,91498,91500],{"class":99,"line":1504},[97,91497,52328],{"class":103},[97,91499,231],{"class":107},[97,91501,130],{"class":103},[97,91503,91504,91506],{"class":99,"line":1510},[97,91505,54936],{"class":111},[97,91507,15762],{"class":103},[97,91509,91510,91512,91514,91516],{"class":99,"line":1522},[97,91511,72780],{"class":370},[97,91513,51621],{"class":103},[97,91515,60689],{"class":370},[97,91517,1483],{"class":103},[97,91519,91520,91522,91524,91526,91528],{"class":99,"line":1804},[97,91521,54955],{"class":370},[97,91523,51621],{"class":103},[97,91525,1914],{"class":370},[97,91527,51676],{"class":319},[97,91529,1483],{"class":103},[97,91531,91532,91534,91536,91538,91540],{"class":99,"line":1809},[97,91533,54969],{"class":370},[97,91535,51621],{"class":103},[97,91537,1914],{"class":370},[97,91539,51676],{"class":319},[97,91541,1483],{"class":103},[97,91543,91544,91546,91548,91550],{"class":99,"line":1815},[97,91545,55068],{"class":370},[97,91547,51621],{"class":103},[97,91549,90190],{"class":370},[97,91551,1483],{"class":103},[97,91553,91554,91556,91558,91560,91562],{"class":99,"line":1820},[97,91555,55106],{"class":370},[97,91557,51621],{"class":103},[97,91559,1145],{"class":370},[97,91561,51676],{"class":319},[97,91563,1483],{"class":103},[97,91565,91566,91568,91570,91572],{"class":99,"line":1834},[97,91567,57600],{"class":370},[97,91569,51621],{"class":103},[97,91571,61026],{"class":370},[97,91573,1483],{"class":103},[97,91575,91576,91578,91580,91582],{"class":99,"line":1839},[97,91577,57470],{"class":370},[97,91579,51621],{"class":103},[97,91581,51776],{"class":370},[97,91583,1483],{"class":103},[97,91585,91586,91588,91590,91592,91594],{"class":99,"line":1845},[97,91587,90229],{"class":370},[97,91589,51621],{"class":103},[97,91591,639],{"class":370},[97,91593,51676],{"class":319},[97,91595,1483],{"class":103},[97,91597,91598],{"class":99,"line":1866},[97,91599,2378],{"class":103},[97,91601,91602,91604,91606],{"class":99,"line":1871},[97,91603,52601],{"class":103},[97,91605,231],{"class":107},[97,91607,130],{"class":103},[97,91609,91610,91612,91614],{"class":99,"line":1885},[97,91611,51969],{"class":103},[97,91613,51522],{"class":107},[97,91615,130],{"class":103},[97,91617,91618],{"class":99,"line":1890},[97,91619,2591],{"emptyLinePlaceholder":249},[97,91621,91622,91624,91626],{"class":99,"line":1919},[97,91623,104],{"class":103},[97,91625,51984],{"class":107},[97,91627,130],{"class":103},[97,91629,91630,91632,91634,91636,91638,91640,91642,91644],{"class":99,"line":1924},[97,91631,52328],{"class":103},[97,91633,51795],{"class":107},[97,91635,53670],{"class":111},[97,91637,115],{"class":103},[97,91639,53675],{"class":118},[97,91641,55498],{"class":103},[97,91643,51795],{"class":107},[97,91645,130],{"class":103},[97,91647,91648,91650,91652,91654,91656,91658,91660,91662],{"class":99,"line":1941},[97,91649,52328],{"class":103},[97,91651,51997],{"class":107},[97,91653,55423],{"class":111},[97,91655,115],{"class":103},[97,91657,88458],{"class":118},[97,91659,55498],{"class":103},[97,91661,51997],{"class":107},[97,91663,130],{"class":103},[97,91665,91666,91668,91670],{"class":99,"line":1946},[97,91667,52328],{"class":103},[97,91669,51997],{"class":107},[97,91671,130],{"class":103},[97,91673,91674,91676,91678,91680,91682,91684,91686,91688],{"class":99,"line":1951},[97,91675,11412],{"class":319},[97,91677,87117],{"class":370},[97,91679,13755],{"class":319},[97,91681,54580],{"class":103},[97,91683,54583],{"class":111},[97,91685,323],{"class":103},[97,91687,90330],{"class":118},[97,91689,329],{"class":103},[97,91691,91692,91694,91696,91698],{"class":99,"line":1956},[97,91693,52403],{"class":319},[97,91695,9629],{"class":103},[97,91697,115],{"class":319},[97,91699,47523],{"class":370},[97,91701,91702,91704,91706],{"class":99,"line":1970},[97,91703,70268],{"class":319},[97,91705,90349],{"class":111},[97,91707,11044],{"class":103},[97,91709,91710,91712,91714,91716],{"class":99,"line":1975},[97,91711,90356],{"class":103},[97,91713,115],{"class":319},[97,91715,3223],{"class":103},[97,91717,2893],{"class":319},[97,91719,91720],{"class":99,"line":2768},[97,91721,90367],{"class":191},[97,91723,91724],{"class":99,"line":2782},[97,91725,2378],{"class":103},[97,91727,91728],{"class":99,"line":2790},[97,91729,90376],{"class":191},[97,91731,91732],{"class":99,"line":2795},[97,91733,91734],{"class":191},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[97,91736,91737],{"class":99,"line":2801},[97,91738,91739],{"class":191},"    \u002F\u002F 1.声明一个定时器变量\n",[97,91741,91742],{"class":99,"line":2807},[97,91743,91744],{"class":191},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[97,91746,91747],{"class":99,"line":2812},[97,91748,91749],{"class":191},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[97,91751,91752],{"class":99,"line":8139},[97,91753,91754],{"class":191},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[97,91756,91757],{"class":99,"line":8163},[97,91758,91759],{"class":191},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[97,91761,91762,91764,91767,91769,91771,91773,91775],{"class":99,"line":8168},[97,91763,70268],{"class":319},[97,91765,91766],{"class":111}," throttle",[97,91768,323],{"class":103},[97,91770,90821],{"class":5407},[97,91772,12626],{"class":103},[97,91774,1040],{"class":5407},[97,91776,12633],{"class":103},[97,91778,91779,91781],{"class":99,"line":8174},[97,91780,79956],{"class":319},[97,91782,90834],{"class":103},[97,91784,91785,91787,91789],{"class":99,"line":8201},[97,91786,74166],{"class":319},[97,91788,59102],{"class":319},[97,91790,54636],{"class":103},[97,91792,91793,91795,91797,91799],{"class":99,"line":8206},[97,91794,2688],{"class":319},[97,91796,1850],{"class":103},[97,91798,546],{"class":319},[97,91800,91801],{"class":103},"timer) {\n",[97,91803,91804,91807,91809,91811,91813,91815],{"class":99,"line":8212},[97,91805,91806],{"class":103},"          timer ",[97,91808,115],{"class":319},[97,91810,90875],{"class":111},[97,91812,323],{"class":103},[97,91814,54633],{"class":319},[97,91816,54636],{"class":103},[97,91818,91819,91822],{"class":99,"line":8224},[97,91820,91821],{"class":111},"            fn",[97,91823,2167],{"class":103},[97,91825,91826],{"class":99,"line":8236},[97,91827,91828],{"class":191},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[97,91830,91831],{"class":99,"line":8248},[97,91832,91833],{"class":191},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[97,91835,91836,91839,91841],{"class":99,"line":9907},[97,91837,91838],{"class":103},"            timer ",[97,91840,115],{"class":319},[97,91842,91843],{"class":370}," null\n",[97,91845,91846],{"class":99,"line":9932},[97,91847,91848],{"class":191},"            \u002F\u002F 不能用clearTimeout(timer)\n",[97,91850,91851],{"class":99,"line":9955},[97,91852,91853],{"class":191},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[97,91855,91856],{"class":99,"line":9979},[97,91857,91858],{"class":103},"          }, t)\n",[97,91860,91861],{"class":99,"line":9984},[97,91862,2720],{"class":103},[97,91864,91865],{"class":99,"line":9989},[97,91866,52582],{"class":103},[97,91868,91869],{"class":99,"line":9994},[97,91870,2378],{"class":103},[97,91872,91873,91875,91877,91879,91881,91883,91885,91887,91889],{"class":99,"line":10003},[97,91874,90391],{"class":103},[97,91876,57997],{"class":111},[97,91878,323],{"class":103},[97,91880,90398],{"class":118},[97,91882,12626],{"class":103},[97,91884,91357],{"class":111},[97,91886,90407],{"class":103},[97,91888,65258],{"class":370},[97,91890,30687],{"class":103},[97,91892,91893,91895,91897],{"class":99,"line":10008},[97,91894,52601],{"class":103},[97,91896,51997],{"class":107},[97,91898,130],{"class":103},[97,91900,91901,91903,91905],{"class":99,"line":10014},[97,91902,51969],{"class":103},[97,91904,51984],{"class":107},[97,91906,130],{"class":103},[97,91908,91909],{"class":99,"line":10035},[97,91910,2591],{"emptyLinePlaceholder":249},[97,91912,91913,91915,91917],{"class":99,"line":10041},[97,91914,51969],{"class":103},[97,91916,50825],{"class":107},[97,91918,130],{"class":103},[48,91920,91922],{"id":91921},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[87,91924,91926],{"className":53251,"code":91925,"language":53253,"meta":92,"style":92},"\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",[94,91927,91928,91936,91944,91949,91954,91959,91964,91968,91976],{"__ignoreMap":92},[97,91929,91930,91932,91934],{"class":99,"line":100},[97,91931,104],{"class":103},[97,91933,51984],{"class":107},[97,91935,130],{"class":103},[97,91937,91938,91940,91942],{"class":99,"line":195},[97,91939,52328],{"class":103},[97,91941,51997],{"class":107},[97,91943,130],{"class":103},[97,91945,91946],{"class":99,"line":241},[97,91947,91948],{"class":103},"    let timer = null\n",[97,91950,91951],{"class":99,"line":1387},[97,91952,91953],{"class":103},"    timer = setTimeout(() => {\n",[97,91955,91956],{"class":99,"line":1393},[97,91957,91958],{"class":103},"      clearTimeout(timer)\n",[97,91960,91961],{"class":99,"line":1407},[97,91962,91963],{"class":103},"      console.log(timer)\n",[97,91965,91966],{"class":99,"line":1413},[97,91967,60409],{"class":103},[97,91969,91970,91972,91974],{"class":99,"line":1504},[97,91971,52601],{"class":103},[97,91973,51997],{"class":107},[97,91975,130],{"class":103},[97,91977,91978,91980,91982],{"class":99,"line":1510},[97,91979,51969],{"class":103},[97,91981,51984],{"class":107},[97,91983,130],{"class":103},[24,91985,91986],{},"输出为1",[24,91988,91989],{},"在开启的定时器里边写清除定时器",[24,91991,91992],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[48,91994,91996],{"id":91995},"_4174-节流综合案例","4.17.4 节流综合案例",[24,91998,91999],{},"页面打开，可以记录上一次的视频播放位置",[24,92001,92002],{},[19,92003],{"alt":92,"src":92004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[24,92006,92007],{},[19,92008],{"alt":92,"src":92009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[87,92011,92013],{"className":50823,"code":92012,"language":50825,"meta":92,"style":92},"\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",[94,92014,92015,92025,92039,92043,92051,92065,92085,92105,92127,92140,92148,92154,92164,92174,92184,92188,92192,92199,92212,92224,92228,92232,92242,92254,92268,92272,92276,92283,92293,92306,92318,92328,92338,92354,92366,92370,92374,92382,92392,92404,92414,92424,92434,92438,92442,92452,92463,92467,92475,92483,92487,92495,92510,92525,92540,92561,92569,92577,92592,92614,92622,92637,92663,92689,92715,92723,92731,92750,92758,92763,92782,92787,92805,92810,92815,92823,92828,92842,92850,92855,92872,92876,92881,92903,92907,92915,92923,92927],{"__ignoreMap":92},[97,92016,92017,92019,92021,92023],{"class":99,"line":100},[97,92018,51487],{"class":103},[97,92020,51490],{"class":107},[97,92022,51493],{"class":111},[97,92024,130],{"class":103},[97,92026,92027,92029,92031,92033,92035,92037],{"class":99,"line":195},[97,92028,104],{"class":103},[97,92030,50825],{"class":107},[97,92032,51504],{"class":111},[97,92034,115],{"class":103},[97,92036,51509],{"class":118},[97,92038,130],{"class":103},[97,92040,92041],{"class":99,"line":241},[97,92042,2591],{"emptyLinePlaceholder":249},[97,92044,92045,92047,92049],{"class":99,"line":1387},[97,92046,104],{"class":103},[97,92048,51522],{"class":107},[97,92050,130],{"class":103},[97,92052,92053,92055,92057,92059,92061,92063],{"class":99,"line":1393},[97,92054,52328],{"class":103},[97,92056,108],{"class":107},[97,92058,51534],{"class":111},[97,92060,115],{"class":103},[97,92062,51539],{"class":118},[97,92064,59311],{"class":103},[97,92066,92067,92069,92071,92073,92075,92077,92079,92081,92083],{"class":99,"line":1407},[97,92068,52328],{"class":103},[97,92070,108],{"class":107},[97,92072,51550],{"class":111},[97,92074,115],{"class":103},[97,92076,51555],{"class":118},[97,92078,122],{"class":111},[97,92080,115],{"class":103},[97,92082,51562],{"class":118},[97,92084,59311],{"class":103},[97,92086,92087,92089,92091,92093,92095,92097,92099,92101,92103],{"class":99,"line":1413},[97,92088,52328],{"class":103},[97,92090,108],{"class":107},[97,92092,112],{"class":111},[97,92094,115],{"class":103},[97,92096,119],{"class":118},[97,92098,122],{"class":111},[97,92100,115],{"class":103},[97,92102,127],{"class":118},[97,92104,59311],{"class":103},[97,92106,92107,92109,92111,92113,92115,92118,92120,92122,92125],{"class":99,"line":1504},[97,92108,52328],{"class":103},[97,92110,108],{"class":107},[97,92112,112],{"class":111},[97,92114,115],{"class":103},[97,92116,92117],{"class":118},"\"referrer\"",[97,92119,122],{"class":111},[97,92121,115],{"class":103},[97,92123,92124],{"class":118},"\"never\"",[97,92126,59311],{"class":103},[97,92128,92129,92131,92133,92136,92138],{"class":99,"line":1510},[97,92130,52328],{"class":103},[97,92132,51591],{"class":107},[97,92134,92135],{"class":103},">综合案例\u003C\u002F",[97,92137,51591],{"class":107},[97,92139,130],{"class":103},[97,92141,92142,92144,92146],{"class":99,"line":1522},[97,92143,52328],{"class":103},[97,92145,231],{"class":107},[97,92147,130],{"class":103},[97,92149,92150,92152],{"class":99,"line":1804},[97,92151,6594],{"class":107},[97,92153,15762],{"class":103},[97,92155,92156,92158,92160,92162],{"class":99,"line":1809},[97,92157,54879],{"class":370},[97,92159,51621],{"class":103},[97,92161,511],{"class":370},[97,92163,1483],{"class":103},[97,92165,92166,92168,92170,92172],{"class":99,"line":1815},[97,92167,54890],{"class":370},[97,92169,51621],{"class":103},[97,92171,511],{"class":370},[97,92173,1483],{"class":103},[97,92175,92176,92178,92180,92182],{"class":99,"line":1820},[97,92177,72780],{"class":370},[97,92179,51621],{"class":103},[97,92181,60689],{"class":370},[97,92183,1483],{"class":103},[97,92185,92186],{"class":99,"line":1834},[97,92187,2378],{"class":103},[97,92189,92190],{"class":99,"line":1839},[97,92191,2591],{"emptyLinePlaceholder":249},[97,92193,92194,92197],{"class":99,"line":1845},[97,92195,92196],{"class":111},"    .container",[97,92198,15762],{"class":103},[97,92200,92201,92203,92205,92208,92210],{"class":99,"line":1866},[97,92202,54955],{"class":370},[97,92204,51621],{"class":103},[97,92206,92207],{"class":370},"1200",[97,92209,51676],{"class":319},[97,92211,1483],{"class":103},[97,92213,92214,92216,92218,92220,92222],{"class":99,"line":1871},[97,92215,54890],{"class":370},[97,92217,51621],{"class":103},[97,92219,511],{"class":370},[97,92221,51740],{"class":370},[97,92223,1483],{"class":103},[97,92225,92226],{"class":99,"line":1885},[97,92227,2378],{"class":103},[97,92229,92230],{"class":99,"line":1890},[97,92231,2591],{"emptyLinePlaceholder":249},[97,92233,92234,92237,92240],{"class":99,"line":1919},[97,92235,92236],{"class":111},"    .video",[97,92238,92239],{"class":107}," video",[97,92241,15762],{"class":103},[97,92243,92244,92246,92248,92250,92252],{"class":99,"line":1924},[97,92245,54955],{"class":370},[97,92247,51621],{"class":103},[97,92249,631],{"class":370},[97,92251,648],{"class":319},[97,92253,1483],{"class":103},[97,92255,92256,92258,92260,92262,92264,92266],{"class":99,"line":1941},[97,92257,54879],{"class":370},[97,92259,51621],{"class":103},[97,92261,1020],{"class":370},[97,92263,51676],{"class":319},[97,92265,4284],{"class":370},[97,92267,1483],{"class":103},[97,92269,92270],{"class":99,"line":1946},[97,92271,2378],{"class":103},[97,92273,92274],{"class":99,"line":1951},[97,92275,2591],{"emptyLinePlaceholder":249},[97,92277,92278,92281],{"class":99,"line":1956},[97,92279,92280],{"class":111},"    .elevator",[97,92282,15762],{"class":103},[97,92284,92285,92287,92289,92291],{"class":99,"line":1970},[97,92286,54943],{"class":370},[97,92288,51621],{"class":103},[97,92290,86417],{"class":370},[97,92292,1483],{"class":103},[97,92294,92295,92297,92299,92302,92304],{"class":99,"line":1975},[97,92296,55131],{"class":370},[97,92298,51621],{"class":103},[97,92300,92301],{"class":370},"280",[97,92303,51676],{"class":319},[97,92305,1483],{"class":103},[97,92307,92308,92310,92312,92314,92316],{"class":99,"line":2768},[97,92309,86611],{"class":370},[97,92311,51621],{"class":103},[97,92313,1020],{"class":370},[97,92315,51676],{"class":319},[97,92317,1483],{"class":103},[97,92319,92320,92322,92324,92326],{"class":99,"line":2782},[97,92321,86424],{"class":370},[97,92323,51621],{"class":103},[97,92325,86429],{"class":370},[97,92327,1483],{"class":103},[97,92329,92330,92332,92334,92336],{"class":99,"line":2790},[97,92331,61905],{"class":370},[97,92333,51621],{"class":103},[97,92335,61026],{"class":370},[97,92337,1483],{"class":103},[97,92339,92340,92342,92344,92346,92348,92350,92352],{"class":99,"line":2795},[97,92341,62161],{"class":370},[97,92343,51621],{"class":103},[97,92345,537],{"class":370},[97,92347,51676],{"class":319},[97,92349,51705],{"class":370},[97,92351,62428],{"class":370},[97,92353,1483],{"class":103},[97,92355,92356,92358,92360,92362,92364],{"class":99,"line":2801},[97,92357,54955],{"class":370},[97,92359,51621],{"class":103},[97,92361,1227],{"class":370},[97,92363,51676],{"class":319},[97,92365,1483],{"class":103},[97,92367,92368],{"class":99,"line":2807},[97,92369,2378],{"class":103},[97,92371,92372],{"class":99,"line":2812},[97,92373,2591],{"emptyLinePlaceholder":249},[97,92375,92376,92378,92380],{"class":99,"line":8139},[97,92377,92280],{"class":111},[97,92379,1591],{"class":107},[97,92381,15762],{"class":103},[97,92383,92384,92386,92388,92390],{"class":99,"line":8163},[97,92385,55193],{"class":370},[97,92387,51621],{"class":103},[97,92389,61053],{"class":370},[97,92391,1483],{"class":103},[97,92393,92394,92396,92398,92400,92402],{"class":99,"line":8168},[97,92395,54879],{"class":370},[97,92397,51621],{"class":103},[97,92399,766],{"class":370},[97,92401,51676],{"class":319},[97,92403,1483],{"class":103},[97,92405,92406,92408,92410,92412],{"class":99,"line":8174},[97,92407,64154],{"class":370},[97,92409,51621],{"class":103},[97,92411,54921],{"class":370},[97,92413,1483],{"class":103},[97,92415,92416,92418,92420,92422],{"class":99,"line":8201},[97,92417,57470],{"class":370},[97,92419,51621],{"class":103},[97,92421,51776],{"class":370},[97,92423,1483],{"class":103},[97,92425,92426,92428,92430,92432],{"class":99,"line":8206},[97,92427,57600],{"class":370},[97,92429,51621],{"class":103},[97,92431,62254],{"class":370},[97,92433,1483],{"class":103},[97,92435,92436],{"class":99,"line":8212},[97,92437,2378],{"class":103},[97,92439,92440],{"class":99,"line":8224},[97,92441,2591],{"emptyLinePlaceholder":249},[97,92443,92444,92446,92448,92450],{"class":99,"line":8236},[97,92445,92280],{"class":111},[97,92447,1591],{"class":107},[97,92449,64208],{"class":111},[97,92451,15762],{"class":103},[97,92453,92454,92456,92458,92461],{"class":99,"line":8248},[97,92455,57600],{"class":370},[97,92457,51621],{"class":103},[97,92459,92460],{"class":370},"#1286ff",[97,92462,1483],{"class":103},[97,92464,92465],{"class":99,"line":9907},[97,92466,2378],{"class":103},[97,92468,92469,92471,92473],{"class":99,"line":9932},[97,92470,52601],{"class":103},[97,92472,231],{"class":107},[97,92474,130],{"class":103},[97,92476,92477,92479,92481],{"class":99,"line":9955},[97,92478,51969],{"class":103},[97,92480,51522],{"class":107},[97,92482,130],{"class":103},[97,92484,92485],{"class":99,"line":9979},[97,92486,2591],{"emptyLinePlaceholder":249},[97,92488,92489,92491,92493],{"class":99,"line":9984},[97,92490,104],{"class":103},[97,92492,51984],{"class":107},[97,92494,130],{"class":103},[97,92496,92497,92499,92501,92503,92505,92508],{"class":99,"line":9989},[97,92498,52328],{"class":103},[97,92500,51795],{"class":107},[97,92502,53670],{"class":111},[97,92504,115],{"class":103},[97,92506,92507],{"class":118},"\"container\"",[97,92509,130],{"class":103},[97,92511,92512,92514,92516,92518,92520,92523],{"class":99,"line":9994},[97,92513,51529],{"class":103},[97,92515,51795],{"class":107},[97,92517,53670],{"class":111},[97,92519,115],{"class":103},[97,92521,92522],{"class":118},"\"header\"",[97,92524,130],{"class":103},[97,92526,92527,92529,92531,92533,92535,92538],{"class":99,"line":10003},[97,92528,55418],{"class":103},[97,92530,558],{"class":107},[97,92532,61241],{"class":111},[97,92534,115],{"class":103},[97,92536,92537],{"class":118},"\"http:\u002F\u002Fpip.itcast.cn\"",[97,92539,130],{"class":103},[97,92541,92542,92544,92546,92548,92550,92553,92555,92557,92559],{"class":99,"line":10008},[97,92543,55486],{"class":103},[97,92545,19],{"class":107},[97,92547,55423],{"class":111},[97,92549,115],{"class":103},[97,92551,92552],{"class":118},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[97,92554,55431],{"class":111},[97,92556,115],{"class":103},[97,92558,7843],{"class":118},[97,92560,59311],{"class":103},[97,92562,92563,92565,92567],{"class":99,"line":10014},[97,92564,55591],{"class":103},[97,92566,558],{"class":107},[97,92568,130],{"class":103},[97,92570,92571,92573,92575],{"class":99,"line":10035},[97,92572,51960],{"class":103},[97,92574,51795],{"class":107},[97,92576,130],{"class":103},[97,92578,92579,92581,92583,92585,92587,92590],{"class":99,"line":10041},[97,92580,51529],{"class":103},[97,92582,51795],{"class":107},[97,92584,53670],{"class":111},[97,92586,115],{"class":103},[97,92588,92589],{"class":118},"\"video\"",[97,92591,130],{"class":103},[97,92593,92594,92596,92598,92600,92602,92605,92608,92610,92612],{"class":99,"line":10055},[97,92595,55418],{"class":103},[97,92597,28373],{"class":107},[97,92599,55423],{"class":111},[97,92601,115],{"class":103},[97,92603,92604],{"class":118},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[97,92606,92607],{"class":111}," controls",[97,92609,55498],{"class":103},[97,92611,28373],{"class":107},[97,92613,130],{"class":103},[97,92615,92616,92618,92620],{"class":99,"line":10061},[97,92617,51960],{"class":103},[97,92619,51795],{"class":107},[97,92621,130],{"class":103},[97,92623,92624,92626,92628,92630,92632,92635],{"class":99,"line":10088},[97,92625,51529],{"class":103},[97,92627,51795],{"class":107},[97,92629,53670],{"class":111},[97,92631,115],{"class":103},[97,92633,92634],{"class":118},"\"elevator\"",[97,92636,130],{"class":103},[97,92638,92639,92641,92643,92645,92647,92649,92652,92654,92656,92659,92661],{"class":99,"line":10097},[97,92640,55418],{"class":103},[97,92642,558],{"class":107},[97,92644,61241],{"class":111},[97,92646,115],{"class":103},[97,92648,64420],{"class":118},[97,92650,92651],{"class":111}," data-ref",[97,92653,115],{"class":103},[97,92655,92589],{"class":118},[97,92657,92658],{"class":103},">视频介绍\u003C\u002F",[97,92660,558],{"class":107},[97,92662,130],{"class":103},[97,92664,92665,92667,92669,92671,92673,92675,92677,92679,92682,92685,92687],{"class":99,"line":10103},[97,92666,55418],{"class":103},[97,92668,558],{"class":107},[97,92670,61241],{"class":111},[97,92672,115],{"class":103},[97,92674,64420],{"class":118},[97,92676,92651],{"class":111},[97,92678,115],{"class":103},[97,92680,92681],{"class":118},"\"intro\"",[97,92683,92684],{"class":103},">课程简介\u003C\u002F",[97,92686,558],{"class":107},[97,92688,130],{"class":103},[97,92690,92691,92693,92695,92697,92699,92701,92703,92705,92708,92711,92713],{"class":99,"line":10111},[97,92692,55418],{"class":103},[97,92694,558],{"class":107},[97,92696,61241],{"class":111},[97,92698,115],{"class":103},[97,92700,64420],{"class":118},[97,92702,92651],{"class":111},[97,92704,115],{"class":103},[97,92706,92707],{"class":118},"\"outline\"",[97,92709,92710],{"class":103},">评论列表\u003C\u002F",[97,92712,558],{"class":107},[97,92714,130],{"class":103},[97,92716,92717,92719,92721],{"class":99,"line":10116},[97,92718,51960],{"class":103},[97,92720,51795],{"class":107},[97,92722,130],{"class":103},[97,92724,92725,92727,92729],{"class":99,"line":16794},[97,92726,52601],{"class":103},[97,92728,51795],{"class":107},[97,92730,130],{"class":103},[97,92732,92733,92735,92737,92739,92741,92744,92746,92748],{"class":99,"line":16800},[97,92734,52328],{"class":103},[97,92736,51997],{"class":107},[97,92738,55423],{"class":111},[97,92740,115],{"class":103},[97,92742,92743],{"class":118},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[97,92745,55498],{"class":103},[97,92747,51997],{"class":107},[97,92749,130],{"class":103},[97,92751,92752,92754,92756],{"class":99,"line":16823},[97,92753,52328],{"class":103},[97,92755,51997],{"class":107},[97,92757,130],{"class":103},[97,92759,92760],{"class":99,"line":16829},[97,92761,92762],{"class":191},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[97,92764,92765,92767,92769,92771,92773,92775,92777,92780],{"class":99,"line":16852},[97,92766,11412],{"class":319},[97,92768,92239],{"class":370},[97,92770,13755],{"class":319},[97,92772,54580],{"class":103},[97,92774,54583],{"class":111},[97,92776,323],{"class":103},[97,92778,92779],{"class":118},"'video'",[97,92781,329],{"class":103},[97,92783,92784],{"class":99,"line":16866},[97,92785,92786],{"class":191},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[97,92788,92789,92792,92794,92796,92798,92801,92803],{"class":99,"line":16886},[97,92790,92791],{"class":103},"    video.ontimeupdate ",[97,92793,115],{"class":319},[97,92795,88539],{"class":103},[97,92797,91357],{"class":111},[97,92799,92800],{"class":103},"(() ",[97,92802,84906],{"class":319},[97,92804,15762],{"class":103},[97,92806,92807],{"class":99,"line":16892},[97,92808,92809],{"class":191},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[97,92811,92812],{"class":99,"line":16903},[97,92813,92814],{"class":191},"      \u002F\u002F 控制台输出当前的时间\n",[97,92816,92817,92820],{"class":99,"line":16926},[97,92818,92819],{"class":191},"      \u002F\u002F console.log(video.currentTime)",[97,92821,92822],{"class":191},"  \u002F\u002F获得当前的视频时间\n",[97,92824,92825],{"class":99,"line":16948},[97,92826,92827],{"class":191},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[97,92829,92830,92832,92834,92836,92839],{"class":99,"line":16953},[97,92831,74867],{"class":103},[97,92833,71838],{"class":111},[97,92835,323],{"class":103},[97,92837,92838],{"class":118},"'currentTime'",[97,92840,92841],{"class":103},", video.currentTime)\n",[97,92843,92844,92846,92848],{"class":99,"line":16959},[97,92845,54719],{"class":103},[97,92847,6601],{"class":370},[97,92849,329],{"class":103},[97,92851,92852],{"class":99,"line":16973},[97,92853,92854],{"class":191},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[97,92856,92857,92860,92863,92865,92868,92870],{"class":99,"line":16986},[97,92858,92859],{"class":103},"    video.",[97,92861,92862],{"class":111},"onloadeddata",[97,92864,13755],{"class":319},[97,92866,92867],{"class":103}," () ",[97,92869,84906],{"class":319},[97,92871,15762],{"class":103},[97,92873,92874],{"class":99,"line":16991},[97,92875,60196],{"class":191},[97,92877,92878],{"class":99,"line":17005},[97,92879,92880],{"class":191},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[97,92882,92883,92886,92888,92891,92893,92895,92897,92899,92901],{"class":99,"line":17010},[97,92884,92885],{"class":103},"      video.currentTime ",[97,92887,115],{"class":319},[97,92889,92890],{"class":103}," localStorage.",[97,92892,71869],{"class":111},[97,92894,323],{"class":103},[97,92896,92838],{"class":118},[97,92898,13905],{"class":103},[97,92900,71541],{"class":319},[97,92902,47523],{"class":370},[97,92904,92905],{"class":99,"line":17016},[97,92906,2378],{"class":103},[97,92908,92909,92911,92913],{"class":99,"line":17021},[97,92910,52601],{"class":103},[97,92912,51997],{"class":107},[97,92914,130],{"class":103},[97,92916,92917,92919,92921],{"class":99,"line":17035},[97,92918,51969],{"class":103},[97,92920,51984],{"class":107},[97,92922,130],{"class":103},[97,92924,92925],{"class":99,"line":17040},[97,92926,2591],{"emptyLinePlaceholder":249},[97,92928,92929,92931,92933],{"class":99,"line":17045},[97,92930,51969],{"class":103},[97,92932,50825],{"class":107},[97,92934,130],{"class":103},[231,92936,92937],{},"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":92,"searchDepth":195,"depth":195,"links":92939},[92940,92945,92949,92950,92951,92956,92961,92962,92963,92964,92971,92976,92977,92987,92991,92992,92996],{"id":76875,"depth":195,"text":76876,"children":92941},[92942,92943,92944],{"id":76879,"depth":241,"text":76880},{"id":76904,"depth":241,"text":76905},{"id":76916,"depth":241,"text":76917},{"id":76928,"depth":195,"text":76929,"children":92946},[92947,92948],{"id":76932,"depth":241,"text":76933},{"id":76947,"depth":241,"text":76948},{"id":76999,"depth":195,"text":77000},{"id":77043,"depth":195,"text":77044},{"id":77060,"depth":195,"text":77061,"children":92952},[92953,92954,92955],{"id":77064,"depth":241,"text":77065},{"id":77077,"depth":241,"text":77078},{"id":77182,"depth":241,"text":77183},{"id":77471,"depth":195,"text":77472,"children":92957},[92958,92959,92960],{"id":77475,"depth":241,"text":77476},{"id":77918,"depth":241,"text":77919},{"id":78329,"depth":241,"text":78330},{"id":78392,"depth":195,"text":78393},{"id":78471,"depth":195,"text":78472},{"id":78564,"depth":195,"text":78565},{"id":80409,"depth":195,"text":80410,"children":92965},[92966,92967,92968,92969,92970],{"id":80413,"depth":241,"text":80414},{"id":80425,"depth":241,"text":80426},{"id":80644,"depth":241,"text":80645},{"id":80662,"depth":241,"text":80663},{"id":80722,"depth":241,"text":80723},{"id":84990,"depth":195,"text":84991,"children":92972},[92973,92974,92975],{"id":84994,"depth":241,"text":84995},{"id":85012,"depth":241,"text":85013},{"id":85038,"depth":241,"text":85039},{"id":85047,"depth":195,"text":85048},{"id":85069,"depth":195,"text":85070,"children":92978},[92979,92980,92981,92982,92983,92984,92985,92986],{"id":85073,"depth":241,"text":85074},{"id":85334,"depth":241,"text":85335},{"id":85520,"depth":241,"text":85521},{"id":85887,"depth":241,"text":85888},{"id":86003,"depth":241,"text":86004},{"id":86039,"depth":241,"text":86040},{"id":86086,"depth":241,"text":86087},{"id":86120,"depth":241,"text":86121},{"id":87483,"depth":195,"text":87484,"children":92988},[92989,92990],{"id":87487,"depth":241,"text":87488},{"id":87524,"depth":241,"text":87525},{"id":88879,"depth":195,"text":88880},{"id":89250,"depth":195,"text":89251,"children":92993},[92994,92995],{"id":89254,"depth":241,"text":89255},{"id":89288,"depth":241,"text":89289},{"id":90017,"depth":195,"text":90018,"children":92997},[92998,92999,93000,93001],{"id":90021,"depth":241,"text":90022},{"id":90979,"depth":241,"text":90980},{"id":91921,"depth":241,"text":91922},{"id":91995,"depth":241,"text":91996},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76864,"description":246},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93008,"title":93009,"body":93010,"description":93021,"extension":247,"meta":93022,"navigation":249,"path":93024,"seo":93025,"stem":93026,"__hash__":93027},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93011,"toc":93019},[93012],[24,93013,93014,93015],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[558,93016,93017],{"href":93017,"rel":93018},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24054],{"title":92,"searchDepth":195,"depth":195,"links":93020},[],"三件套第三套学习",{"category":93023},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93009,"description":93021},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93029,"title":93030,"body":93031,"description":246,"extension":247,"meta":93136,"navigation":249,"path":93137,"seo":93138,"stem":93139,"__hash__":93140},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93032,"toc":93131},[93033,93040,93043,93046,93049,93053,93062,93065,93068,93072,93081,93084,93088,93091,93111,93114,93128],[24,93034,93035],{},[558,93036,93039],{"href":93037,"rel":93038},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24054],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93041,93030],{"id":93042},"_1安装",[24,93044,93045],{},"numpy是科学计算基础库,底层是C语言",[24,93047,93048],{},"三种方式：",[14,93050,93052],{"id":93051},"_11-通过pip安装","1.1 通过pip安装",[87,93054,93056],{"className":30568,"code":93055,"language":30570,"meta":92,"style":92},"pip install numpy\n",[94,93057,93058],{"__ignoreMap":92},[97,93059,93060],{"class":99,"line":100},[97,93061,93055],{"class":103},[24,93063,93064],{},"首选方式，自动处理依赖项",[24,93066,93067],{},"在提示系统命令符中使用cmd",[14,93069,93071],{"id":93070},"_12-通过anaconda安装","1.2 通过Anaconda安装",[87,93073,93075],{"className":30568,"code":93074,"language":30570,"meta":92,"style":92},"conda install numpy\n",[94,93076,93077],{"__ignoreMap":92},[97,93078,93079],{"class":99,"line":100},[97,93080,93074],{"class":103},[24,93082,93083],{},"自动解决环境依赖",[14,93085,93087],{"id":93086},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[24,93089,93090],{},"对于Debian\u002FUbuntu",[87,93092,93094],{"className":30568,"code":93093,"language":30570,"meta":92,"style":92},"sudo apt-get install python3-numpy\n",[94,93095,93096],{"__ignoreMap":92},[97,93097,93098,93101,93103,93106,93108],{"class":99,"line":100},[97,93099,93100],{"class":103},"sudo apt",[97,93102,852],{"class":319},[97,93104,93105],{"class":103},"get install python3",[97,93107,852],{"class":319},[97,93109,93110],{"class":103},"numpy\n",[24,93112,93113],{},"对于Fedora:",[87,93115,93117],{"className":30568,"code":93116,"language":30570,"meta":92,"style":92},"sudo dnf install python3-numpy\n",[94,93118,93119],{"__ignoreMap":92},[97,93120,93121,93124,93126],{"class":99,"line":100},[97,93122,93123],{"class":103},"sudo dnf install python3",[97,93125,852],{"class":319},[97,93127,93110],{"class":103},[231,93129,93130],{},"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":92,"searchDepth":195,"depth":195,"links":93132},[93133,93134,93135],{"id":93051,"depth":195,"text":93052},{"id":93070,"depth":195,"text":93071},{"id":93086,"depth":195,"text":93087},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93030,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93142,"title":93143,"body":93144,"description":246,"extension":247,"meta":93257,"navigation":249,"path":93258,"seo":93259,"stem":93260,"__hash__":93261},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93145,"toc":93255},[93146,93149,93152,93155,93158,93161,93164,93167,93170,93173,93249,93252],[10,93147,93143],{"id":93148},"_10算数函数",[24,93150,93151],{},"加减乘除运算跟python基础语法没区别",[24,93153,93154],{},"除了python那种方法外还可以使用函数",[24,93156,93157],{},"加：np.add(a,b)",[24,93159,93160],{},"减：np.subtract(a,b)",[24,93162,93163],{},"乘：np.multiply(a,b)",[24,93165,93166],{},"除：np.divide(a,b) == a\u002Fb",[24,93168,93169],{},"取余：np.mod(a,b) == a%b",[24,93171,93172],{},"必须会的用法：",[87,93174,93176],{"className":30568,"code":93175,"language":30570,"meta":92,"style":92},"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",[94,93177,93178,93200,93221,93231,93244],{"__ignoreMap":92},[97,93179,93180,93182,93184,93187,93189,93192,93194,93196,93198],{"class":99,"line":100},[97,93181,558],{"class":103},[97,93183,115],{"class":319},[97,93185,93186],{"class":103},"np.arange(",[97,93188,740],{"class":370},[97,93190,93191],{"class":103},").reshape(",[97,93193,392],{"class":370},[97,93195,698],{"class":103},[97,93197,392],{"class":370},[97,93199,329],{"class":103},[97,93201,93202,93204,93206,93209,93211,93213,93215,93217,93219],{"class":99,"line":195},[97,93203,583],{"class":103},[97,93205,115],{"class":319},[97,93207,93208],{"class":103},"np.array([",[97,93210,766],{"class":370},[97,93212,698],{"class":103},[97,93214,766],{"class":370},[97,93216,698],{"class":103},[97,93218,766],{"class":370},[97,93220,4848],{"class":103},[97,93222,93223,93226,93228],{"class":99,"line":241},[97,93224,93225],{"class":103},"result",[97,93227,115],{"class":319},[97,93229,93230],{"class":103},"np.empty_like(a)\n",[97,93232,93233,93236,93239,93241],{"class":99,"line":1387},[97,93234,93235],{"class":103},"np.add(a,b,",[97,93237,93238],{"class":5407},"out",[97,93240,115],{"class":319},[97,93242,93243],{"class":103},"result)\n",[97,93245,93246],{"class":99,"line":1393},[97,93247,93248],{"class":103},"result\n",[24,93250,93251],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[231,93253,93254],{},"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":92,"searchDepth":195,"depth":195,"links":93256},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93143,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93263,"title":93264,"body":93265,"description":246,"extension":247,"meta":94027,"navigation":249,"path":94028,"seo":94029,"stem":94030,"__hash__":94031},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93266,"toc":94014},[93267,93270,93273,93276,93280,93319,93323,93367,93427,93431,93434,93473,93476,93521,93525,93561,93565,93634,93638,93702,93706,93709,93712,93715,93718,93754,93758,93798,93802,93874,93877,93881,93944,93948,94011],[10,93268,93264],{"id":93269},"_11统计函数",[24,93271,93272],{},"sum max min mean",[24,93274,93275],{},"这些有axis参数，可以指定方向",[14,93277,93279],{"id":93278},"_111-sum求和函数","11.1 sum()求和函数",[87,93281,93283],{"className":30568,"code":93282,"language":30570,"meta":92,"style":92},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[94,93284,93285,93290,93311],{"__ignoreMap":92},[97,93286,93287],{"class":99,"line":100},[97,93288,93289],{"class":191},"#创建一维数组\n",[97,93291,93292,93294,93296,93299,93301,93303,93305,93307,93309],{"class":99,"line":195},[97,93293,558],{"class":103},[97,93295,115],{"class":319},[97,93297,93298],{"class":103},"np.random.randint(",[97,93300,537],{"class":370},[97,93302,698],{"class":103},[97,93304,631],{"class":370},[97,93306,698],{"class":103},[97,93308,1020],{"class":370},[97,93310,329],{"class":103},[97,93312,93313,93316],{"class":99,"line":241},[97,93314,93315],{"class":103},"np.sum(a)",[97,93317,93318],{"class":191},"#求和\n",[14,93320,93322],{"id":93321},"_112-max求最大值函数","11.2 max()求最大值函数",[87,93324,93326],{"className":30568,"code":93325,"language":30570,"meta":92,"style":92},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[94,93327,93328,93332,93352,93357,93362],{"__ignoreMap":92},[97,93329,93330],{"class":99,"line":100},[97,93331,93289],{"class":191},[97,93333,93334,93336,93338,93340,93342,93344,93346,93348,93350],{"class":99,"line":195},[97,93335,558],{"class":103},[97,93337,115],{"class":319},[97,93339,93298],{"class":103},[97,93341,537],{"class":370},[97,93343,698],{"class":103},[97,93345,631],{"class":370},[97,93347,698],{"class":103},[97,93349,1020],{"class":370},[97,93351,329],{"class":103},[97,93353,93354],{"class":99,"line":241},[97,93355,93356],{"class":103},"np.max(a)\n",[97,93358,93359],{"class":99,"line":1387},[97,93360,93361],{"class":191},"#最大索引(求最大元素的索引)arg\n",[97,93363,93364],{"class":99,"line":1393},[97,93365,93366],{"class":103},"np.argmax(a)\n",[87,93368,93370],{"className":30568,"code":93369,"language":30570,"meta":92,"style":92},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[94,93371,93372,93393,93413,93417],{"__ignoreMap":92},[97,93373,93374,93376,93378,93381,93383,93385,93387,93389,93391],{"class":99,"line":100},[97,93375,11110],{"class":103},[97,93377,115],{"class":319},[97,93379,93380],{"class":103}," np.array([",[97,93382,537],{"class":370},[97,93384,12626],{"class":103},[97,93386,639],{"class":370},[97,93388,12626],{"class":103},[97,93390,392],{"class":370},[97,93392,4848],{"class":103},[97,93394,93395,93397,93399,93401,93403,93405,93407,93409,93411],{"class":99,"line":195},[97,93396,11136],{"class":103},[97,93398,115],{"class":319},[97,93400,93380],{"class":103},[97,93402,392],{"class":370},[97,93404,12626],{"class":103},[97,93406,398],{"class":370},[97,93408,12626],{"class":103},[97,93410,613],{"class":370},[97,93412,4848],{"class":103},[97,93414,93415],{"class":99,"line":241},[97,93416,2591],{"emptyLinePlaceholder":249},[97,93418,93419,93421,93424],{"class":99,"line":1387},[97,93420,30605],{"class":370},[97,93422,93423],{"class":103},"(np.maximum(a, b))   ",[97,93425,93426],{"class":191},"# [3 5 4]，每个位置上取较大值\n",[14,93428,93430],{"id":93429},"_113-mean求平均值函数","11.3 mean()求平均值函数",[24,93432,93433],{},"①一维数组：",[87,93435,93437],{"className":30568,"code":93436,"language":30570,"meta":92,"style":92},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[94,93438,93439,93443,93463,93468],{"__ignoreMap":92},[97,93440,93441],{"class":99,"line":100},[97,93442,93289],{"class":191},[97,93444,93445,93447,93449,93451,93453,93455,93457,93459,93461],{"class":99,"line":195},[97,93446,558],{"class":103},[97,93448,115],{"class":319},[97,93450,93298],{"class":103},[97,93452,537],{"class":370},[97,93454,698],{"class":103},[97,93456,631],{"class":370},[97,93458,698],{"class":103},[97,93460,1020],{"class":370},[97,93462,329],{"class":103},[97,93464,93465],{"class":99,"line":241},[97,93466,93467],{"class":191},"#求平均值\n",[97,93469,93470],{"class":99,"line":1387},[97,93471,93472],{"class":103},"np.mean(a)\n",[24,93474,93475],{},"②二维数组",[87,93477,93479],{"className":30568,"code":93478,"language":30570,"meta":92,"style":92},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[94,93480,93481,93486,93511,93516],{"__ignoreMap":92},[97,93482,93483],{"class":99,"line":100},[97,93484,93485],{"class":191},"#二维数组\n",[97,93487,93488,93491,93493,93495,93497,93499,93501,93503,93505,93507,93509],{"class":99,"line":195},[97,93489,93490],{"class":103},"aa",[97,93492,115],{"class":319},[97,93494,93186],{"class":103},[97,93496,537],{"class":370},[97,93498,698],{"class":103},[97,93500,843],{"class":370},[97,93502,93191],{"class":103},[97,93504,392],{"class":370},[97,93506,698],{"class":103},[97,93508,613],{"class":370},[97,93510,329],{"class":103},[97,93512,93513],{"class":99,"line":241},[97,93514,93515],{"class":191},"#对数组中的所有数求平均\n",[97,93517,93518],{"class":99,"line":1387},[97,93519,93520],{"class":103},"np.mean(aa)\n",[14,93522,93524],{"id":93523},"_114-median求中位数函数","11.4 median()求中位数函数",[87,93526,93528],{"className":30568,"code":93527,"language":30570,"meta":92,"style":92},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[94,93529,93530,93535,93551,93556],{"__ignoreMap":92},[97,93531,93532],{"class":99,"line":100},[97,93533,93534],{"class":191},"#求中位数\n",[97,93536,93537,93539,93541,93543,93545,93547,93549],{"class":99,"line":195},[97,93538,583],{"class":103},[97,93540,115],{"class":319},[97,93542,93186],{"class":103},[97,93544,537],{"class":370},[97,93546,698],{"class":103},[97,93548,766],{"class":370},[97,93550,329],{"class":103},[97,93552,93553],{"class":99,"line":241},[97,93554,93555],{"class":103},"np.median(b)\n",[97,93557,93558],{"class":99,"line":1387},[97,93559,93560],{"class":191},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93562,93564],{"id":93563},"_115-power求幂运算函数","11.5 power()求幂运算函数",[87,93566,93568],{"className":30568,"code":93567,"language":30570,"meta":92,"style":92},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[94,93569,93570,93586,93591,93596,93605,93610,93619],{"__ignoreMap":92},[97,93571,93572,93574,93576,93578,93580,93582,93584],{"class":99,"line":100},[97,93573,583],{"class":103},[97,93575,115],{"class":319},[97,93577,93186],{"class":103},[97,93579,537],{"class":370},[97,93581,698],{"class":103},[97,93583,766],{"class":370},[97,93585,329],{"class":103},[97,93587,93588],{"class":99,"line":195},[97,93589,93590],{"class":191},"#幂运算\n",[97,93592,93593],{"class":99,"line":241},[97,93594,93595],{"class":191},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[97,93597,93598,93601,93603],{"class":99,"line":1387},[97,93599,93600],{"class":103},"np.power(b,",[97,93602,398],{"class":370},[97,93604,329],{"class":103},[97,93606,93607],{"class":99,"line":1393},[97,93608,93609],{"class":191},"#或者以下代码，将数据存储起来\n",[97,93611,93612,93614,93616],{"class":99,"line":1407},[97,93613,1165],{"class":103},[97,93615,115],{"class":319},[97,93617,93618],{"class":103},"np.empty_like(b)\n",[97,93620,93621,93623,93625,93627,93629,93631],{"class":99,"line":1413},[97,93622,93600],{"class":103},[97,93624,398],{"class":370},[97,93626,698],{"class":103},[97,93628,93238],{"class":5407},[97,93630,115],{"class":319},[97,93632,93633],{"class":103},"y)\n",[14,93635,93637],{"id":93636},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[87,93639,93641],{"className":30568,"code":93640,"language":30570,"meta":92,"style":92},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[94,93642,93643,93659,93664,93669,93673,93691],{"__ignoreMap":92},[97,93644,93645,93647,93649,93651,93653,93655,93657],{"class":99,"line":100},[97,93646,583],{"class":103},[97,93648,115],{"class":319},[97,93650,93186],{"class":103},[97,93652,537],{"class":370},[97,93654,698],{"class":103},[97,93656,766],{"class":370},[97,93658,329],{"class":103},[97,93660,93661],{"class":99,"line":195},[97,93662,93663],{"class":191},"#开方\n",[97,93665,93666],{"class":99,"line":241},[97,93667,93668],{"class":103},"np.sqrt(b)\n",[97,93670,93671],{"class":99,"line":1387},[97,93672,93609],{"class":191},[97,93674,93675,93677,93679,93682,93685,93687,93689],{"class":99,"line":1393},[97,93676,1165],{"class":103},[97,93678,115],{"class":319},[97,93680,93681],{"class":103},"np.empty_like(b,",[97,93683,93684],{"class":5407},"dtype",[97,93686,115],{"class":319},[97,93688,362],{"class":370},[97,93690,329],{"class":103},[97,93692,93693,93696,93698,93700],{"class":99,"line":1407},[97,93694,93695],{"class":103},"np.sqrt(b,",[97,93697,93238],{"class":5407},[97,93699,115],{"class":319},[97,93701,93633],{"class":103},[14,93703,93705],{"id":93704},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[24,93707,93708],{},"对数组中的元素累计求和，可指定轴",[24,93710,93711],{},"#累计求和的意思是：",[24,93713,93714],{},"a = np.array([1, 2, 3, 4])",[24,93716,93717],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[87,93719,93721],{"className":30568,"code":93720,"language":30570,"meta":92,"style":92},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[94,93722,93723,93739,93744,93749],{"__ignoreMap":92},[97,93724,93725,93727,93729,93731,93733,93735,93737],{"class":99,"line":100},[97,93726,583],{"class":103},[97,93728,115],{"class":319},[97,93730,93186],{"class":103},[97,93732,537],{"class":370},[97,93734,698],{"class":103},[97,93736,766],{"class":370},[97,93738,329],{"class":103},[97,93740,93741],{"class":99,"line":195},[97,93742,93743],{"class":103},"np.cumsum(b)\n",[97,93745,93746],{"class":99,"line":241},[97,93747,93748],{"class":191},"#结果：\n",[97,93750,93751],{"class":99,"line":1387},[97,93752,93753],{"class":191},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93755,93757],{"id":93756},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[87,93759,93761],{"className":30568,"code":93760,"language":30570,"meta":92,"style":92},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[94,93762,93763,93779,93784,93789,93793],{"__ignoreMap":92},[97,93764,93765,93767,93769,93771,93773,93775,93777],{"class":99,"line":100},[97,93766,583],{"class":103},[97,93768,115],{"class":319},[97,93770,93186],{"class":103},[97,93772,537],{"class":370},[97,93774,698],{"class":103},[97,93776,766],{"class":370},[97,93778,329],{"class":103},[97,93780,93781],{"class":99,"line":195},[97,93782,93783],{"class":191},"#对数组中的元素累计求积，可指定轴\n",[97,93785,93786],{"class":99,"line":241},[97,93787,93788],{"class":103},"np.cumprod(b)\n",[97,93790,93791],{"class":99,"line":1387},[97,93792,93748],{"class":191},[97,93794,93795],{"class":99,"line":1393},[97,93796,93797],{"class":191},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93799,93801],{"id":93800},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[87,93803,93805],{"className":30568,"code":93804,"language":30570,"meta":92,"style":92},"#删除数组中的重复数据，并对数据进行排序\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",[94,93806,93807,93812,93860,93865,93869],{"__ignoreMap":92},[97,93808,93809],{"class":99,"line":100},[97,93810,93811],{"class":191},"#删除数组中的重复数据，并对数据进行排序\n",[97,93813,93814,93816,93818,93820,93822,93824,93826,93828,93830,93832,93834,93836,93838,93840,93842,93844,93846,93848,93850,93852,93854,93856,93858],{"class":99,"line":195},[97,93815,558],{"class":103},[97,93817,115],{"class":319},[97,93819,93208],{"class":103},[97,93821,537],{"class":370},[97,93823,698],{"class":103},[97,93825,398],{"class":370},[97,93827,698],{"class":103},[97,93829,392],{"class":370},[97,93831,698],{"class":103},[97,93833,818],{"class":370},[97,93835,698],{"class":103},[97,93837,392],{"class":370},[97,93839,698],{"class":103},[97,93841,766],{"class":370},[97,93843,698],{"class":103},[97,93845,517],{"class":370},[97,93847,698],{"class":103},[97,93849,511],{"class":370},[97,93851,698],{"class":103},[97,93853,1095],{"class":370},[97,93855,698],{"class":103},[97,93857,613],{"class":370},[97,93859,4848],{"class":103},[97,93861,93862],{"class":99,"line":241},[97,93863,93864],{"class":103},"np.unique(a)\n",[97,93866,93867],{"class":99,"line":1387},[97,93868,93748],{"class":191},[97,93870,93871],{"class":99,"line":1393},[97,93872,93873],{"class":191},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[24,93875,93876],{},"升序形式排序",[14,93878,93880],{"id":93879},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[87,93882,93884],{"className":30568,"code":93883,"language":30570,"meta":92,"style":92},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[94,93885,93886,93934,93939],{"__ignoreMap":92},[97,93887,93888,93890,93892,93894,93896,93898,93900,93902,93904,93906,93908,93910,93912,93914,93916,93918,93920,93922,93924,93926,93928,93930,93932],{"class":99,"line":100},[97,93889,558],{"class":103},[97,93891,115],{"class":319},[97,93893,93208],{"class":103},[97,93895,537],{"class":370},[97,93897,698],{"class":103},[97,93899,398],{"class":370},[97,93901,698],{"class":103},[97,93903,392],{"class":370},[97,93905,698],{"class":103},[97,93907,818],{"class":370},[97,93909,698],{"class":103},[97,93911,392],{"class":370},[97,93913,698],{"class":103},[97,93915,766],{"class":370},[97,93917,698],{"class":103},[97,93919,517],{"class":370},[97,93921,698],{"class":103},[97,93923,511],{"class":370},[97,93925,698],{"class":103},[97,93927,1095],{"class":370},[97,93929,698],{"class":103},[97,93931,613],{"class":370},[97,93933,4848],{"class":103},[97,93935,93936],{"class":99,"line":195},[97,93937,93938],{"class":191},"#返回数组中非零元素的索引\n",[97,93940,93941],{"class":99,"line":241},[97,93942,93943],{"class":103},"np.nonzero(a)\n",[14,93945,93947],{"id":93946},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[87,93949,93951],{"className":30568,"code":93950,"language":30570,"meta":92,"style":92},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[94,93952,93953,94001,94006],{"__ignoreMap":92},[97,93954,93955,93957,93959,93961,93963,93965,93967,93969,93971,93973,93975,93977,93979,93981,93983,93985,93987,93989,93991,93993,93995,93997,93999],{"class":99,"line":100},[97,93956,558],{"class":103},[97,93958,115],{"class":319},[97,93960,93208],{"class":103},[97,93962,537],{"class":370},[97,93964,698],{"class":103},[97,93966,398],{"class":370},[97,93968,698],{"class":103},[97,93970,392],{"class":370},[97,93972,698],{"class":103},[97,93974,818],{"class":370},[97,93976,698],{"class":103},[97,93978,392],{"class":370},[97,93980,698],{"class":103},[97,93982,766],{"class":370},[97,93984,698],{"class":103},[97,93986,517],{"class":370},[97,93988,698],{"class":103},[97,93990,511],{"class":370},[97,93992,698],{"class":103},[97,93994,1095],{"class":370},[97,93996,698],{"class":103},[97,93998,613],{"class":370},[97,94000,4848],{"class":103},[97,94002,94003],{"class":99,"line":195},[97,94004,94005],{"class":191},"#计算一组数中最大值与最小值的差，可指定轴\n",[97,94007,94008],{"class":99,"line":241},[97,94009,94010],{"class":103},"np.ptp(a)\n",[231,94012,94013],{},"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":92,"searchDepth":195,"depth":195,"links":94015},[94016,94017,94018,94019,94020,94021,94022,94023,94024,94025,94026],{"id":93278,"depth":195,"text":93279},{"id":93321,"depth":195,"text":93322},{"id":93429,"depth":195,"text":93430},{"id":93523,"depth":195,"text":93524},{"id":93563,"depth":195,"text":93564},{"id":93636,"depth":195,"text":93637},{"id":93704,"depth":195,"text":93705},{"id":93756,"depth":195,"text":93757},{"id":93800,"depth":195,"text":93801},{"id":93879,"depth":195,"text":93880},{"id":93946,"depth":195,"text":93947},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93264,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94033,"title":94034,"body":94035,"description":246,"extension":247,"meta":94690,"navigation":249,"path":94691,"seo":94692,"stem":94693,"__hash__":94694},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94036,"toc":94678},[94037,94040,94044,94047,94263,94267,94270,94479,94483,94549,94554,94558,94561,94564,94602,94606,94609,94614,94618,94621,94624,94629,94633,94636,94640,94643,94646,94651,94655,94658,94661,94666,94670,94675],[10,94038,94034],{"id":94039},"_12其他常用函数",[14,94041,94043],{"id":94042},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[24,94045,94046],{},"将数组的数据按照行列复制扩展",[87,94048,94050],{"className":30568,"code":94049,"language":30570,"meta":92,"style":92},"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",[94,94051,94052,94068,94077,94081,94086,94091,94104,94108,94113,94118,94123,94127,94132,94156,94168,94172,94176,94181,94186,94191,94196,94200,94213,94217,94221,94226,94231,94236,94241,94246,94250,94254,94259],{"__ignoreMap":92},[97,94053,94054,94056,94058,94060,94062,94064,94066],{"class":99,"line":100},[97,94055,558],{"class":103},[97,94057,115],{"class":319},[97,94059,93186],{"class":103},[97,94061,537],{"class":370},[97,94063,698],{"class":103},[97,94065,639],{"class":370},[97,94067,329],{"class":103},[97,94069,94070,94073,94075],{"class":99,"line":195},[97,94071,94072],{"class":103},"np.tile(a,",[97,94074,398],{"class":370},[97,94076,329],{"class":103},[97,94078,94079],{"class":99,"line":241},[97,94080,93748],{"class":191},[97,94082,94083],{"class":99,"line":1387},[97,94084,94085],{"class":191},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[97,94087,94088],{"class":99,"line":1393},[97,94089,94090],{"class":191},"#行复制两次，列复制三次\n",[97,94092,94093,94096,94098,94100,94102],{"class":99,"line":1407},[97,94094,94095],{"class":103},"np.tile(a,(",[97,94097,398],{"class":370},[97,94099,698],{"class":103},[97,94101,392],{"class":370},[97,94103,30687],{"class":103},[97,94105,94106],{"class":99,"line":1413},[97,94107,93748],{"class":191},[97,94109,94110],{"class":99,"line":1504},[97,94111,94112],{"class":118},"'''\n",[97,94114,94115],{"class":99,"line":1510},[97,94116,94117],{"class":118},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[97,94119,94120],{"class":99,"line":1522},[97,94121,94122],{"class":118},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[97,94124,94125],{"class":99,"line":1804},[97,94126,94112],{"class":118},[97,94128,94129],{"class":99,"line":1809},[97,94130,94131],{"class":191},"#创建二维数组\n",[97,94133,94134,94136,94138,94140,94142,94144,94146,94148,94150,94152,94154],{"class":99,"line":1815},[97,94135,93490],{"class":103},[97,94137,115],{"class":319},[97,94139,93186],{"class":103},[97,94141,537],{"class":370},[97,94143,698],{"class":103},[97,94145,843],{"class":370},[97,94147,93191],{"class":103},[97,94149,613],{"class":370},[97,94151,698],{"class":103},[97,94153,392],{"class":370},[97,94155,329],{"class":103},[97,94157,94158,94161,94163,94165],{"class":99,"line":1820},[97,94159,94160],{"class":103},"np.tile(aa,",[97,94162,398],{"class":370},[97,94164,749],{"class":103},[97,94166,94167],{"class":191},"#一个数的时候就是行\n",[97,94169,94170],{"class":99,"line":1834},[97,94171,93748],{"class":191},[97,94173,94174],{"class":99,"line":1839},[97,94175,94112],{"class":118},[97,94177,94178],{"class":99,"line":1845},[97,94179,94180],{"class":118},"array([[ 1,  2,  3,  1,  2,  3],\n",[97,94182,94183],{"class":99,"line":1866},[97,94184,94185],{"class":118},"       [ 4,  5,  6,  4,  5,  6],\n",[97,94187,94188],{"class":99,"line":1871},[97,94189,94190],{"class":118},"       [ 7,  8,  9,  7,  8,  9],\n",[97,94192,94193],{"class":99,"line":1885},[97,94194,94195],{"class":118},"       [10, 11, 12, 10, 11, 12]])\n",[97,94197,94198],{"class":99,"line":1890},[97,94199,94112],{"class":118},[97,94201,94202,94205,94207,94209,94211],{"class":99,"line":1919},[97,94203,94204],{"class":103},"np.tile(aa,(",[97,94206,398],{"class":370},[97,94208,698],{"class":103},[97,94210,392],{"class":370},[97,94212,30687],{"class":103},[97,94214,94215],{"class":99,"line":1924},[97,94216,93748],{"class":191},[97,94218,94219],{"class":99,"line":1941},[97,94220,94112],{"class":118},[97,94222,94223],{"class":99,"line":1946},[97,94224,94225],{"class":118},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[97,94227,94228],{"class":99,"line":1951},[97,94229,94230],{"class":118},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[97,94232,94233],{"class":99,"line":1956},[97,94234,94235],{"class":118},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[97,94237,94238],{"class":99,"line":1970},[97,94239,94240],{"class":118},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[97,94242,94243],{"class":99,"line":1975},[97,94244,94245],{"class":118},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[97,94247,94248],{"class":99,"line":2768},[97,94249,94230],{"class":118},[97,94251,94252],{"class":99,"line":2782},[97,94253,94235],{"class":118},[97,94255,94256],{"class":99,"line":2790},[97,94257,94258],{"class":118},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[97,94260,94261],{"class":99,"line":2795},[97,94262,94112],{"class":118},[14,94264,94266],{"id":94265},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[24,94268,94269],{},"repeat()将数组中的每个元素重复若干次",[87,94271,94273],{"className":30568,"code":94272,"language":30570,"meta":92,"style":92},"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",[94,94274,94275,94291,94300,94304,94309,94333,94338,94347,94351,94356,94360,94365,94381,94385,94389,94394,94399,94404,94408,94413,94417,94422,94427,94431,94447,94451,94455,94460,94465,94470,94475],{"__ignoreMap":92},[97,94276,94277,94279,94281,94283,94285,94287,94289],{"class":99,"line":100},[97,94278,558],{"class":103},[97,94280,115],{"class":319},[97,94282,93186],{"class":103},[97,94284,537],{"class":370},[97,94286,698],{"class":103},[97,94288,639],{"class":370},[97,94290,329],{"class":103},[97,94292,94293,94296,94298],{"class":99,"line":195},[97,94294,94295],{"class":103},"np.repeat(a,",[97,94297,392],{"class":370},[97,94299,329],{"class":103},[97,94301,94302],{"class":99,"line":241},[97,94303,93748],{"class":191},[97,94305,94306],{"class":99,"line":1387},[97,94307,94308],{"class":191},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[97,94310,94311,94313,94315,94317,94319,94321,94323,94325,94327,94329,94331],{"class":99,"line":1393},[97,94312,93490],{"class":103},[97,94314,115],{"class":319},[97,94316,93186],{"class":103},[97,94318,537],{"class":370},[97,94320,698],{"class":103},[97,94322,843],{"class":370},[97,94324,93191],{"class":103},[97,94326,613],{"class":370},[97,94328,698],{"class":103},[97,94330,392],{"class":370},[97,94332,329],{"class":103},[97,94334,94335],{"class":99,"line":1407},[97,94336,94337],{"class":191},"#这个重复之后二维变成一维\n",[97,94339,94340,94343,94345],{"class":99,"line":1413},[97,94341,94342],{"class":103},"np.repeat(aa,",[97,94344,398],{"class":370},[97,94346,329],{"class":103},[97,94348,94349],{"class":99,"line":1504},[97,94350,94112],{"class":118},[97,94352,94353],{"class":99,"line":1510},[97,94354,94355],{"class":118},"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",[97,94357,94358],{"class":99,"line":1522},[97,94359,94112],{"class":118},[97,94361,94362],{"class":99,"line":1804},[97,94363,94364],{"class":191},"#指定axis\n",[97,94366,94367,94369,94371,94373,94375,94377,94379],{"class":99,"line":1809},[97,94368,94342],{"class":103},[97,94370,398],{"class":370},[97,94372,698],{"class":103},[97,94374,47704],{"class":5407},[97,94376,115],{"class":319},[97,94378,511],{"class":370},[97,94380,329],{"class":103},[97,94382,94383],{"class":99,"line":1815},[97,94384,93748],{"class":191},[97,94386,94387],{"class":99,"line":1820},[97,94388,94112],{"class":118},[97,94390,94391],{"class":99,"line":1834},[97,94392,94393],{"class":118},"array([[ 1,  2,  3],\n",[97,94395,94396],{"class":99,"line":1839},[97,94397,94398],{"class":118},"       [ 1,  2,  3],\n",[97,94400,94401],{"class":99,"line":1845},[97,94402,94403],{"class":118},"       [ 4,  5,  6],\n",[97,94405,94406],{"class":99,"line":1866},[97,94407,94403],{"class":118},[97,94409,94410],{"class":99,"line":1871},[97,94411,94412],{"class":118},"       [ 7,  8,  9],\n",[97,94414,94415],{"class":99,"line":1885},[97,94416,94412],{"class":118},[97,94418,94419],{"class":99,"line":1890},[97,94420,94421],{"class":118},"       [10, 11, 12],\n",[97,94423,94424],{"class":99,"line":1919},[97,94425,94426],{"class":118},"       [10, 11, 12]])\n",[97,94428,94429],{"class":99,"line":1924},[97,94430,94112],{"class":118},[97,94432,94433,94435,94437,94439,94441,94443,94445],{"class":99,"line":1941},[97,94434,94342],{"class":103},[97,94436,398],{"class":370},[97,94438,698],{"class":103},[97,94440,47704],{"class":5407},[97,94442,115],{"class":319},[97,94444,537],{"class":370},[97,94446,329],{"class":103},[97,94448,94449],{"class":99,"line":1946},[97,94450,93748],{"class":191},[97,94452,94453],{"class":99,"line":1951},[97,94454,94112],{"class":118},[97,94456,94457],{"class":99,"line":1956},[97,94458,94459],{"class":118},"array([[ 1,  1,  2,  2,  3,  3],\n",[97,94461,94462],{"class":99,"line":1970},[97,94463,94464],{"class":118},"       [ 4,  4,  5,  5,  6,  6],\n",[97,94466,94467],{"class":99,"line":1975},[97,94468,94469],{"class":118},"       [ 7,  7,  8,  8,  9,  9],\n",[97,94471,94472],{"class":99,"line":2768},[97,94473,94474],{"class":118},"       [10, 10, 11, 11, 12, 12]])\n",[97,94476,94477],{"class":99,"line":2782},[97,94478,94112],{"class":118},[14,94480,94482],{"id":94481},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[87,94484,94486],{"className":30568,"code":94485,"language":30570,"meta":92,"style":92},"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",[94,94487,94488,94504,94509,94521,94525,94530,94540,94544],{"__ignoreMap":92},[97,94489,94490,94492,94494,94496,94498,94500,94502],{"class":99,"line":100},[97,94491,558],{"class":103},[97,94493,115],{"class":319},[97,94495,93186],{"class":103},[97,94497,537],{"class":370},[97,94499,698],{"class":103},[97,94501,639],{"class":370},[97,94503,329],{"class":103},[97,94505,94506],{"class":99,"line":195},[97,94507,94508],{"class":191},"#array([，2，3，4])\n",[97,94510,94511,94514,94516,94518],{"class":99,"line":241},[97,94512,94513],{"class":103},"np.roll(a,",[97,94515,398],{"class":370},[97,94517,749],{"class":103},[97,94519,94520],{"class":191},"#传正数向后调多少位，传负数向前调多少位\n",[97,94522,94523],{"class":99,"line":1387},[97,94524,93748],{"class":191},[97,94526,94527],{"class":99,"line":1393},[97,94528,94529],{"class":191},"#array([3, 4, 1, 2])\n",[97,94531,94532,94534,94536,94538],{"class":99,"line":1407},[97,94533,94513],{"class":103},[97,94535,852],{"class":319},[97,94537,537],{"class":370},[97,94539,329],{"class":103},[97,94541,94542],{"class":99,"line":1413},[97,94543,93748],{"class":191},[97,94545,94546],{"class":99,"line":1504},[97,94547,94548],{"class":191},"#array([2, 3, 4, 1])\n",[24,94550,94551],{},[19,94552],{"alt":92,"src":94553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94555,94557],{"id":94556},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[24,94559,94560],{},"resize()重新调整数组的大小",[24,94562,94563],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[87,94565,94567],{"className":30568,"code":94566,"language":30570,"meta":92,"style":92},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[94,94568,94569,94574,94587],{"__ignoreMap":92},[97,94570,94571],{"class":99,"line":100},[97,94572,94573],{"class":191},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[97,94575,94576,94579,94581,94583,94585],{"class":99,"line":195},[97,94577,94578],{"class":103},"np.resize(aa,(",[97,94580,398],{"class":370},[97,94582,698],{"class":103},[97,94584,664],{"class":370},[97,94586,30687],{"class":103},[97,94588,94589,94591,94593,94595,94597,94599],{"class":99,"line":241},[97,94590,94578],{"class":103},[97,94592,398],{"class":370},[97,94594,698],{"class":103},[97,94596,740],{"class":370},[97,94598,82955],{"class":103},[97,94600,94601],{"class":191},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94603,94605],{"id":94604},"_125-placeput函数","12.5 place()\u002Fput()函数",[24,94607,94608],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[24,94610,94611],{},[19,94612],{"alt":92,"src":94613},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94615,94617],{"id":94616},"_126-保存加载文件","12.6 保存加载文件",[24,94619,94620],{},"savetxt():将数据保存到txt文件中",[24,94622,94623],{},"loadtxt():从文件加载数据",[24,94625,94626],{},[19,94627],{"alt":92,"src":94628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94630,94632],{"id":94631},"_127-genfromtxt函数","12.7 genfromtxt()函数",[24,94634,94635],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94637,94639],{"id":94638},"_128-anyall函数","12.8 any()\u002Fall()函数",[24,94641,94642],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[24,94644,94645],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[24,94647,94648],{},[19,94649],{"alt":92,"src":94650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94652,94654],{"id":94653},"_129-where语句","12.9 where语句",[24,94656,94657],{},"np.where(条件,x,y)",[24,94659,94660],{},"如果条件为True,对应值为x,否则对应值为y",[24,94662,94663],{},[19,94664],{"alt":92,"src":94665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94667,94669],{"id":94668},"_1210-dot矩阵","12.10 dot()矩阵",[24,94671,94672],{},[19,94673],{"alt":92,"src":94674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[231,94676,94677],{},"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":92,"searchDepth":195,"depth":195,"links":94679},[94680,94681,94682,94683,94684,94685,94686,94687,94688,94689],{"id":94042,"depth":195,"text":94043},{"id":94265,"depth":195,"text":94266},{"id":94481,"depth":195,"text":94482},{"id":94556,"depth":195,"text":94557},{"id":94604,"depth":195,"text":94605},{"id":94616,"depth":195,"text":94617},{"id":94631,"depth":195,"text":94632},{"id":94638,"depth":195,"text":94639},{"id":94653,"depth":195,"text":94654},{"id":94668,"depth":195,"text":94669},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94034,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94696,"title":94697,"body":94698,"description":246,"extension":247,"meta":95051,"navigation":249,"path":95052,"seo":95053,"stem":95054,"__hash__":95055},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94699,"toc":95049},[94700,94703,94706,94709,94712,94715,94780,94782,95046],[10,94701,94697],{"id":94702},"_13数组排序",[24,94704,94705],{},"排序主要用到的方法是np.sort和np.argsort",[24,94707,94708],{},"其中np.sort()对数组直接排序",[24,94710,94711],{},"而np.argsort()是返回排序后的原始索引",[24,94713,94714],{},"①一维数组",[87,94716,94718],{"className":30568,"code":94717,"language":30570,"meta":92,"style":92},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[94,94719,94720,94724,94764,94772],{"__ignoreMap":92},[97,94721,94722],{"class":99,"line":100},[97,94723,93289],{"class":191},[97,94725,94726,94728,94730,94732,94734,94736,94738,94740,94742,94744,94746,94748,94750,94752,94754,94756,94758,94760,94762],{"class":99,"line":195},[97,94727,558],{"class":103},[97,94729,115],{"class":319},[97,94731,93208],{"class":103},[97,94733,392],{"class":370},[97,94735,698],{"class":103},[97,94737,818],{"class":370},[97,94739,698],{"class":103},[97,94741,715],{"class":370},[97,94743,698],{"class":103},[97,94745,1095],{"class":370},[97,94747,698],{"class":103},[97,94749,599],{"class":370},[97,94751,698],{"class":103},[97,94753,1213],{"class":370},[97,94755,698],{"class":103},[97,94757,664],{"class":370},[97,94759,698],{"class":103},[97,94761,766],{"class":370},[97,94763,4848],{"class":103},[97,94765,94766,94769],{"class":99,"line":241},[97,94767,94768],{"class":103},"np.sort(a)",[97,94770,94771],{"class":191},"#升序排序\n",[97,94773,94774,94777],{"class":99,"line":1387},[97,94775,94776],{"class":103},"np.argsort(a)",[97,94778,94779],{"class":191},"#按照元素大小来索引排序\n",[24,94781,93475],{},[87,94783,94785],{"className":30568,"code":94784,"language":30570,"meta":92,"style":92},"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",[94,94786,94787,94799,94825,94830,94834,94839,94844,94849,94854,94858,94866,94870,94875,94880,94885,94890,94894,94899,94912,94916,94921,94926,94931,94936,94940,94945,94957,94961,94965,94969,94973,94977,94981,94986,95001,95006,95015,95020,95024,95028,95033,95037,95042],{"__ignoreMap":92},[97,94788,94789,94792,94794,94796],{"class":99,"line":100},[97,94790,94791],{"class":103},"np.random.seed(",[97,94793,511],{"class":370},[97,94795,749],{"class":103},[97,94797,94798],{"class":191},"#保证每次值一样\n",[97,94800,94801,94803,94805,94807,94809,94811,94813,94815,94817,94819,94821,94823],{"class":99,"line":195},[97,94802,93490],{"class":103},[97,94804,115],{"class":319},[97,94806,93298],{"class":103},[97,94808,631],{"class":370},[97,94810,698],{"class":103},[97,94812,31686],{"class":5407},[97,94814,115],{"class":319},[97,94816,323],{"class":103},[97,94818,613],{"class":370},[97,94820,698],{"class":103},[97,94822,664],{"class":370},[97,94824,30687],{"class":103},[97,94826,94827],{"class":99,"line":241},[97,94828,94829],{"class":191},"#原数组：\n",[97,94831,94832],{"class":99,"line":1387},[97,94833,94112],{"class":118},[97,94835,94836],{"class":99,"line":1393},[97,94837,94838],{"class":118},"array([[44, 47, 64, 67, 67,  9],\n",[97,94840,94841],{"class":99,"line":1407},[97,94842,94843],{"class":118},"       [83, 21, 36, 87, 70, 88],\n",[97,94845,94846],{"class":99,"line":1413},[97,94847,94848],{"class":118},"       [88, 12, 58, 65, 39, 87],\n",[97,94850,94851],{"class":99,"line":1504},[97,94852,94853],{"class":118},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[97,94855,94856],{"class":99,"line":1510},[97,94857,94112],{"class":118},[97,94859,94860,94863],{"class":99,"line":1522},[97,94861,94862],{"class":103},"np.sort(aa)",[97,94864,94865],{"class":191},"#每行进行了排序\n",[97,94867,94868],{"class":99,"line":1804},[97,94869,94112],{"class":118},[97,94871,94872],{"class":99,"line":1809},[97,94873,94874],{"class":118},"array([[ 9, 44, 47, 64, 67, 67],\n",[97,94876,94877],{"class":99,"line":1815},[97,94878,94879],{"class":118},"       [21, 36, 70, 83, 87, 88],\n",[97,94881,94882],{"class":99,"line":1820},[97,94883,94884],{"class":118},"       [12, 39, 58, 65, 87, 88],\n",[97,94886,94887],{"class":99,"line":1834},[97,94888,94889],{"class":118},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[97,94891,94892],{"class":99,"line":1839},[97,94893,94112],{"class":118},[97,94895,94896],{"class":99,"line":1845},[97,94897,94898],{"class":191},"#axis=0时\n",[97,94900,94901,94904,94906,94908,94910],{"class":99,"line":1866},[97,94902,94903],{"class":103},"np.sort(aa,",[97,94905,47704],{"class":5407},[97,94907,115],{"class":319},[97,94909,511],{"class":370},[97,94911,329],{"class":103},[97,94913,94914],{"class":99,"line":1871},[97,94915,94112],{"class":118},[97,94917,94918],{"class":99,"line":1885},[97,94919,94920],{"class":118},"array([[44, 12, 36, 37, 25,  9],\n",[97,94922,94923],{"class":99,"line":1890},[97,94924,94925],{"class":118},"       [46, 21, 58, 65, 39, 77],\n",[97,94927,94928],{"class":99,"line":1919},[97,94929,94930],{"class":118},"       [83, 47, 64, 67, 67, 87],\n",[97,94932,94933],{"class":99,"line":1924},[97,94934,94935],{"class":118},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[97,94937,94938],{"class":99,"line":1941},[97,94939,94112],{"class":118},[97,94941,94942],{"class":99,"line":1946},[97,94943,94944],{"class":191},"#axis=1时,为默认值\n",[97,94946,94947,94949,94951,94953,94955],{"class":99,"line":1951},[97,94948,94903],{"class":103},[97,94950,47704],{"class":5407},[97,94952,115],{"class":319},[97,94954,537],{"class":370},[97,94956,329],{"class":103},[97,94958,94959],{"class":99,"line":1956},[97,94960,94112],{"class":118},[97,94962,94963],{"class":99,"line":1970},[97,94964,94874],{"class":118},[97,94966,94967],{"class":99,"line":1975},[97,94968,94879],{"class":118},[97,94970,94971],{"class":99,"line":2768},[97,94972,94884],{"class":118},[97,94974,94975],{"class":99,"line":2782},[97,94976,94889],{"class":118},[97,94978,94979],{"class":99,"line":2790},[97,94980,94112],{"class":118},[97,94982,94983],{"class":99,"line":2795},[97,94984,94985],{"class":191},"#按最后一列排序\n",[97,94987,94988,94990,94992,94995,94997,94999],{"class":99,"line":2801},[97,94989,583],{"class":103},[97,94991,115],{"class":319},[97,94993,94994],{"class":103},"aa[:,",[97,94996,852],{"class":319},[97,94998,537],{"class":370},[97,95000,33436],{"class":103},[97,95002,95003],{"class":99,"line":2807},[97,95004,95005],{"class":191},"#获取最后一列排好序的索引\n",[97,95007,95008,95010,95012],{"class":99,"line":2812},[97,95009,74242],{"class":103},[97,95011,115],{"class":319},[97,95013,95014],{"class":103},"np.argsort(b)\n",[97,95016,95017],{"class":99,"line":8139},[97,95018,95019],{"class":103},"aa[index]\n",[97,95021,95022],{"class":99,"line":8163},[97,95023,94112],{"class":118},[97,95025,95026],{"class":99,"line":8168},[97,95027,94838],{"class":118},[97,95029,95030],{"class":99,"line":8174},[97,95031,95032],{"class":118},"       [46, 88, 81, 37, 25, 77],\n",[97,95034,95035],{"class":99,"line":8201},[97,95036,94848],{"class":118},[97,95038,95039],{"class":99,"line":8206},[97,95040,95041],{"class":118},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[97,95043,95044],{"class":99,"line":8212},[97,95045,94112],{"class":118},[231,95047,95048],{},"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":92,"searchDepth":195,"depth":195,"links":95050},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94697,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95057,"title":95058,"body":95059,"description":246,"extension":247,"meta":95089,"navigation":249,"path":95090,"seo":95091,"stem":95092,"__hash__":95093},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95060,"toc":95087},[95061,95064,95067,95070,95073,95076,95079,95082],[10,95062,95058],{"id":95063},"_14广播机制",[24,95065,95066],{},"广播的规则：",[24,95068,95069],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[24,95071,95072],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[24,95074,95075],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[24,95077,95078],{},"3.如果没有维度形状为1，则会引发异常",[24,95080,95081],{},"也就是只有维度或者个数为1才可以进行广播操作",[24,95083,95084],{},[19,95085],{"alt":92,"src":95086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":92,"searchDepth":195,"depth":195,"links":95088},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95058,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95095,"title":95096,"body":95097,"description":246,"extension":247,"meta":95195,"navigation":249,"path":95196,"seo":95197,"stem":95198,"__hash__":95199},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95098,"toc":95193},[95099,95102,95105,95190],[10,95100,95096],{"id":95101},"_15比较掩码",[24,95103,95104],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[87,95106,95108],{"className":30568,"code":95107,"language":30570,"meta":92,"style":92},"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",[94,95109,95110,95156,95167,95181,95185],{"__ignoreMap":92},[97,95111,95112,95114,95116,95119,95121,95123,95125,95127,95129,95131,95133,95135,95137,95139,95141,95143,95145,95147,95149,95151,95153],{"class":99,"line":100},[97,95113,558],{"class":103},[97,95115,115],{"class":319},[97,95117,95118],{"class":103},"np.array([[",[97,95120,537],{"class":370},[97,95122,698],{"class":103},[97,95124,398],{"class":370},[97,95126,698],{"class":103},[97,95128,392],{"class":370},[97,95130,48220],{"class":103},[97,95132,792],{"class":370},[97,95134,698],{"class":103},[97,95136,818],{"class":370},[97,95138,698],{"class":103},[97,95140,843],{"class":370},[97,95142,48220],{"class":103},[97,95144,1045],{"class":370},[97,95146,698],{"class":103},[97,95148,1070],{"class":370},[97,95150,698],{"class":103},[97,95152,1095],{"class":370},[97,95154,95155],{"class":103},"]])\n",[97,95157,95158,95160,95162,95164],{"class":99,"line":195},[97,95159,558],{"class":103},[97,95161,104],{"class":319},[97,95163,1020],{"class":370},[97,95165,95166],{"class":191},"#结果是一个由True,False组成的数组\n",[97,95168,95169,95172,95174,95176,95178],{"class":99,"line":241},[97,95170,95171],{"class":103},"a[a",[97,95173,104],{"class":319},[97,95175,1020],{"class":370},[97,95177,1259],{"class":103},[97,95179,95180],{"class":191},"#小于20的元素会存到这个数组中\n",[97,95182,95183],{"class":99,"line":1387},[97,95184,93748],{"class":191},[97,95186,95187],{"class":99,"line":1393},[97,95188,95189],{"class":191},"#array([ 1,  2,  3, 11, 12, 13])\n",[231,95191,95192],{},"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":92,"searchDepth":195,"depth":195,"links":95194},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95096,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95201,"title":95202,"body":95203,"description":246,"extension":247,"meta":95295,"navigation":249,"path":95296,"seo":95297,"stem":95298,"__hash__":95299},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95204,"toc":95293},[95205,95208,95211,95214,95217,95220,95285,95290],[10,95206,95202],{"id":95207},"_16魔法命令time",[24,95209,95210],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[24,95212,95213],{},"%:行模式",[24,95215,95216],{},"%%:单元格模式",[24,95218,95219],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[87,95221,95223],{"className":30568,"code":95222,"language":30570,"meta":92,"style":92},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[94,95224,95225,95230,95237,95242,95251,95264,95268,95276],{"__ignoreMap":92},[97,95226,95227],{"class":99,"line":100},[97,95228,95229],{"class":191},"#程序执行时间\n",[97,95231,95232,95234],{"class":99,"line":195},[97,95233,30582],{"class":319},[97,95235,95236],{"class":103}," time \n",[97,95238,95239],{"class":99,"line":241},[97,95240,95241],{"class":191},"#获取时间\n",[97,95243,95244,95247,95249],{"class":99,"line":1387},[97,95245,95246],{"class":103},"start",[97,95248,115],{"class":319},[97,95250,32608],{"class":103},[97,95252,95253,95256,95259,95261],{"class":99,"line":1393},[97,95254,95255],{"class":103},"time.sleep(",[97,95257,95258],{"class":370},"0.4",[97,95260,749],{"class":103},[97,95262,95263],{"class":191},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[97,95265,95266],{"class":99,"line":1407},[97,95267,95241],{"class":191},[97,95269,95270,95272,95274],{"class":99,"line":1413},[97,95271,45991],{"class":103},[97,95273,115],{"class":319},[97,95275,32608],{"class":103},[97,95277,95278,95280,95282],{"class":99,"line":1504},[97,95279,45991],{"class":103},[97,95281,852],{"class":319},[97,95283,95284],{"class":103},"start\n",[24,95286,95287],{},[19,95288],{"alt":92,"src":95289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[231,95291,95292],{},"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":92,"searchDepth":195,"depth":195,"links":95294},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95202,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95301,"title":95302,"body":95303,"description":246,"extension":247,"meta":95338,"navigation":249,"path":95339,"seo":95340,"stem":95341,"__hash__":95342},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95304,"toc":95336},[95305,95308,95311,95314,95317,95320,95323,95326,95331],[10,95306,95302],{"id":95307},"_17魔法命令timeit",[24,95309,95310],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[24,95312,95313],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[24,95315,95316],{},"单元格模式：",[24,95318,95319],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[24,95321,95322],{},"初始化语句执行次数由轮数来决定",[24,95324,95325],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[24,95327,95328],{},[19,95329],{"alt":92,"src":95330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[24,95332,95333],{},[19,95334],{"alt":92,"src":95335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":92,"searchDepth":195,"depth":195,"links":95337},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95302,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95344,"title":95345,"body":95346,"description":246,"extension":247,"meta":95364,"navigation":249,"path":95365,"seo":95366,"stem":95367,"__hash__":95368},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95347,"toc":95362},[95348,95351,95354,95357],[10,95349,95345],{"id":95350},"_18魔法命令writefile和run",[24,95352,95353],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[24,95355,95356],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[24,95358,95359],{},[19,95360],{"alt":92,"src":95361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":92,"searchDepth":195,"depth":195,"links":95363},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95345,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95370,"title":95371,"body":95372,"description":246,"extension":247,"meta":95425,"navigation":249,"path":95426,"seo":95427,"stem":95428,"__hash__":95429},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95373,"toc":95423},[95374,95377,95380,95382,95385,95388,95393,95396,95399,95402,95405,95408,95411,95414,95417,95420],[10,95375,95371],{"id":95376},"_19魔法命令memit",[24,95378,95379],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[24,95381,24789],{},[24,95383,95384],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[24,95386,95387],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[24,95389,95390],{},[19,95391],{"alt":92,"src":95392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[24,95394,95395],{},"补充：",[24,95397,95398],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[24,95400,95401],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[24,95403,95404],{},"解决方法：",[24,95406,95407],{},"1.cmd",[24,95409,95410],{},"2.依次输入以下代码：",[24,95412,95413],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[24,95415,95416],{},"pip install --upgrade ipython",[24,95418,95419],{},"#升级 memory_profiler 和 setuptools",[24,95421,95422],{},"pip install --upgrade memory_profiler setuptools",{"title":92,"searchDepth":195,"depth":195,"links":95424},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95371,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95431,"title":95432,"body":95433,"description":246,"extension":247,"meta":97079,"navigation":249,"path":97080,"seo":97081,"stem":97082,"__hash__":97083},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95434,"toc":97049},[95435,95438,95442,95446,95507,95510,95515,95519,95524,95529,95534,95539,95542,95547,95551,95555,95588,95591,95594,95597,95649,95652,95688,95691,95733,95737,95758,95760,95797,95799,95804,95806,95811,95815,95818,95846,95850,95854,95907,95911,96003,96007,96011,96014,96019,96023,96048,96053,96057,96060,96063,96066,96069,96072,96075,96078,96090,96094,96098,96101,96133,96136,96159,96162,96188,96191,96217,96220,96254,96257,96319,96323,96326,96330,96333,96359,96362,96365,96370,96373,96442,96444,96449,96510,96513,96524,96530,96535,96539,96542,96555,96559,96574,96576,96599,96601,96627,96630,96633,96636,96684,96686,96691,96695,96699,96726,96730,96757,96760,96765,96770,96860,96864,96922,96927,96930,96933,96975,96979,97035,97040,97043,97046],[10,95436,95432],{"id":95437},"_2创建数组",[14,95439,95441],{"id":95440},"_21-array函数创建数组","2.1 array()函数创建数组",[48,95443,95445],{"id":95444},"_221-函数语句","2.2.1 函数语句",[87,95447,95449],{"className":30568,"code":95448,"language":30570,"meta":92,"style":92},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[94,95450,95451],{"__ignoreMap":92},[97,95452,95453,95456,95459,95461,95463,95465,95467,95469,95472,95474,95477,95479,95482,95484,95486,95488,95491,95493,95496,95498,95501,95503,95505],{"class":99,"line":100},[97,95454,95455],{"class":103},"numpy.array(",[97,95457,95458],{"class":370},"object",[97,95460,12626],{"class":103},[97,95462,93684],{"class":5407},[97,95464,13755],{"class":319},[97,95466,39123],{"class":370},[97,95468,12626],{"class":103},[97,95470,95471],{"class":5407},"copy",[97,95473,13755],{"class":319},[97,95475,95476],{"class":370}," True",[97,95478,12626],{"class":103},[97,95480,95481],{"class":5407},"order",[97,95483,13755],{"class":319},[97,95485,39123],{"class":370},[97,95487,12626],{"class":103},[97,95489,95490],{"class":5407},"subok",[97,95492,13755],{"class":319},[97,95494,95495],{"class":370}," False",[97,95497,12626],{"class":103},[97,95499,95500],{"class":5407},"ndmin",[97,95502,13755],{"class":319},[97,95504,4284],{"class":370},[97,95506,329],{"class":103},[24,95508,95509],{},"参数：",[24,95511,95512],{},[19,95513],{"alt":92,"src":95514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[48,95516,95518],{"id":95517},"_222-实例","2.2.2 实例",[24,95520,95521],{},[19,95522],{"alt":92,"src":95523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[24,95525,95526],{},[19,95527],{"alt":92,"src":95528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[24,95530,95531],{},[19,95532],{"alt":92,"src":95533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[24,95535,95536],{},[19,95537],{"alt":92,"src":95538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[24,95540,95541],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[24,95543,95544],{},[19,95545],{"alt":92,"src":95546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95548,95550],{"id":95549},"_22-随机数创建数组","2.2 随机数创建数组",[48,95552,95554],{"id":95553},"_221-random语句","2.2.1 random语句",[87,95556,95558],{"className":30568,"code":95557,"language":30570,"meta":92,"style":92},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[94,95559,95560,95565,95570,95578,95583],{"__ignoreMap":92},[97,95561,95562],{"class":99,"line":100},[97,95563,95564],{"class":191},"#random.random()\n",[97,95566,95567],{"class":99,"line":195},[97,95568,95569],{"class":191},"#确定随机种子,就是每次运行结果是相同的\n",[97,95571,95572,95574,95576],{"class":99,"line":241},[97,95573,94791],{"class":103},[97,95575,511],{"class":370},[97,95577,329],{"class":103},[97,95579,95580],{"class":99,"line":1387},[97,95581,95582],{"class":103},"np.random.random()\n",[97,95584,95585],{"class":99,"line":1393},[97,95586,95587],{"class":191},"#生成一个随机的数目\n",[24,95589,95590],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[24,95592,95593],{},"可以指定数组形状 size",[24,95595,95596],{},"①生成一维数组",[87,95598,95600],{"className":30568,"code":95599,"language":30570,"meta":92,"style":92},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[94,95601,95602,95607,95620,95625,95641],{"__ignoreMap":92},[97,95603,95604],{"class":99,"line":100},[97,95605,95606],{"class":191},"#random.random(size())\n",[97,95608,95609,95612,95614,95616,95618],{"class":99,"line":195},[97,95610,95611],{"class":103},"np.random.random(",[97,95613,31686],{"class":5407},[97,95615,115],{"class":319},[97,95617,639],{"class":370},[97,95619,329],{"class":103},[97,95621,95622],{"class":99,"line":241},[97,95623,95624],{"class":191},"#生成一位的五个元素\n",[97,95626,95627,95629,95631,95633,95635,95637,95639],{"class":99,"line":1387},[97,95628,558],{"class":103},[97,95630,115],{"class":319},[97,95632,95611],{"class":103},[97,95634,31686],{"class":5407},[97,95636,115],{"class":319},[97,95638,613],{"class":370},[97,95640,329],{"class":103},[97,95642,95643,95646],{"class":99,"line":1393},[97,95644,95645],{"class":103},"a.shape ",[97,95647,95648],{"class":191},"#输出数组形状\n",[24,95650,95651],{},"②生成二维数组",[87,95653,95655],{"className":30568,"code":95654,"language":30570,"meta":92,"style":92},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[94,95656,95657,95661,95683],{"__ignoreMap":92},[97,95658,95659],{"class":99,"line":100},[97,95660,93485],{"class":191},[97,95662,95663,95665,95667,95669,95671,95673,95675,95677,95679,95681],{"class":99,"line":195},[97,95664,93490],{"class":103},[97,95666,115],{"class":319},[97,95668,95611],{"class":103},[97,95670,31686],{"class":5407},[97,95672,115],{"class":319},[97,95674,323],{"class":103},[97,95676,613],{"class":370},[97,95678,698],{"class":103},[97,95680,639],{"class":370},[97,95682,30687],{"class":103},[97,95684,95685],{"class":99,"line":241},[97,95686,95687],{"class":191},"#生成四行五列的数组\n",[24,95689,95690],{},"③生成三维数组",[87,95692,95694],{"className":30568,"code":95693,"language":30570,"meta":92,"style":92},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[94,95695,95696,95701,95728],{"__ignoreMap":92},[97,95697,95698],{"class":99,"line":100},[97,95699,95700],{"class":191},"#三维数组\n",[97,95702,95703,95706,95708,95710,95712,95714,95716,95718,95720,95722,95724,95726],{"class":99,"line":195},[97,95704,95705],{"class":103},"aaa",[97,95707,115],{"class":319},[97,95709,95611],{"class":103},[97,95711,31686],{"class":5407},[97,95713,115],{"class":319},[97,95715,323],{"class":103},[97,95717,398],{"class":370},[97,95719,698],{"class":103},[97,95721,392],{"class":370},[97,95723,698],{"class":103},[97,95725,613],{"class":370},[97,95727,30687],{"class":103},[97,95729,95730],{"class":99,"line":241},[97,95731,95732],{"class":103},"aaa.shape\n",[48,95734,95736],{"id":95735},"_222-randint语句","2.2.2 randint语句",[87,95738,95740],{"className":30568,"code":95739,"language":30570,"meta":92,"style":92},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[94,95741,95742,95747],{"__ignoreMap":92},[97,95743,95744],{"class":99,"line":100},[97,95745,95746],{"class":191},"#生成随机的整数 random.randint(low,high,size)\n",[97,95748,95749,95751,95753,95755],{"class":99,"line":195},[97,95750,93298],{"class":103},[97,95752,639],{"class":370},[97,95754,13905],{"class":103},[97,95756,95757],{"class":191},"#0~5中的随机一个数\n",[24,95759,95596],{},[87,95761,95763],{"className":30568,"code":95762,"language":30570,"meta":92,"style":92},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[94,95764,95765,95770,95792],{"__ignoreMap":92},[97,95766,95767],{"class":99,"line":100},[97,95768,95769],{"class":191},"#一维\n",[97,95771,95772,95774,95776,95778,95780,95782,95784,95786,95788,95790],{"class":99,"line":195},[97,95773,93298],{"class":103},[97,95775,537],{"class":370},[97,95777,698],{"class":103},[97,95779,792],{"class":370},[97,95781,698],{"class":103},[97,95783,31686],{"class":5407},[97,95785,115],{"class":319},[97,95787,323],{"class":103},[97,95789,766],{"class":370},[97,95791,30687],{"class":103},[97,95793,95794],{"class":99,"line":241},[97,95795,95796],{"class":191},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[24,95798,95651],{},[24,95800,95801],{},[19,95802],{"alt":92,"src":95803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[24,95805,95690],{},[24,95807,95808],{},[19,95809],{"alt":92,"src":95810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[48,95812,95814],{"id":95813},"_222-rand语句","2.2.2 rand语句",[24,95816,95817],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[87,95819,95821],{"className":30568,"code":95820,"language":30570,"meta":92,"style":92},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[94,95822,95823,95836,95841],{"__ignoreMap":92},[97,95824,95825,95828,95830,95832,95834],{"class":99,"line":100},[97,95826,95827],{"class":103},"np.random.rand(",[97,95829,631],{"class":370},[97,95831,698],{"class":103},[97,95833,766],{"class":370},[97,95835,329],{"class":103},[97,95837,95838],{"class":99,"line":195},[97,95839,95840],{"class":191},"#第一个参数100：行数，表示有100个样本\n",[97,95842,95843],{"class":99,"line":241},[97,95844,95845],{"class":191},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95847,95849],{"id":95848},"_23-arange创建数组","2.3 arange()创建数组",[48,95851,95853],{"id":95852},"_231-函数语句","2.3.1 函数语句",[87,95855,95857],{"className":30568,"code":95856,"language":30570,"meta":92,"style":92},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[94,95858,95859,95873,95878,95883,95888,95893,95898,95903],{"__ignoreMap":92},[97,95860,95861,95864,95866,95868,95871],{"class":99,"line":100},[97,95862,95863],{"class":103},"numpy.arange([start,] stop[, step], ",[97,95865,93684],{"class":5407},[97,95867,115],{"class":319},[97,95869,95870],{"class":370},"None",[97,95872,329],{"class":103},[97,95874,95875],{"class":99,"line":195},[97,95876,95877],{"class":191},"#参数\n",[97,95879,95880],{"class":99,"line":241},[97,95881,95882],{"class":118},"\"\"\"\n",[97,95884,95885],{"class":99,"line":1387},[97,95886,95887],{"class":118},"start:起始值，可选，默认从 0 开始。\n",[97,95889,95890],{"class":99,"line":1393},[97,95891,95892],{"class":118},"stop:结束值（不包含该值）。\n",[97,95894,95895],{"class":99,"line":1407},[97,95896,95897],{"class":118},"step:步长，可选，默认是 1。可以为浮点数。\n",[97,95899,95900],{"class":99,"line":1413},[97,95901,95902],{"class":118},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[97,95904,95905],{"class":99,"line":1504},[97,95906,95882],{"class":118},[48,95908,95910],{"id":95909},"_232-实例","2.3.2 实例",[87,95912,95914],{"className":30568,"code":95913,"language":30570,"meta":92,"style":92},"#创建一维数组\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",[94,95915,95916,95920,95944,95949,95954,95958,95981,95985,95989,95994,95999],{"__ignoreMap":92},[97,95917,95918],{"class":99,"line":100},[97,95919,93289],{"class":191},[97,95921,95922,95924,95926,95928,95930,95932,95934,95936,95938,95940,95942],{"class":99,"line":195},[97,95923,93186],{"class":103},[97,95925,537],{"class":370},[97,95927,698],{"class":103},[97,95929,1045],{"class":370},[97,95931,698],{"class":103},[97,95933,537],{"class":370},[97,95935,698],{"class":103},[97,95937,93684],{"class":5407},[97,95939,115],{"class":319},[97,95941,326],{"class":370},[97,95943,329],{"class":103},[97,95945,95946],{"class":99,"line":241},[97,95947,95948],{"class":191},"#输出结果：\n",[97,95950,95951],{"class":99,"line":1387},[97,95952,95953],{"class":191},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[97,95955,95956],{"class":99,"line":1393},[97,95957,94131],{"class":191},[97,95959,95960,95963,95965,95967,95969,95972,95974,95976,95978],{"class":99,"line":1407},[97,95961,95962],{"class":103},"np.array([np.arange(",[97,95964,537],{"class":370},[97,95966,698],{"class":103},[97,95968,613],{"class":370},[97,95970,95971],{"class":103},"),np.arange(",[97,95973,613],{"class":370},[97,95975,698],{"class":103},[97,95977,689],{"class":370},[97,95979,95980],{"class":103},")])\n",[97,95982,95983],{"class":99,"line":1413},[97,95984,93748],{"class":191},[97,95986,95987],{"class":99,"line":1504},[97,95988,95882],{"class":118},[97,95990,95991],{"class":99,"line":1510},[97,95992,95993],{"class":118},"array([[1, 2, 3],\n",[97,95995,95996],{"class":99,"line":1522},[97,95997,95998],{"class":118},"       [4, 5, 6]])\n",[97,96000,96001],{"class":99,"line":1804},[97,96002,95882],{"class":118},[14,96004,96006],{"id":96005},"_24-生态分布","2.4 生态分布",[48,96008,96010],{"id":96009},"_241-标准正态分布","2.4.1 标准正态分布",[24,96012,96013],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[24,96015,96016],{},[19,96017],{"alt":92,"src":96018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[48,96020,96022],{"id":96021},"_242-常规正态分布","2.4.2 常规正态分布",[87,96024,96026],{"className":30568,"code":96025,"language":30570,"meta":92,"style":92},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[94,96027,96028,96033,96038,96043],{"__ignoreMap":92},[97,96029,96030],{"class":99,"line":100},[97,96031,96032],{"class":103},"random.normal(loc,scale,size)也可以生成正态分布\n",[97,96034,96035],{"class":99,"line":195},[97,96036,96037],{"class":191},"#loc:期望\n",[97,96039,96040],{"class":99,"line":241},[97,96041,96042],{"class":191},"#scale:方差\n",[97,96044,96045],{"class":99,"line":1387},[97,96046,96047],{"class":191},"#size:用于确定是几维的数列\n",[24,96049,96050],{},[19,96051],{"alt":92,"src":96052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96054,96056],{"id":96055},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[24,96058,96059],{},"ndim:秩，维度个数",[24,96061,96062],{},"size:数组元素的个数",[24,96064,96065],{},"shape:数组的形状",[24,96067,96068],{},"dtype:数组元素的类型",[24,96070,96071],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[24,96073,96074],{},"他们都是属性，通过数组.属性的形式来确定",[24,96076,96077],{},"如果需要输出多个可以通过以下方式：",[87,96079,96081],{"className":30568,"code":96080,"language":30570,"meta":92,"style":92},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[94,96082,96083],{"__ignoreMap":92},[97,96084,96085,96087],{"class":99,"line":100},[97,96086,30605],{"class":370},[97,96088,96089],{"class":103},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96091,96093],{"id":96092},"_26-其他方式创建数组","2.6 其他方式创建数组",[48,96095,96097],{"id":96096},"_261-zeros创建数组","2.6.1 zeros()创建数组",[24,96099,96100],{},"①创建一维数组",[87,96102,96104],{"className":30568,"code":96103,"language":30570,"meta":92,"style":92},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[94,96105,96106,96115,96119,96124,96129],{"__ignoreMap":92},[97,96107,96108,96111,96113],{"class":99,"line":100},[97,96109,96110],{"class":103},"np.zeros(",[97,96112,766],{"class":370},[97,96114,329],{"class":103},[97,96116,96117],{"class":99,"line":195},[97,96118,95882],{"class":118},[97,96120,96121],{"class":99,"line":241},[97,96122,96123],{"class":118},"输出结果：\n",[97,96125,96126],{"class":99,"line":1387},[97,96127,96128],{"class":118},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[97,96130,96131],{"class":99,"line":1393},[97,96132,95882],{"class":118},[24,96134,96135],{},"上方代码等价于：",[87,96137,96139],{"className":30568,"code":96138,"language":30570,"meta":92,"style":92},"np.zeros(shape=(10))#创建10个元素的0数组\n",[94,96140,96141],{"__ignoreMap":92},[97,96142,96143,96145,96148,96150,96152,96154,96156],{"class":99,"line":100},[97,96144,96110],{"class":103},[97,96146,96147],{"class":5407},"shape",[97,96149,115],{"class":319},[97,96151,323],{"class":103},[97,96153,766],{"class":370},[97,96155,82955],{"class":103},[97,96157,96158],{"class":191},"#创建10个元素的0数组\n",[24,96160,96161],{},"也可以指定类型",[87,96163,96165],{"className":30568,"code":96164,"language":30570,"meta":92,"style":92},"#指定类型\nnp.zeros(5,dtype=int)\n",[94,96166,96167,96172],{"__ignoreMap":92},[97,96168,96169],{"class":99,"line":100},[97,96170,96171],{"class":191},"#指定类型\n",[97,96173,96174,96176,96178,96180,96182,96184,96186],{"class":99,"line":195},[97,96175,96110],{"class":103},[97,96177,639],{"class":370},[97,96179,698],{"class":103},[97,96181,93684],{"class":5407},[97,96183,115],{"class":319},[97,96185,326],{"class":370},[97,96187,329],{"class":103},[24,96189,96190],{},"②创建二维数组",[87,96192,96194],{"className":30568,"code":96193,"language":30570,"meta":92,"style":92},"np.zeros((3,4),dtype=int)\n",[94,96195,96196],{"__ignoreMap":92},[97,96197,96198,96201,96203,96205,96207,96209,96211,96213,96215],{"class":99,"line":100},[97,96199,96200],{"class":103},"np.zeros((",[97,96202,392],{"class":370},[97,96204,698],{"class":103},[97,96206,613],{"class":370},[97,96208,42446],{"class":103},[97,96210,93684],{"class":5407},[97,96212,115],{"class":319},[97,96214,326],{"class":370},[97,96216,329],{"class":103},[24,96218,96219],{},"③创建三维数组",[87,96221,96223],{"className":30568,"code":96222,"language":30570,"meta":92,"style":92},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[94,96224,96225,96230],{"__ignoreMap":92},[97,96226,96227],{"class":99,"line":100},[97,96228,96229],{"class":191},"#创建三维数组\n",[97,96231,96232,96234,96236,96238,96240,96242,96244,96246,96248,96250,96252],{"class":99,"line":195},[97,96233,96200],{"class":103},[97,96235,392],{"class":370},[97,96237,698],{"class":103},[97,96239,613],{"class":370},[97,96241,698],{"class":103},[97,96243,639],{"class":370},[97,96245,42446],{"class":103},[97,96247,93684],{"class":5407},[97,96249,115],{"class":319},[97,96251,326],{"class":370},[97,96253,329],{"class":103},[24,96255,96256],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[87,96258,96260],{"className":30568,"code":96259,"language":30570,"meta":92,"style":92},"#使用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",[94,96261,96262,96267,96282,96287,96292,96314],{"__ignoreMap":92},[97,96263,96264],{"class":99,"line":100},[97,96265,96266],{"class":191},"#使用zeros_like将创建的一维数组变成全0的数组\n",[97,96268,96269,96271,96273,96275,96277,96279],{"class":99,"line":195},[97,96270,558],{"class":103},[97,96272,115],{"class":319},[97,96274,93186],{"class":103},[97,96276,613],{"class":370},[97,96278,749],{"class":103},[97,96280,96281],{"class":191},"#这个得到的结果：一维数组0，1，2，3\n",[97,96283,96284],{"class":99,"line":241},[97,96285,96286],{"class":103},"np.zeros_like(a)\n",[97,96288,96289],{"class":99,"line":1387},[97,96290,96291],{"class":191},"#使用zeros_like将创建的二维数组变成全0的数组\n",[97,96293,96294,96296,96298,96300,96302,96304,96306,96308,96310,96312],{"class":99,"line":1393},[97,96295,93490],{"class":103},[97,96297,115],{"class":319},[97,96299,95611],{"class":103},[97,96301,31686],{"class":5407},[97,96303,115],{"class":319},[97,96305,323],{"class":103},[97,96307,613],{"class":370},[97,96309,698],{"class":103},[97,96311,639],{"class":370},[97,96313,30687],{"class":103},[97,96315,96316],{"class":99,"line":1407},[97,96317,96318],{"class":103},"np.zeros_like(aa)\n",[48,96320,96322],{"id":96321},"_262-ones创建数组","2.6.2 ones()创建数组",[24,96324,96325],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[48,96327,96329],{"id":96328},"_263-empty创建数组","2.6.3 empty()创建数组",[24,96331,96332],{},"①empty()用法",[87,96334,96336],{"className":30568,"code":96335,"language":30570,"meta":92,"style":92},"numpy.empty(shape,dtype=float,order='c')\n",[94,96337,96338],{"__ignoreMap":92},[97,96339,96340,96343,96345,96347,96349,96351,96353,96355,96357],{"class":99,"line":100},[97,96341,96342],{"class":103},"numpy.empty(shape,",[97,96344,93684],{"class":5407},[97,96346,115],{"class":319},[97,96348,362],{"class":370},[97,96350,698],{"class":103},[97,96352,95481],{"class":5407},[97,96354,115],{"class":319},[97,96356,76212],{"class":118},[97,96358,329],{"class":103},[24,96360,96361],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[24,96363,96364],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[24,96366,96367],{},[19,96368],{"alt":92,"src":96369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[24,96371,96372],{},"②empty()用法",[87,96374,96376],{"className":30568,"code":96375,"language":30570,"meta":92,"style":92},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[94,96377,96378,96399,96411,96432,96437],{"__ignoreMap":92},[97,96379,96380,96382,96384,96387,96389,96391,96393,96395,96397],{"class":99,"line":100},[97,96381,1165],{"class":103},[97,96383,115],{"class":319},[97,96385,96386],{"class":103},"np.empty(",[97,96388,766],{"class":370},[97,96390,698],{"class":103},[97,96392,93684],{"class":5407},[97,96394,115],{"class":319},[97,96396,326],{"class":370},[97,96398,329],{"class":103},[97,96400,96401,96403,96405,96407,96409],{"class":99,"line":195},[97,96402,1140],{"class":103},[97,96404,115],{"class":319},[97,96406,93186],{"class":103},[97,96408,639],{"class":370},[97,96410,329],{"class":103},[97,96412,96413,96416,96418,96421,96423,96425,96428,96430],{"class":99,"line":241},[97,96414,96415],{"class":103},"np.add(",[97,96417,398],{"class":370},[97,96419,96420],{"class":103},",x,",[97,96422,93238],{"class":5407},[97,96424,115],{"class":319},[97,96426,96427],{"class":103},"y[:",[97,96429,639],{"class":370},[97,96431,4848],{"class":103},[97,96433,96434],{"class":99,"line":1387},[97,96435,96436],{"class":191},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[97,96438,96439],{"class":99,"line":1393},[97,96440,96441],{"class":103},"y\n",[24,96443,11705],{},[24,96445,96446],{},[19,96447],{"alt":92,"src":96448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[87,96450,96452],{"className":30568,"code":96451,"language":30570,"meta":92,"style":92},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[94,96453,96454,96470,96490,96505],{"__ignoreMap":92},[97,96455,96456,96458,96460,96462,96464,96466,96468],{"class":99,"line":100},[97,96457,1140],{"class":103},[97,96459,115],{"class":319},[97,96461,93186],{"class":103},[97,96463,537],{"class":370},[97,96465,698],{"class":103},[97,96467,664],{"class":370},[97,96469,329],{"class":103},[97,96471,96472,96474,96476,96478,96480,96482,96484,96486,96488],{"class":99,"line":195},[97,96473,1165],{"class":103},[97,96475,115],{"class":319},[97,96477,96386],{"class":103},[97,96479,639],{"class":370},[97,96481,698],{"class":103},[97,96483,93684],{"class":5407},[97,96485,115],{"class":319},[97,96487,326],{"class":370},[97,96489,329],{"class":103},[97,96491,96492,96495,96497,96499,96501,96503],{"class":99,"line":241},[97,96493,96494],{"class":103},"np.add(x,",[97,96496,398],{"class":370},[97,96498,698],{"class":103},[97,96500,93238],{"class":5407},[97,96502,115],{"class":319},[97,96504,93633],{"class":103},[97,96506,96507],{"class":99,"line":1387},[97,96508,96509],{"class":191},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[24,96511,96512],{},"③empty_like()",[24,96514,96515],{},[469,96516,96517,96518,96523],{},"创建一个",[469,96519,96520],{},[469,96521,96522],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[24,96525,96526,96529],{},[94,96527,96528],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[24,96531,96532],{},[19,96533],{"alt":92,"src":96534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[48,96536,96538],{"id":96537},"_264-用法","2.6.4 ？？用法",[24,96540,96541],{},"当想查看一个函数的参数时，可以通过？？来实现",[87,96543,96545],{"className":30568,"code":96544,"language":30570,"meta":92,"style":92},"np.full??\n",[94,96546,96547],{"__ignoreMap":92},[97,96548,96549,96552],{"class":99,"line":100},[97,96550,96551],{"class":103},"np.full",[97,96553,96554],{"class":77587},"??\n",[48,96556,96558],{"id":96557},"_265-full创建数组","2.6.5 full()创建数组",[87,96560,96562],{"className":30568,"code":96561,"language":30570,"meta":92,"style":92},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[94,96563,96564,96569],{"__ignoreMap":92},[97,96565,96566],{"class":99,"line":100},[97,96567,96568],{"class":103},"full(shape,fill_value)\n",[97,96570,96571],{"class":99,"line":195},[97,96572,96573],{"class":103},"创建全为某个指定值的数组\n",[24,96575,94714],{},[87,96577,96579],{"className":30568,"code":96578,"language":30570,"meta":92,"style":92},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[94,96580,96581,96586],{"__ignoreMap":92},[97,96582,96583],{"class":99,"line":100},[97,96584,96585],{"class":191},"#创建一个一维数组,以20进行填充\n",[97,96587,96588,96591,96593,96595,96597],{"class":99,"line":195},[97,96589,96590],{"class":103},"np.full(",[97,96592,766],{"class":370},[97,96594,698],{"class":103},[97,96596,1020],{"class":370},[97,96598,329],{"class":103},[24,96600,93475],{},[87,96602,96604],{"className":30568,"code":96603,"language":30570,"meta":92,"style":92},"#创建二维数组\nnp.full((3,5),11)\n",[94,96605,96606,96610],{"__ignoreMap":92},[97,96607,96608],{"class":99,"line":100},[97,96609,94131],{"class":191},[97,96611,96612,96615,96617,96619,96621,96623,96625],{"class":99,"line":195},[97,96613,96614],{"class":103},"np.full((",[97,96616,392],{"class":370},[97,96618,698],{"class":103},[97,96620,639],{"class":370},[97,96622,42446],{"class":103},[97,96624,792],{"class":370},[97,96626,329],{"class":103},[24,96628,96629],{},"③full_like用法",[24,96631,96632],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[24,96634,96635],{},"这里是指定填充而已",[87,96637,96639],{"className":30568,"code":96638,"language":30570,"meta":92,"style":92},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[94,96640,96641,96646,96670,96675],{"__ignoreMap":92},[97,96642,96643],{"class":99,"line":100},[97,96644,96645],{"class":191},"#创建一个指定形状数组\n",[97,96647,96648,96650,96652,96654,96656,96658,96660,96662,96664,96666,96668],{"class":99,"line":195},[97,96649,558],{"class":103},[97,96651,115],{"class":319},[97,96653,93186],{"class":103},[97,96655,537],{"class":370},[97,96657,698],{"class":103},[97,96659,645],{"class":370},[97,96661,93191],{"class":103},[97,96663,613],{"class":370},[97,96665,698],{"class":103},[97,96667,740],{"class":370},[97,96669,329],{"class":103},[97,96671,96672],{"class":99,"line":241},[97,96673,96674],{"class":191},"#进行指定填充\n",[97,96676,96677,96680,96682],{"class":99,"line":1387},[97,96678,96679],{"class":103},"np.full_like(a,",[97,96681,766],{"class":370},[97,96683,329],{"class":103},[24,96685,11705],{},[24,96687,96688],{},[19,96689],{"alt":92,"src":96690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[48,96692,96694],{"id":96693},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[160,96696,96698],{"id":96697},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[87,96700,96702],{"className":30568,"code":96701,"language":30570,"meta":92,"style":92},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[94,96703,96704,96721],{"__ignoreMap":92},[97,96705,96706,96709,96711,96713,96715,96717,96719],{"class":99,"line":100},[97,96707,96708],{"class":103},"np.eye(",[97,96710,613],{"class":370},[97,96712,698],{"class":103},[97,96714,93684],{"class":5407},[97,96716,115],{"class":319},[97,96718,326],{"class":370},[97,96720,329],{"class":103},[97,96722,96723],{"class":99,"line":195},[97,96724,96725],{"class":191},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[160,96727,96729],{"id":96728},"_2662-法2identity","2.6.6.2 法2：identity()",[87,96731,96733],{"className":30568,"code":96732,"language":30570,"meta":92,"style":92},"#identity()\nnp.identity(5,dtype=int)\n",[94,96734,96735,96740],{"__ignoreMap":92},[97,96736,96737],{"class":99,"line":100},[97,96738,96739],{"class":191},"#identity()\n",[97,96741,96742,96745,96747,96749,96751,96753,96755],{"class":99,"line":195},[97,96743,96744],{"class":103},"np.identity(",[97,96746,639],{"class":370},[97,96748,698],{"class":103},[97,96750,93684],{"class":5407},[97,96752,115],{"class":319},[97,96754,326],{"class":370},[97,96756,329],{"class":103},[24,96758,96759],{},"两个函数是有区别的",[24,96761,96762],{},[19,96763],{"alt":92,"src":96764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[24,96766,96767],{},[19,96768],{"alt":92,"src":96769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[87,96771,96773],{"className":30568,"code":96772,"language":30570,"meta":92,"style":92},"# 创建一个 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",[94,96774,96775,96780,96792,96797,96802,96807,96812,96816,96821,96841,96845,96850,96855],{"__ignoreMap":92},[97,96776,96777],{"class":99,"line":100},[97,96778,96779],{"class":191},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[97,96781,96782,96784,96786,96788,96790],{"class":99,"line":195},[97,96783,96708],{"class":103},[97,96785,392],{"class":370},[97,96787,12626],{"class":103},[97,96789,613],{"class":370},[97,96791,329],{"class":103},[97,96793,96794],{"class":99,"line":241},[97,96795,96796],{"class":191},"# 输出:\n",[97,96798,96799],{"class":99,"line":1387},[97,96800,96801],{"class":191},"# [[1. 0. 0. 0.]\n",[97,96803,96804],{"class":99,"line":1393},[97,96805,96806],{"class":191},"#  [0. 1. 0. 0.]\n",[97,96808,96809],{"class":99,"line":1407},[97,96810,96811],{"class":191},"#  [0. 0. 1. 0.]]\n",[97,96813,96814],{"class":99,"line":1413},[97,96815,2591],{"emptyLinePlaceholder":249},[97,96817,96818],{"class":99,"line":1504},[97,96819,96820],{"class":191},"# 对角线向上偏移1\n",[97,96822,96823,96825,96827,96829,96831,96833,96835,96837,96839],{"class":99,"line":1510},[97,96824,96708],{"class":103},[97,96826,392],{"class":370},[97,96828,12626],{"class":103},[97,96830,613],{"class":370},[97,96832,12626],{"class":103},[97,96834,813],{"class":5407},[97,96836,115],{"class":319},[97,96838,537],{"class":370},[97,96840,329],{"class":103},[97,96842,96843],{"class":99,"line":1522},[97,96844,96796],{"class":191},[97,96846,96847],{"class":99,"line":1804},[97,96848,96849],{"class":191},"# [[0. 1. 0. 0.]\n",[97,96851,96852],{"class":99,"line":1809},[97,96853,96854],{"class":191},"#  [0. 0. 1. 0.]\n",[97,96856,96857],{"class":99,"line":1815},[97,96858,96859],{"class":191},"#  [0. 0. 0. 1.]]\n",[48,96861,96863],{"id":96862},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[87,96865,96867],{"className":30568,"code":96866,"language":30570,"meta":92,"style":92},"#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",[94,96868,96869,96874,96878,96883,96888,96893,96898,96903,96908,96913,96918],{"__ignoreMap":92},[97,96870,96871],{"class":99,"line":100},[97,96872,96873],{"class":191},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[97,96875,96876],{"class":99,"line":195},[97,96877,95882],{"class":118},[97,96879,96880],{"class":99,"line":241},[97,96881,96882],{"class":118},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[97,96884,96885],{"class":99,"line":1387},[97,96886,96887],{"class":118},"参数介绍：\n",[97,96889,96890],{"class":99,"line":1393},[97,96891,96892],{"class":118},"start：序列的起始值\n",[97,96894,96895],{"class":99,"line":1407},[97,96896,96897],{"class":118},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[97,96899,96900],{"class":99,"line":1413},[97,96901,96902],{"class":118},"num：要生长的等步长的样本数量，默认为50\n",[97,96904,96905],{"class":99,"line":1504},[97,96906,96907],{"class":118},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[97,96909,96910],{"class":99,"line":1510},[97,96911,96912],{"class":118},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[97,96914,96915],{"class":99,"line":1522},[97,96916,96917],{"class":118},"dtype：ndarry的数据类型\n",[97,96919,96920],{"class":99,"line":1804},[97,96921,95882],{"class":118},[24,96923,96924],{},[19,96925],{"alt":92,"src":96926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[24,96928,96929],{},"这里num=是可以省略的",[24,96931,96932],{},"也就是下方两行代码结果是一模一样的",[87,96934,96936],{"className":30568,"code":96935,"language":30570,"meta":92,"style":92},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[94,96937,96938,96955],{"__ignoreMap":92},[97,96939,96940,96943,96945,96947,96949,96951,96953],{"class":99,"line":100},[97,96941,96942],{"class":103},"np.linspace(",[97,96944,537],{"class":370},[97,96946,698],{"class":103},[97,96948,639],{"class":370},[97,96950,698],{"class":103},[97,96952,639],{"class":370},[97,96954,329],{"class":103},[97,96956,96957,96959,96961,96963,96965,96967,96969,96971,96973],{"class":99,"line":195},[97,96958,96942],{"class":103},[97,96960,537],{"class":370},[97,96962,698],{"class":103},[97,96964,639],{"class":370},[97,96966,698],{"class":103},[97,96968,1857],{"class":5407},[97,96970,115],{"class":319},[97,96972,639],{"class":370},[97,96974,329],{"class":103},[48,96976,96978],{"id":96977},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[87,96980,96982],{"className":30568,"code":96981,"language":30570,"meta":92,"style":92},"#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",[94,96983,96984,96989,96993,96998,97003,97008,97013,97017,97022,97027,97031],{"__ignoreMap":92},[97,96985,96986],{"class":99,"line":100},[97,96987,96988],{"class":191},"#logspace函数用于创建一个等比数列，格式如下：\n",[97,96990,96991],{"class":99,"line":195},[97,96992,95882],{"class":118},[97,96994,96995],{"class":99,"line":241},[97,96996,96997],{"class":118},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[97,96999,97000],{"class":99,"line":1387},[97,97001,97002],{"class":118},"参数为：\n",[97,97004,97005],{"class":99,"line":1393},[97,97006,97007],{"class":118},"start:序列的起始位置为：base**start\n",[97,97009,97010],{"class":99,"line":1407},[97,97011,97012],{"class":118},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[97,97014,97015],{"class":99,"line":1413},[97,97016,96902],{"class":118},[97,97018,97019],{"class":99,"line":1504},[97,97020,97021],{"class":118},"endpoint：是否包含 stop 这个值，默认是 True\n",[97,97023,97024],{"class":99,"line":1510},[97,97025,97026],{"class":118},"base：对数的底数，默认是 10（常见对数）\n",[97,97028,97029],{"class":99,"line":1522},[97,97030,96917],{"class":118},[97,97032,97033],{"class":99,"line":1804},[97,97034,95882],{"class":118},[24,97036,97037],{},[19,97038],{"alt":92,"src":97039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[24,97041,97042],{},"logspace()函数中的num参数也是可以不写num=的",[24,97044,97045],{},"endpoint是不可以省略的",[231,97047,97048],{},"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":92,"searchDepth":195,"depth":195,"links":97050},[97051,97055,97060,97064,97068,97069],{"id":95440,"depth":195,"text":95441,"children":97052},[97053,97054],{"id":95444,"depth":241,"text":95445},{"id":95517,"depth":241,"text":95518},{"id":95549,"depth":195,"text":95550,"children":97056},[97057,97058,97059],{"id":95553,"depth":241,"text":95554},{"id":95735,"depth":241,"text":95736},{"id":95813,"depth":241,"text":95814},{"id":95848,"depth":195,"text":95849,"children":97061},[97062,97063],{"id":95852,"depth":241,"text":95853},{"id":95909,"depth":241,"text":95910},{"id":96005,"depth":195,"text":96006,"children":97065},[97066,97067],{"id":96009,"depth":241,"text":96010},{"id":96021,"depth":241,"text":96022},{"id":96055,"depth":195,"text":96056},{"id":96092,"depth":195,"text":96093,"children":97070},[97071,97072,97073,97074,97075,97076,97077,97078],{"id":96096,"depth":241,"text":96097},{"id":96321,"depth":241,"text":96322},{"id":96328,"depth":241,"text":96329},{"id":96537,"depth":241,"text":96538},{"id":96557,"depth":241,"text":96558},{"id":96693,"depth":241,"text":96694},{"id":96862,"depth":241,"text":96863},{"id":96977,"depth":241,"text":96978},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95432,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97085,"title":97086,"body":97087,"description":246,"extension":247,"meta":97180,"navigation":249,"path":97181,"seo":97182,"stem":97183,"__hash__":97184},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97088,"toc":97178},[97089,97092,97095,97098,97101,97104,97107,97110,97113,97116,97119,97122,97124,97127,97130,97135,97138,97141,97175],[10,97090,97086],{"id":97091},"_20魔法命令mprun",[24,97093,97094],{},"逐行分析数据内存的使用情况",[24,97096,97097],{},"语法格式：",[24,97099,97100],{},"%mprun -f 模块名.函数名 模块名.函数名()",[24,97102,97103],{},"分析结果列如下：",[24,97105,97106],{},"Line行号",[24,97108,97109],{},"Mem usage内存使用大小",[24,97111,97112],{},"increment内存增量",[24,97114,97115],{},"Line content代码内容",[24,97117,97118],{},"补充说明：",[24,97120,97121],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[24,97123,95387],{},[24,97125,97126],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[24,97128,97129],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[24,97131,97132],{},[19,97133],{"alt":92,"src":97134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[24,97136,97137],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[24,97139,97140],{},"这时候需要重新加载模块",[87,97142,97144],{"className":30568,"code":97143,"language":30570,"meta":92,"style":92},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[94,97145,97146,97151,97158,97163],{"__ignoreMap":92},[97,97147,97148],{"class":99,"line":100},[97,97149,97150],{"class":191},"#重新加载模块\n",[97,97152,97153,97155],{"class":99,"line":195},[97,97154,30582],{"class":319},[97,97156,97157],{"class":103}," importlib\n",[97,97159,97160],{"class":99,"line":241},[97,97161,97162],{"class":103},"importlib.reload(mprun_test)\n",[97,97164,97165,97167,97170,97172],{"class":99,"line":1387},[97,97166,648],{"class":319},[97,97168,97169],{"class":103},"mprun ",[97,97171,852],{"class":319},[97,97173,97174],{"class":103},"f mprun_test.fun_test mprun_test.fun_test()\n",[231,97176,97177],{},"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":92,"searchDepth":195,"depth":195,"links":97179},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97086,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97186,"title":97187,"body":97188,"description":246,"extension":247,"meta":97205,"navigation":249,"path":97206,"seo":97207,"stem":97208,"__hash__":97209},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97189,"toc":97203},[97190,97193,97198],[10,97191,97187],{"id":97192},"_3一维数组的索引和切片",[24,97194,97195],{},[19,97196],{"alt":92,"src":97197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[24,97199,97200],{},[19,97201],{"alt":92,"src":97202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":92,"searchDepth":195,"depth":195,"links":97204},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97187,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97211,"title":97212,"body":97213,"description":246,"extension":247,"meta":97696,"navigation":249,"path":97697,"seo":97698,"stem":97699,"__hash__":97700},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97214,"toc":97694},[97215,97218,97221,97226,97259,97262,97300,97303,97337,97340,97445,97448,97485,97488,97589,97592,97643,97646,97688,97691],[10,97216,97212],{"id":97217},"_4二维数组的索引与切片",[24,97219,97220],{},"①获取指定单个元素",[24,97222,97223],{},[19,97224],{"alt":92,"src":97225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[87,97227,97229],{"className":30568,"code":97228,"language":30570,"meta":92,"style":92},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[94,97230,97231,97236,97241,97246],{"__ignoreMap":92},[97,97232,97233],{"class":99,"line":100},[97,97234,97235],{"class":191},"#获取元素9\n",[97,97237,97238],{"class":99,"line":195},[97,97239,97240],{"class":191},"#先获取所在行，再获取所在列\n",[97,97242,97243],{"class":99,"line":241},[97,97244,97245],{"class":191},"#数组[行索引号，列索引号]\n",[97,97247,97248,97251,97253,97255,97257],{"class":99,"line":1387},[97,97249,97250],{"class":103},"a[",[97,97252,537],{"class":370},[97,97254,698],{"class":103},[97,97256,398],{"class":370},[97,97258,33436],{"class":103},[24,97260,97261],{},"②获取整行元素",[87,97263,97265],{"className":30568,"code":97264,"language":30570,"meta":92,"style":92},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[94,97266,97267,97272,97277,97285,97290],{"__ignoreMap":92},[97,97268,97269],{"class":99,"line":100},[97,97270,97271],{"class":191},"#获取整行 数组[行索引号]\n",[97,97273,97274],{"class":99,"line":195},[97,97275,97276],{"class":191},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[97,97278,97279,97281,97283],{"class":99,"line":241},[97,97280,97250],{"class":103},[97,97282,398],{"class":370},[97,97284,33436],{"class":103},[97,97286,97287],{"class":99,"line":1387},[97,97288,97289],{"class":191},"#也可以负索引获取一行\n",[97,97291,97292,97294,97296,97298],{"class":99,"line":1393},[97,97293,97250],{"class":103},[97,97295,852],{"class":319},[97,97297,537],{"class":370},[97,97299,33436],{"class":103},[24,97301,97302],{},"③获取整列元素",[87,97304,97306],{"className":30568,"code":97305,"language":30570,"meta":92,"style":92},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[94,97307,97308,97313,97322,97327],{"__ignoreMap":92},[97,97309,97310],{"class":99,"line":100},[97,97311,97312],{"class":191},"#获取整列 数组名[:,列索引]\n",[97,97314,97315,97318,97320],{"class":99,"line":195},[97,97316,97317],{"class":103},"a[:,",[97,97319,398],{"class":370},[97,97321,33436],{"class":103},[97,97323,97324],{"class":99,"line":241},[97,97325,97326],{"class":191},"#也可以负索引获取一列\n",[97,97328,97329,97331,97333,97335],{"class":99,"line":1387},[97,97330,97317],{"class":103},[97,97332,852],{"class":319},[97,97334,537],{"class":370},[97,97336,33436],{"class":103},[24,97338,97339],{},"④部分行部分列的元素",[87,97341,97343],{"className":30568,"code":97342,"language":30570,"meta":92,"style":92},"#部分行部分列 数组名[行切片，列切片]\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",[94,97344,97345,97350,97360,97364,97368,97373,97378,97382,97394,97398,97402,97407,97412,97417,97422,97426,97431],{"__ignoreMap":92},[97,97346,97347],{"class":99,"line":100},[97,97348,97349],{"class":191},"#部分行部分列 数组名[行切片，列切片]\n",[97,97351,97352,97355,97357],{"class":99,"line":195},[97,97353,97354],{"class":103},"a[:",[97,97356,398],{"class":370},[97,97358,97359],{"class":103},",:]\n",[97,97361,97362],{"class":99,"line":241},[97,97363,93748],{"class":191},[97,97365,97366],{"class":99,"line":1387},[97,97367,94112],{"class":118},[97,97369,97370],{"class":99,"line":1393},[97,97371,97372],{"class":118},"array([[ 1,  2,  3,  4,  5,  6],\n",[97,97374,97375],{"class":99,"line":1407},[97,97376,97377],{"class":118},"       [ 7,  8,  9, 10, 11, 12]])\n",[97,97379,97380],{"class":99,"line":1413},[97,97381,94112],{"class":118},[97,97383,97384,97386,97388,97390,97392],{"class":99,"line":1504},[97,97385,97317],{"class":103},[97,97387,537],{"class":370},[97,97389,1179],{"class":103},[97,97391,613],{"class":370},[97,97393,33436],{"class":103},[97,97395,97396],{"class":99,"line":1510},[97,97397,93748],{"class":191},[97,97399,97400],{"class":99,"line":1522},[97,97401,94112],{"class":118},[97,97403,97404],{"class":99,"line":1804},[97,97405,97406],{"class":118},"array([[ 2,  3,  4],\n",[97,97408,97409],{"class":99,"line":1809},[97,97410,97411],{"class":118},"       [ 8,  9, 10],\n",[97,97413,97414],{"class":99,"line":1815},[97,97415,97416],{"class":118},"       [14, 15, 16],\n",[97,97418,97419],{"class":99,"line":1820},[97,97420,97421],{"class":118},"       [20, 21, 22]])\n",[97,97423,97424],{"class":99,"line":1834},[97,97425,94112],{"class":118},[97,97427,97428],{"class":99,"line":1839},[97,97429,97430],{"class":191},"#对列行同时进行切片，使用了step参数\n",[97,97432,97433,97436,97438,97441,97443],{"class":99,"line":1845},[97,97434,97435],{"class":103},"a[::",[97,97437,398],{"class":370},[97,97439,97440],{"class":103},",::",[97,97442,398],{"class":370},[97,97444,33436],{"class":103},[24,97446,97447],{},"⑤同时获取两个元素",[87,97449,97451],{"className":30568,"code":97450,"language":30570,"meta":92,"style":92},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[94,97452,97453,97458,97463],{"__ignoreMap":92},[97,97454,97455],{"class":99,"line":100},[97,97456,97457],{"class":191},"#同时获取第三行第二列，第四行第一列\n",[97,97459,97460],{"class":99,"line":195},[97,97461,97462],{"class":191},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[97,97464,97465,97468,97470,97472,97474,97476,97478,97480,97482],{"class":99,"line":241},[97,97466,97467],{"class":103},"a[(",[97,97469,398],{"class":370},[97,97471,698],{"class":103},[97,97473,392],{"class":370},[97,97475,42437],{"class":103},[97,97477,537],{"class":370},[97,97479,698],{"class":103},[97,97481,511],{"class":370},[97,97483,97484],{"class":103},")]\n",[24,97486,97487],{},"⑥切片，对行进行反向获取",[87,97489,97491],{"className":30568,"code":97490,"language":30570,"meta":92,"style":92},"#切片 对所有行进行反向获取\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",[94,97492,97493,97498,97508,97512,97516,97521,97526,97531,97536,97540,97545,97561,97565,97570,97575,97580,97585],{"__ignoreMap":92},[97,97494,97495],{"class":99,"line":100},[97,97496,97497],{"class":191},"#切片 对所有行进行反向获取\n",[97,97499,97500,97502,97504,97506],{"class":99,"line":195},[97,97501,97435],{"class":103},[97,97503,852],{"class":319},[97,97505,537],{"class":370},[97,97507,33436],{"class":103},[97,97509,97510],{"class":99,"line":241},[97,97511,93748],{"class":191},[97,97513,97514],{"class":99,"line":1387},[97,97515,94112],{"class":118},[97,97517,97518],{"class":99,"line":1393},[97,97519,97520],{"class":118},"array([[19, 20, 21, 22, 23, 24],\n",[97,97522,97523],{"class":99,"line":1407},[97,97524,97525],{"class":118},"       [13, 14, 15, 16, 17, 18],\n",[97,97527,97528],{"class":99,"line":1413},[97,97529,97530],{"class":118},"       [ 7,  8,  9, 10, 11, 12],\n",[97,97532,97533],{"class":99,"line":1504},[97,97534,97535],{"class":118},"       [ 1,  2,  3,  4,  5,  6]])\n",[97,97537,97538],{"class":99,"line":1510},[97,97539,94112],{"class":118},[97,97541,97542],{"class":99,"line":1522},[97,97543,97544],{"class":191},"#对行列都进行反向切片获取\n",[97,97546,97547,97549,97551,97553,97555,97557,97559],{"class":99,"line":1804},[97,97548,97435],{"class":103},[97,97550,852],{"class":319},[97,97552,537],{"class":370},[97,97554,97440],{"class":103},[97,97556,852],{"class":319},[97,97558,537],{"class":370},[97,97560,33436],{"class":103},[97,97562,97563],{"class":99,"line":1809},[97,97564,94112],{"class":118},[97,97566,97567],{"class":99,"line":1815},[97,97568,97569],{"class":118},"array([[24, 23, 22, 21, 20, 19],\n",[97,97571,97572],{"class":99,"line":1820},[97,97573,97574],{"class":118},"       [18, 17, 16, 15, 14, 13],\n",[97,97576,97577],{"class":99,"line":1834},[97,97578,97579],{"class":118},"       [12, 11, 10,  9,  8,  7],\n",[97,97581,97582],{"class":99,"line":1839},[97,97583,97584],{"class":118},"       [ 6,  5,  4,  3,  2,  1]])\n",[97,97586,97587],{"class":99,"line":1845},[97,97588,94112],{"class":118},[24,97590,97591],{},"⑦修改元素",[87,97593,97595],{"className":30568,"code":97594,"language":30570,"meta":92,"style":92},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[94,97596,97597,97602,97620,97625],{"__ignoreMap":92},[97,97598,97599],{"class":99,"line":100},[97,97600,97601],{"class":191},"#获取前两行和前两列\n",[97,97603,97604,97607,97609,97611,97613,97616,97618],{"class":99,"line":195},[97,97605,97606],{"class":103},"sub_a",[97,97608,115],{"class":319},[97,97610,97354],{"class":103},[97,97612,398],{"class":370},[97,97614,97615],{"class":103},",:",[97,97617,398],{"class":370},[97,97619,33436],{"class":103},[97,97621,97622],{"class":99,"line":241},[97,97623,97624],{"class":191},"#修改sub_a第一个元素的值\n",[97,97626,97627,97630,97632,97634,97636,97638,97640],{"class":99,"line":1387},[97,97628,97629],{"class":103},"sub_a[",[97,97631,511],{"class":370},[97,97633,698],{"class":103},[97,97635,511],{"class":370},[97,97637,1259],{"class":103},[97,97639,115],{"class":319},[97,97641,97642],{"class":370},"100\n",[24,97644,97645],{},"⑧数组复制copy()",[87,97647,97649],{"className":30568,"code":97648,"language":30570,"meta":92,"style":92},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[94,97650,97651,97656,97666,97671],{"__ignoreMap":92},[97,97652,97653],{"class":99,"line":100},[97,97654,97655],{"class":191},"#数组复制\n",[97,97657,97658,97661,97663],{"class":99,"line":195},[97,97659,97660],{"class":103},"copy_a",[97,97662,115],{"class":319},[97,97664,97665],{"class":103},"np.copy(sub_a)\n",[97,97667,97668],{"class":99,"line":241},[97,97669,97670],{"class":191},"#修改copy_a后不影响原数组\n",[97,97672,97673,97676,97678,97680,97682,97684,97686],{"class":99,"line":1387},[97,97674,97675],{"class":103},"copy_a[",[97,97677,511],{"class":370},[97,97679,698],{"class":103},[97,97681,511],{"class":370},[97,97683,1259],{"class":103},[97,97685,115],{"class":319},[97,97687,97642],{"class":370},[24,97689,97690],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[231,97692,97693],{},"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":92,"searchDepth":195,"depth":195,"links":97695},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97212,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97702,"title":97703,"body":97704,"description":246,"extension":247,"meta":98196,"navigation":249,"path":98197,"seo":98198,"stem":98199,"__hash__":98200},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97705,"toc":98188},[97706,97709,97713,97716,97719,97772,97775,97800,97803,97822,97842,97845,97861,97865,97911,97915,97957,97961,97964,97967,97970,97973,97976,98038,98098,98102,98105,98162,98166,98171,98180,98185],[10,97707,97703],{"id":97708},"_5改变数组的维度",[14,97710,97712],{"id":97711},"_51-使用reshape","5.1 使用reshape()",[24,97714,97715],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[24,97717,97718],{},"①一维数组转换为二维数组",[87,97720,97722],{"className":30568,"code":97721,"language":30570,"meta":92,"style":92},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[94,97723,97724,97740,97745,97750,97755],{"__ignoreMap":92},[97,97725,97726,97728,97730,97732,97734,97736,97738],{"class":99,"line":100},[97,97727,558],{"class":103},[97,97729,115],{"class":319},[97,97731,93186],{"class":103},[97,97733,537],{"class":370},[97,97735,698],{"class":103},[97,97737,843],{"class":370},[97,97739,329],{"class":103},[97,97741,97742],{"class":99,"line":195},[97,97743,97744],{"class":191},"#将一维数组进行转换\n",[97,97746,97747],{"class":99,"line":241},[97,97748,97749],{"class":191},"#注意点：元素个数不可以变\n",[97,97751,97752],{"class":99,"line":1387},[97,97753,97754],{"class":191},"#转换维度要保持一致，不一致就异常！！！\n",[97,97756,97757,97759,97761,97764,97766,97768,97770],{"class":99,"line":1393},[97,97758,93490],{"class":103},[97,97760,115],{"class":319},[97,97762,97763],{"class":103},"a.reshape(",[97,97765,398],{"class":370},[97,97767,698],{"class":103},[97,97769,664],{"class":370},[97,97771,329],{"class":103},[24,97773,97774],{},"②一维数组转换为三维数组",[87,97776,97778],{"className":30568,"code":97777,"language":30570,"meta":92,"style":92},"aaa=a.reshape(2,3,2)\n",[94,97779,97780],{"__ignoreMap":92},[97,97781,97782,97784,97786,97788,97790,97792,97794,97796,97798],{"class":99,"line":100},[97,97783,95705],{"class":103},[97,97785,115],{"class":319},[97,97787,97763],{"class":103},[97,97789,398],{"class":370},[97,97791,698],{"class":103},[97,97793,392],{"class":370},[97,97795,698],{"class":103},[97,97797,398],{"class":370},[97,97799,329],{"class":103},[24,97801,97802],{},"③二维数组转化为一维数组",[87,97804,97806],{"className":30568,"code":97805,"language":30570,"meta":92,"style":92},"#知道元素个数：\naa.reshape(12)\n",[94,97807,97808,97813],{"__ignoreMap":92},[97,97809,97810],{"class":99,"line":100},[97,97811,97812],{"class":191},"#知道元素个数：\n",[97,97814,97815,97818,97820],{"class":99,"line":195},[97,97816,97817],{"class":103},"aa.reshape(",[97,97819,818],{"class":370},[97,97821,329],{"class":103},[87,97823,97825],{"className":30568,"code":97824,"language":30570,"meta":92,"style":92},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[94,97826,97827,97832],{"__ignoreMap":92},[97,97828,97829],{"class":99,"line":100},[97,97830,97831],{"class":191},"#不知道元素个数，参数传递-1\n",[97,97833,97834,97836,97838,97840],{"class":99,"line":195},[97,97835,97817],{"class":103},[97,97837,852],{"class":319},[97,97839,537],{"class":370},[97,97841,329],{"class":103},[24,97843,97844],{},"④三维数组转换为一维数组",[87,97846,97848],{"className":30568,"code":97847,"language":30570,"meta":92,"style":92},"aaa.reshape(-1)\n",[94,97849,97850],{"__ignoreMap":92},[97,97851,97852,97855,97857,97859],{"class":99,"line":100},[97,97853,97854],{"class":103},"aaa.reshape(",[97,97856,852],{"class":319},[97,97858,537],{"class":370},[97,97860,329],{"class":103},[14,97862,97864],{"id":97863},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[87,97866,97868],{"className":30568,"code":97867,"language":30570,"meta":92,"style":92},"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",[94,97869,97870,97897,97902,97906],{"__ignoreMap":92},[97,97871,97872,97874,97876,97878,97880,97882,97884,97886,97888,97890,97892,97894],{"class":99,"line":100},[97,97873,93490],{"class":103},[97,97875,115],{"class":319},[97,97877,93186],{"class":103},[97,97879,537],{"class":370},[97,97881,698],{"class":103},[97,97883,843],{"class":370},[97,97885,93191],{"class":103},[97,97887,398],{"class":370},[97,97889,698],{"class":103},[97,97891,664],{"class":370},[97,97893,749],{"class":103},[97,97895,97896],{"class":191},"#转换为2行6列的数组\n",[97,97898,97899],{"class":99,"line":195},[97,97900,97901],{"class":103},"aa.revel()\n",[97,97903,97904],{"class":99,"line":241},[97,97905,93748],{"class":191},[97,97907,97908],{"class":99,"line":1387},[97,97909,97910],{"class":191},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,97912,97914],{"id":97913},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[87,97916,97918],{"className":30568,"code":97917,"language":30570,"meta":92,"style":92},"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",[94,97919,97920,97944,97949,97953],{"__ignoreMap":92},[97,97921,97922,97924,97926,97928,97930,97932,97934,97936,97938,97940,97942],{"class":99,"line":100},[97,97923,93490],{"class":103},[97,97925,115],{"class":319},[97,97927,93186],{"class":103},[97,97929,537],{"class":370},[97,97931,698],{"class":103},[97,97933,843],{"class":370},[97,97935,93191],{"class":103},[97,97937,398],{"class":370},[97,97939,698],{"class":103},[97,97941,664],{"class":370},[97,97943,329],{"class":103},[97,97945,97946],{"class":99,"line":195},[97,97947,97948],{"class":103},"aa.flatten()\n",[97,97950,97951],{"class":99,"line":241},[97,97952,93748],{"class":191},[97,97954,97955],{"class":99,"line":1387},[97,97956,97910],{"class":191},[14,97958,97960],{"id":97959},"_54-使用resize","5.4 使用resize()",[24,97962,97963],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[24,97965,97966],{},"通过resize方法可以改变数组的维度",[24,97968,97969],{},"#resize修改数组维度",[24,97971,97972],{},"#以元组的形式指定形状",[24,97974,97975],{},"#改变的是原数组",[87,97977,97979],{"className":30568,"code":97978,"language":30570,"meta":92,"style":92},"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",[94,97980,97981,97997,98017,98030,98034],{"__ignoreMap":92},[97,97982,97983,97985,97987,97989,97991,97993,97995],{"class":99,"line":100},[97,97984,558],{"class":103},[97,97986,115],{"class":319},[97,97988,93186],{"class":103},[97,97990,537],{"class":370},[97,97992,698],{"class":103},[97,97994,843],{"class":370},[97,97996,329],{"class":103},[97,97998,97999,98002,98004,98006,98008,98010,98012,98014],{"class":99,"line":195},[97,98000,98001],{"class":103},"a.shape",[97,98003,115],{"class":319},[97,98005,323],{"class":103},[97,98007,398],{"class":370},[97,98009,698],{"class":103},[97,98011,664],{"class":370},[97,98013,749],{"class":103},[97,98015,98016],{"class":191},"#改变了原数组\n",[97,98018,98019,98021,98023,98026,98028],{"class":99,"line":241},[97,98020,558],{"class":103},[97,98022,115],{"class":319},[97,98024,98025],{"class":103},"resize((",[97,98027,818],{"class":370},[97,98029,30687],{"class":103},[97,98031,98032],{"class":99,"line":1387},[97,98033,93748],{"class":191},[97,98035,98036],{"class":99,"line":1393},[97,98037,97910],{"class":191},[87,98039,98041],{"className":30568,"code":98040,"language":30570,"meta":92,"style":92},"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",[94,98042,98043,98056,98060,98064,98069,98074,98079,98084,98089,98094],{"__ignoreMap":92},[97,98044,98045,98048,98050,98052,98054],{"class":99,"line":100},[97,98046,98047],{"class":103},"a.resize((",[97,98049,664],{"class":370},[97,98051,698],{"class":103},[97,98053,398],{"class":370},[97,98055,30687],{"class":103},[97,98057,98058],{"class":99,"line":195},[97,98059,93748],{"class":191},[97,98061,98062],{"class":99,"line":241},[97,98063,94112],{"class":118},[97,98065,98066],{"class":99,"line":1387},[97,98067,98068],{"class":118},"array([[ 1,  2],\n",[97,98070,98071],{"class":99,"line":1393},[97,98072,98073],{"class":118},"       [ 3,  4],\n",[97,98075,98076],{"class":99,"line":1407},[97,98077,98078],{"class":118},"       [ 5,  6],\n",[97,98080,98081],{"class":99,"line":1413},[97,98082,98083],{"class":118},"       [ 7,  8],\n",[97,98085,98086],{"class":99,"line":1504},[97,98087,98088],{"class":118},"       [ 9, 10],\n",[97,98090,98091],{"class":99,"line":1510},[97,98092,98093],{"class":118},"       [11, 12]])\n",[97,98095,98096],{"class":99,"line":1522},[97,98097,94112],{"class":118},[14,98099,98101],{"id":98100},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[24,98103,98104],{},"改变了原数组",[87,98106,98108],{"className":30568,"code":98107,"language":30570,"meta":92,"style":92},"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",[94,98109,98110,98126,98142,98146,98150,98154,98158],{"__ignoreMap":92},[97,98111,98112,98114,98116,98118,98120,98122,98124],{"class":99,"line":100},[97,98113,558],{"class":103},[97,98115,115],{"class":319},[97,98117,93186],{"class":103},[97,98119,537],{"class":370},[97,98121,698],{"class":103},[97,98123,843],{"class":370},[97,98125,329],{"class":103},[97,98127,98128,98130,98132,98134,98136,98138,98140],{"class":99,"line":195},[97,98129,98001],{"class":103},[97,98131,115],{"class":319},[97,98133,323],{"class":103},[97,98135,398],{"class":370},[97,98137,698],{"class":103},[97,98139,664],{"class":370},[97,98141,329],{"class":103},[97,98143,98144],{"class":99,"line":241},[97,98145,93748],{"class":191},[97,98147,98148],{"class":99,"line":1387},[97,98149,94112],{"class":118},[97,98151,98152],{"class":99,"line":1393},[97,98153,97372],{"class":118},[97,98155,98156],{"class":99,"line":1407},[97,98157,97377],{"class":118},[97,98159,98160],{"class":99,"line":1413},[97,98161,94112],{"class":118},[14,98163,98165],{"id":98164},"_56-重要比较","5.6 重要比较：",[24,98167,98168],{},[19,98169],{"alt":92,"src":98170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[24,98172,98173,98174,98176,98177,98179],{},"口诀：NumPy 函数要么用 ",[94,98175,96147],{},"，要么用 ",[94,98178,31686],{},"，创建结构用 shape，造数据用 size",[24,98181,98182],{},[19,98183],{"alt":92,"src":98184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[231,98186,98187],{},"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":92,"searchDepth":195,"depth":195,"links":98189},[98190,98191,98192,98193,98194,98195],{"id":97711,"depth":195,"text":97712},{"id":97863,"depth":195,"text":97864},{"id":97913,"depth":195,"text":97914},{"id":97959,"depth":195,"text":97960},{"id":98100,"depth":195,"text":98101},{"id":98164,"depth":195,"text":98165},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97703,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98202,"title":98203,"body":98204,"description":246,"extension":247,"meta":99276,"navigation":249,"path":99277,"seo":99278,"stem":99279,"__hash__":99280},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98205,"toc":99270},[98206,98209,98213,98216,98219,98222,98287,98290,98330,98333,98415,98418,98423,98445,98447,98452,98457,98460,98463,98618,98621,98823,98827,98830,98833,98901,98903,98908,98911,98914,98994,98998,99001,99003,99076,99078,99083,99085,99165,99169,99172,99175,99178,99181,99184,99187,99267],[10,98207,98203],{"id":98208},"_6数组的拼接",[14,98210,98212],{"id":98211},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[24,98214,98215],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[24,98217,98218],{},"函数内部传两个数列构成的数列或者元组",[24,98220,98221],{},"①一维数组的拼接",[87,98223,98225],{"className":30568,"code":98224,"language":30570,"meta":92,"style":92},"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",[94,98226,98227,98247,98267,98272,98277,98282],{"__ignoreMap":92},[97,98228,98229,98231,98233,98235,98237,98239,98241,98243,98245],{"class":99,"line":100},[97,98230,558],{"class":103},[97,98232,115],{"class":319},[97,98234,93208],{"class":103},[97,98236,537],{"class":370},[97,98238,698],{"class":103},[97,98240,398],{"class":370},[97,98242,698],{"class":103},[97,98244,392],{"class":370},[97,98246,4848],{"class":103},[97,98248,98249,98251,98253,98255,98257,98259,98261,98263,98265],{"class":99,"line":195},[97,98250,583],{"class":103},[97,98252,115],{"class":319},[97,98254,93208],{"class":103},[97,98256,613],{"class":370},[97,98258,698],{"class":103},[97,98260,639],{"class":370},[97,98262,698],{"class":103},[97,98264,664],{"class":370},[97,98266,4848],{"class":103},[97,98268,98269],{"class":99,"line":241},[97,98270,98271],{"class":191},"#调用concatenate进行数组拼接\n",[97,98273,98274],{"class":99,"line":1387},[97,98275,98276],{"class":103},"np.concatenate((a,b))\n",[97,98278,98279],{"class":99,"line":1393},[97,98280,98281],{"class":191},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[97,98283,98284],{"class":99,"line":1407},[97,98285,98286],{"class":191},"#np.concatenate([a,b])\n",[24,98288,98289],{},"②一维多个数组拼接",[87,98291,98293],{"className":30568,"code":98292,"language":30570,"meta":92,"style":92},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[94,98294,98295,98300,98320,98325],{"__ignoreMap":92},[97,98296,98297],{"class":99,"line":100},[97,98298,98299],{"class":191},"#也可以多个数组进行拼接\n",[97,98301,98302,98304,98306,98308,98310,98312,98314,98316,98318],{"class":99,"line":195},[97,98303,608],{"class":103},[97,98305,115],{"class":319},[97,98307,93208],{"class":103},[97,98309,766],{"class":370},[97,98311,698],{"class":103},[97,98313,792],{"class":370},[97,98315,698],{"class":103},[97,98317,843],{"class":370},[97,98319,4848],{"class":103},[97,98321,98322],{"class":99,"line":241},[97,98323,98324],{"class":103},"c\n",[97,98326,98327],{"class":99,"line":1387},[97,98328,98329],{"class":103},"np.concatenate((a,b,c))\n",[24,98331,98332],{},"③二维数组拼接",[87,98334,98336],{"className":30568,"code":98335,"language":30570,"meta":92,"style":92},"#二维数组使用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",[94,98337,98338,98343,98367,98392,98397,98402],{"__ignoreMap":92},[97,98339,98340],{"class":99,"line":100},[97,98341,98342],{"class":191},"#二维数组使用concatenate进行拼接\n",[97,98344,98345,98347,98349,98351,98353,98355,98357,98359,98361,98363,98365],{"class":99,"line":195},[97,98346,93490],{"class":103},[97,98348,115],{"class":319},[97,98350,93186],{"class":103},[97,98352,537],{"class":370},[97,98354,698],{"class":103},[97,98356,843],{"class":370},[97,98358,93191],{"class":103},[97,98360,392],{"class":370},[97,98362,698],{"class":103},[97,98364,613],{"class":370},[97,98366,329],{"class":103},[97,98368,98369,98372,98374,98376,98378,98380,98382,98384,98386,98388,98390],{"class":99,"line":241},[97,98370,98371],{"class":103},"bb",[97,98373,115],{"class":319},[97,98375,93186],{"class":103},[97,98377,657],{"class":370},[97,98379,698],{"class":103},[97,98381,962],{"class":370},[97,98383,93191],{"class":103},[97,98385,392],{"class":370},[97,98387,698],{"class":103},[97,98389,613],{"class":370},[97,98391,329],{"class":103},[97,98393,98394],{"class":99,"line":1387},[97,98395,98396],{"class":191},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[97,98398,98399],{"class":99,"line":1393},[97,98400,98401],{"class":191},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[97,98403,98404,98407,98409,98411,98413],{"class":99,"line":1407},[97,98405,98406],{"class":103},"np.concatenate((aa,bb),",[97,98408,47704],{"class":5407},[97,98410,115],{"class":319},[97,98412,511],{"class":370},[97,98414,329],{"class":103},[24,98416,98417],{},"结果：",[24,98419,98420],{},[19,98421],{"alt":92,"src":98422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[87,98424,98426],{"className":30568,"code":98425,"language":30570,"meta":92,"style":92},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[94,98427,98428,98433],{"__ignoreMap":92},[97,98429,98430],{"class":99,"line":100},[97,98431,98432],{"class":191},"#指定axis为1进行拼接\n",[97,98434,98435,98437,98439,98441,98443],{"class":99,"line":195},[97,98436,98406],{"class":103},[97,98438,47704],{"class":5407},[97,98440,115],{"class":319},[97,98442,537],{"class":370},[97,98444,329],{"class":103},[24,98446,98417],{},[24,98448,98449],{},[19,98450],{"alt":92,"src":98451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[24,98453,98454],{},[469,98455,98456],{},"二维数组总结：0竖着方向，1横着方向",[24,98458,98459],{},"④三维数组拼接",[24,98461,98462],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[87,98464,98466],{"className":30568,"code":98465,"language":30570,"meta":92,"style":92},"#两个三行六列\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",[94,98467,98468,98473,98501,98531,98536,98553,98558,98563,98568,98585,98590,98595,98600,98613],{"__ignoreMap":92},[97,98469,98470],{"class":99,"line":100},[97,98471,98472],{"class":191},"#两个三行六列\n",[97,98474,98475,98477,98479,98481,98483,98485,98487,98489,98491,98493,98495,98497,98499],{"class":99,"line":195},[97,98476,95705],{"class":103},[97,98478,115],{"class":319},[97,98480,93186],{"class":103},[97,98482,537],{"class":370},[97,98484,698],{"class":103},[97,98486,645],{"class":370},[97,98488,93191],{"class":103},[97,98490,398],{"class":370},[97,98492,698],{"class":103},[97,98494,392],{"class":370},[97,98496,698],{"class":103},[97,98498,664],{"class":370},[97,98500,329],{"class":103},[97,98502,98503,98506,98508,98510,98512,98514,98517,98519,98521,98523,98525,98527,98529],{"class":99,"line":241},[97,98504,98505],{"class":103},"bbb",[97,98507,115],{"class":319},[97,98509,93186],{"class":103},[97,98511,657],{"class":370},[97,98513,698],{"class":103},[97,98515,98516],{"class":370},"137",[97,98518,93191],{"class":103},[97,98520,398],{"class":370},[97,98522,698],{"class":103},[97,98524,392],{"class":370},[97,98526,698],{"class":103},[97,98528,664],{"class":370},[97,98530,329],{"class":103},[97,98532,98533],{"class":99,"line":1387},[97,98534,98535],{"class":191},"#axis=0\n",[97,98537,98538,98540,98542,98545,98547,98549,98551],{"class":99,"line":1393},[97,98539,1015],{"class":103},[97,98541,115],{"class":319},[97,98543,98544],{"class":103},"np.concatenate((aaa,bbb),",[97,98546,47704],{"class":5407},[97,98548,115],{"class":319},[97,98550,511],{"class":370},[97,98552,329],{"class":103},[97,98554,98555],{"class":99,"line":1407},[97,98556,98557],{"class":103},"s.shape\n",[97,98559,98560],{"class":99,"line":1413},[97,98561,98562],{"class":191},"#输出：(4,3,6)\n",[97,98564,98565],{"class":99,"line":1504},[97,98566,98567],{"class":191},"#axis=1\n",[97,98569,98570,98573,98575,98577,98579,98581,98583],{"class":99,"line":1510},[97,98571,98572],{"class":103},"ss",[97,98574,115],{"class":319},[97,98576,98544],{"class":103},[97,98578,47704],{"class":5407},[97,98580,115],{"class":319},[97,98582,537],{"class":370},[97,98584,329],{"class":103},[97,98586,98587],{"class":99,"line":1522},[97,98588,98589],{"class":103},"ss.shape\n",[97,98591,98592],{"class":99,"line":1804},[97,98593,98594],{"class":191},"#输出：(2,6,6)\n",[97,98596,98597],{"class":99,"line":1809},[97,98598,98599],{"class":191},"#axis=2\n",[97,98601,98602,98604,98606,98608,98610],{"class":99,"line":1815},[97,98603,98544],{"class":103},[97,98605,47704],{"class":5407},[97,98607,115],{"class":319},[97,98609,398],{"class":370},[97,98611,98612],{"class":103},").shape\n",[97,98614,98615],{"class":99,"line":1820},[97,98616,98617],{"class":191},"#输出：（2，3，12）\n",[24,98619,98620],{},"⑤四维数组拼接",[87,98622,98624],{"className":30568,"code":98623,"language":30570,"meta":92,"style":92},"#两个三行六列\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",[94,98625,98626,98630,98658,98686,98711,98737,98741,98754,98759,98763,98775,98780,98784,98796,98801,98806,98818],{"__ignoreMap":92},[97,98627,98628],{"class":99,"line":100},[97,98629,98472],{"class":191},[97,98631,98632,98634,98636,98638,98640,98642,98644,98646,98648,98650,98652,98654,98656],{"class":99,"line":195},[97,98633,95705],{"class":103},[97,98635,115],{"class":319},[97,98637,93186],{"class":103},[97,98639,537],{"class":370},[97,98641,698],{"class":103},[97,98643,645],{"class":370},[97,98645,93191],{"class":103},[97,98647,398],{"class":370},[97,98649,698],{"class":103},[97,98651,392],{"class":370},[97,98653,698],{"class":103},[97,98655,664],{"class":370},[97,98657,329],{"class":103},[97,98659,98660,98662,98664,98666,98668,98670,98672,98674,98676,98678,98680,98682,98684],{"class":99,"line":241},[97,98661,98505],{"class":103},[97,98663,115],{"class":319},[97,98665,93186],{"class":103},[97,98667,657],{"class":370},[97,98669,698],{"class":103},[97,98671,98516],{"class":370},[97,98673,93191],{"class":103},[97,98675,398],{"class":370},[97,98677,698],{"class":103},[97,98679,392],{"class":370},[97,98681,698],{"class":103},[97,98683,664],{"class":370},[97,98685,329],{"class":103},[97,98687,98688,98691,98693,98695,98697,98699,98701,98703,98705,98707,98709],{"class":99,"line":1387},[97,98689,98690],{"class":103},"aaaa",[97,98692,115],{"class":319},[97,98694,97854],{"class":103},[97,98696,398],{"class":370},[97,98698,698],{"class":103},[97,98700,392],{"class":370},[97,98702,698],{"class":103},[97,98704,392],{"class":370},[97,98706,698],{"class":103},[97,98708,398],{"class":370},[97,98710,329],{"class":103},[97,98712,98713,98716,98718,98721,98723,98725,98727,98729,98731,98733,98735],{"class":99,"line":1393},[97,98714,98715],{"class":103},"bbbb",[97,98717,115],{"class":319},[97,98719,98720],{"class":103},"bbb.reshape(",[97,98722,398],{"class":370},[97,98724,698],{"class":103},[97,98726,392],{"class":370},[97,98728,698],{"class":103},[97,98730,392],{"class":370},[97,98732,698],{"class":103},[97,98734,398],{"class":370},[97,98736,329],{"class":103},[97,98738,98739],{"class":99,"line":1407},[97,98740,98535],{"class":191},[97,98742,98743,98746,98748,98750,98752],{"class":99,"line":1413},[97,98744,98745],{"class":103},"np.concatenate((aaaa,bbbb),",[97,98747,47704],{"class":5407},[97,98749,115],{"class":319},[97,98751,511],{"class":370},[97,98753,98612],{"class":103},[97,98755,98756],{"class":99,"line":1504},[97,98757,98758],{"class":191},"#结果：（4，3，3，2）\n",[97,98760,98761],{"class":99,"line":1510},[97,98762,98567],{"class":191},[97,98764,98765,98767,98769,98771,98773],{"class":99,"line":1522},[97,98766,98745],{"class":103},[97,98768,47704],{"class":5407},[97,98770,115],{"class":319},[97,98772,537],{"class":370},[97,98774,98612],{"class":103},[97,98776,98777],{"class":99,"line":1804},[97,98778,98779],{"class":191},"#结果：（2，6，3，2）\n",[97,98781,98782],{"class":99,"line":1809},[97,98783,98599],{"class":191},[97,98785,98786,98788,98790,98792,98794],{"class":99,"line":1815},[97,98787,98745],{"class":103},[97,98789,47704],{"class":5407},[97,98791,115],{"class":319},[97,98793,398],{"class":370},[97,98795,98612],{"class":103},[97,98797,98798],{"class":99,"line":1820},[97,98799,98800],{"class":191},"#结果：（2，3，6，2）\n",[97,98802,98803],{"class":99,"line":1834},[97,98804,98805],{"class":191},"#axis=3\n",[97,98807,98808,98810,98812,98814,98816],{"class":99,"line":1839},[97,98809,98745],{"class":103},[97,98811,47704],{"class":5407},[97,98813,115],{"class":319},[97,98815,392],{"class":370},[97,98817,98612],{"class":103},[97,98819,98820],{"class":99,"line":1845},[97,98821,98822],{"class":191},"#结果：（2，3，3，4）\n",[14,98824,98826],{"id":98825},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[24,98828,98829],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[24,98831,98832],{},"①二维数组",[87,98834,98836],{"className":30568,"code":98835,"language":30570,"meta":92,"style":92},"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",[94,98837,98838,98862,98886,98891,98896],{"__ignoreMap":92},[97,98839,98840,98842,98844,98846,98848,98850,98852,98854,98856,98858,98860],{"class":99,"line":100},[97,98841,93490],{"class":103},[97,98843,115],{"class":319},[97,98845,93186],{"class":103},[97,98847,537],{"class":370},[97,98849,698],{"class":103},[97,98851,843],{"class":370},[97,98853,93191],{"class":103},[97,98855,392],{"class":370},[97,98857,698],{"class":103},[97,98859,613],{"class":370},[97,98861,329],{"class":103},[97,98863,98864,98866,98868,98870,98872,98874,98876,98878,98880,98882,98884],{"class":99,"line":195},[97,98865,98371],{"class":103},[97,98867,115],{"class":319},[97,98869,93186],{"class":103},[97,98871,657],{"class":370},[97,98873,698],{"class":103},[97,98875,962],{"class":370},[97,98877,93191],{"class":103},[97,98879,392],{"class":370},[97,98881,698],{"class":103},[97,98883,613],{"class":370},[97,98885,329],{"class":103},[97,98887,98888],{"class":99,"line":241},[97,98889,98890],{"class":103},"np.hstack((aa,bb))\n",[97,98892,98893],{"class":99,"line":1387},[97,98894,98895],{"class":191},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[97,98897,98898],{"class":99,"line":1393},[97,98899,98900],{"class":191},"#np.hstack([aa,bb])\n",[24,98902,98417],{},[24,98904,98905],{},[19,98906],{"alt":92,"src":98907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[24,98909,98910],{},"等效于concatenate()函数中axis=1时的情况",[24,98912,98913],{},"②三维数组",[87,98915,98917],{"className":30568,"code":98916,"language":30570,"meta":92,"style":92},"#两个三行六列\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",[94,98918,98919,98923,98951,98979,98984,98989],{"__ignoreMap":92},[97,98920,98921],{"class":99,"line":100},[97,98922,98472],{"class":191},[97,98924,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943,98945,98947,98949],{"class":99,"line":195},[97,98926,95705],{"class":103},[97,98928,115],{"class":319},[97,98930,93186],{"class":103},[97,98932,537],{"class":370},[97,98934,698],{"class":103},[97,98936,645],{"class":370},[97,98938,93191],{"class":103},[97,98940,398],{"class":370},[97,98942,698],{"class":103},[97,98944,392],{"class":370},[97,98946,698],{"class":103},[97,98948,664],{"class":370},[97,98950,329],{"class":103},[97,98952,98953,98955,98957,98959,98961,98963,98965,98967,98969,98971,98973,98975,98977],{"class":99,"line":241},[97,98954,98505],{"class":103},[97,98956,115],{"class":319},[97,98958,93186],{"class":103},[97,98960,657],{"class":370},[97,98962,698],{"class":103},[97,98964,98516],{"class":370},[97,98966,93191],{"class":103},[97,98968,398],{"class":370},[97,98970,698],{"class":103},[97,98972,392],{"class":370},[97,98974,698],{"class":103},[97,98976,664],{"class":370},[97,98978,329],{"class":103},[97,98980,98981],{"class":99,"line":1387},[97,98982,98983],{"class":191},"#使用hstack\n",[97,98985,98986],{"class":99,"line":1393},[97,98987,98988],{"class":103},"np.hstack((aaa,bbb)).shape\n",[97,98990,98991],{"class":99,"line":1407},[97,98992,98993],{"class":191},"#输出：（2，6，6）\n",[14,98995,98997],{"id":98996},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[24,98999,99000],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[24,99002,98832],{},[87,99004,99006],{"className":30568,"code":99005,"language":30570,"meta":92,"style":92},"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",[94,99007,99008,99032,99056,99061,99066,99071],{"__ignoreMap":92},[97,99009,99010,99012,99014,99016,99018,99020,99022,99024,99026,99028,99030],{"class":99,"line":100},[97,99011,93490],{"class":103},[97,99013,115],{"class":319},[97,99015,93186],{"class":103},[97,99017,537],{"class":370},[97,99019,698],{"class":103},[97,99021,843],{"class":370},[97,99023,93191],{"class":103},[97,99025,392],{"class":370},[97,99027,698],{"class":103},[97,99029,613],{"class":370},[97,99031,329],{"class":103},[97,99033,99034,99036,99038,99040,99042,99044,99046,99048,99050,99052,99054],{"class":99,"line":195},[97,99035,98371],{"class":103},[97,99037,115],{"class":319},[97,99039,93186],{"class":103},[97,99041,657],{"class":370},[97,99043,698],{"class":103},[97,99045,962],{"class":370},[97,99047,93191],{"class":103},[97,99049,392],{"class":370},[97,99051,698],{"class":103},[97,99053,613],{"class":370},[97,99055,329],{"class":103},[97,99057,99058],{"class":99,"line":241},[97,99059,99060],{"class":191},"#vstack 垂直方向进行堆叠\n",[97,99062,99063],{"class":99,"line":1387},[97,99064,99065],{"class":103},"np.vstack((aa,bb))\n",[97,99067,99068],{"class":99,"line":1393},[97,99069,99070],{"class":191},"#与hstack传的参数类似，等价于：\n",[97,99072,99073],{"class":99,"line":1407},[97,99074,99075],{"class":103},"np.vstack([aa,bb])\n",[24,99077,98417],{},[24,99079,99080],{},[19,99081],{"alt":92,"src":99082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[24,99084,98913],{},[87,99086,99088],{"className":30568,"code":99087,"language":30570,"meta":92,"style":92},"#两个三行六列\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",[94,99089,99090,99094,99122,99150,99155,99160],{"__ignoreMap":92},[97,99091,99092],{"class":99,"line":100},[97,99093,98472],{"class":191},[97,99095,99096,99098,99100,99102,99104,99106,99108,99110,99112,99114,99116,99118,99120],{"class":99,"line":195},[97,99097,95705],{"class":103},[97,99099,115],{"class":319},[97,99101,93186],{"class":103},[97,99103,537],{"class":370},[97,99105,698],{"class":103},[97,99107,645],{"class":370},[97,99109,93191],{"class":103},[97,99111,398],{"class":370},[97,99113,698],{"class":103},[97,99115,392],{"class":370},[97,99117,698],{"class":103},[97,99119,664],{"class":370},[97,99121,329],{"class":103},[97,99123,99124,99126,99128,99130,99132,99134,99136,99138,99140,99142,99144,99146,99148],{"class":99,"line":241},[97,99125,98505],{"class":103},[97,99127,115],{"class":319},[97,99129,93186],{"class":103},[97,99131,657],{"class":370},[97,99133,698],{"class":103},[97,99135,98516],{"class":370},[97,99137,93191],{"class":103},[97,99139,398],{"class":370},[97,99141,698],{"class":103},[97,99143,392],{"class":370},[97,99145,698],{"class":103},[97,99147,664],{"class":370},[97,99149,329],{"class":103},[97,99151,99152],{"class":99,"line":1387},[97,99153,99154],{"class":191},"#使用vstack\n",[97,99156,99157],{"class":99,"line":1393},[97,99158,99159],{"class":103},"np.vstack((aaa,bbb)).shape\n",[97,99161,99162],{"class":99,"line":1407},[97,99163,99164],{"class":191},"#输出：（4，3，6）\n",[14,99166,99168],{"id":99167},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[24,99170,99171],{},"该方法是三维数组特有的方法",[24,99173,99174],{},"也就是说",[24,99176,99177],{},"一维数组拼接方法用：concatenate()",[24,99179,99180],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[24,99182,99183],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[24,99185,99186],{},"四维数组及多维数组只能用concatenate进行拼接",[87,99188,99190],{"className":30568,"code":99189,"language":30570,"meta":92,"style":92},"#两个三行六列\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",[94,99191,99192,99196,99224,99252,99257,99262],{"__ignoreMap":92},[97,99193,99194],{"class":99,"line":100},[97,99195,98472],{"class":191},[97,99197,99198,99200,99202,99204,99206,99208,99210,99212,99214,99216,99218,99220,99222],{"class":99,"line":195},[97,99199,95705],{"class":103},[97,99201,115],{"class":319},[97,99203,93186],{"class":103},[97,99205,537],{"class":370},[97,99207,698],{"class":103},[97,99209,645],{"class":370},[97,99211,93191],{"class":103},[97,99213,398],{"class":370},[97,99215,698],{"class":103},[97,99217,392],{"class":370},[97,99219,698],{"class":103},[97,99221,664],{"class":370},[97,99223,329],{"class":103},[97,99225,99226,99228,99230,99232,99234,99236,99238,99240,99242,99244,99246,99248,99250],{"class":99,"line":241},[97,99227,98505],{"class":103},[97,99229,115],{"class":319},[97,99231,93186],{"class":103},[97,99233,657],{"class":370},[97,99235,698],{"class":103},[97,99237,98516],{"class":370},[97,99239,93191],{"class":103},[97,99241,398],{"class":370},[97,99243,698],{"class":103},[97,99245,392],{"class":370},[97,99247,698],{"class":103},[97,99249,664],{"class":370},[97,99251,329],{"class":103},[97,99253,99254],{"class":99,"line":1387},[97,99255,99256],{"class":191},"#使用dstack\n",[97,99258,99259],{"class":99,"line":1393},[97,99260,99261],{"class":103},"np.dstack((aaa,bbb)).shape\n",[97,99263,99264],{"class":99,"line":1407},[97,99265,99266],{"class":191},"#结果：（2，3，12）\n",[231,99268,99269],{},"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":92,"searchDepth":195,"depth":195,"links":99271},[99272,99273,99274,99275],{"id":98211,"depth":195,"text":98212},{"id":98825,"depth":195,"text":98826},{"id":98996,"depth":195,"text":98997},{"id":99167,"depth":195,"text":99168},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98203,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99282,"title":99283,"body":99284,"description":246,"extension":247,"meta":99559,"navigation":249,"path":99560,"seo":99561,"stem":99562,"__hash__":99563},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99285,"toc":99557},[99286,99289,99292,99386,99389,99392,99395,99398,99401,99404,99407,99410,99554],[10,99287,99283],{"id":99288},"_7数组转置",[24,99290,99291],{},"使用transpose()函数",[87,99293,99295],{"className":30568,"code":99294,"language":30570,"meta":92,"style":92},"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",[94,99296,99297,99307,99331,99336,99341,99346,99351,99359,99363,99367,99372,99377,99382],{"__ignoreMap":92},[97,99298,99299,99301,99303,99305],{"class":99,"line":100},[97,99300,30582],{"class":319},[97,99302,31570],{"class":103},[97,99304,31573],{"class":319},[97,99306,31576],{"class":103},[97,99308,99309,99311,99313,99315,99317,99319,99321,99323,99325,99327,99329],{"class":99,"line":195},[97,99310,558],{"class":103},[97,99312,115],{"class":319},[97,99314,31907],{"class":103},[97,99316,537],{"class":370},[97,99318,698],{"class":103},[97,99320,843],{"class":370},[97,99322,93191],{"class":103},[97,99324,613],{"class":370},[97,99326,698],{"class":103},[97,99328,392],{"class":370},[97,99330,329],{"class":103},[97,99332,99333],{"class":99,"line":241},[97,99334,99335],{"class":191},"#二维数组转置\n",[97,99337,99338],{"class":99,"line":1387},[97,99339,99340],{"class":191},"#调用transpose()函数\n",[97,99342,99343],{"class":99,"line":1393},[97,99344,99345],{"class":103},"a.transpose()\n",[97,99347,99348],{"class":99,"line":1407},[97,99349,99350],{"class":191},"#对于二维数组也可以采用.T来实现\n",[97,99352,99353,99356],{"class":99,"line":1413},[97,99354,99355],{"class":103},"a.T",[97,99357,99358],{"class":191},"#与上述代码一样\n",[97,99360,99361],{"class":99,"line":1504},[97,99362,93748],{"class":191},[97,99364,99365],{"class":99,"line":1510},[97,99366,94112],{"class":118},[97,99368,99369],{"class":99,"line":1522},[97,99370,99371],{"class":118},"array([[ 1,  4,  7, 10],\n",[97,99373,99374],{"class":99,"line":1804},[97,99375,99376],{"class":118},"       [ 2,  5,  8, 11],\n",[97,99378,99379],{"class":99,"line":1809},[97,99380,99381],{"class":118},"       [ 3,  6,  9, 12]])\n",[97,99383,99384],{"class":99,"line":1815},[97,99385,94112],{"class":118},[24,99387,99388],{},"也可以使用np.transpose()的形式",[24,99390,99391],{},"#多维数组进行转置 np.transpose()",[24,99393,99394],{},"#对二维数组也可以使用np.transpose()进行转置",[24,99396,99397],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[24,99399,99400],{},"第二个参数，维度可以理解为用axis中的数来理解",[24,99402,99403],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[24,99405,99406],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[24,99408,99409],{},"四维及以上的数组也是一样的道理",[87,99411,99413],{"className":30568,"code":99412,"language":30570,"meta":92,"style":92},"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",[94,99414,99415,99443,99448,99453,99458,99476,99481,99513,99518,99523,99528,99549],{"__ignoreMap":92},[97,99416,99417,99419,99421,99423,99425,99427,99429,99431,99433,99435,99437,99439,99441],{"class":99,"line":100},[97,99418,1140],{"class":103},[97,99420,115],{"class":319},[97,99422,93186],{"class":103},[97,99424,537],{"class":370},[97,99426,698],{"class":103},[97,99428,645],{"class":370},[97,99430,93191],{"class":103},[97,99432,392],{"class":370},[97,99434,698],{"class":103},[97,99436,664],{"class":370},[97,99438,698],{"class":103},[97,99440,398],{"class":370},[97,99442,329],{"class":103},[97,99444,99445],{"class":99,"line":195},[97,99446,99447],{"class":103},"x.shape\n",[97,99449,99450],{"class":99,"line":241},[97,99451,99452],{"class":191},"#结果：（3,6,2）\n",[97,99454,99455],{"class":99,"line":1387},[97,99456,99457],{"class":191},"#使用np.transpose()进行转置 变为(2,6,3)\n",[97,99459,99460,99463,99465,99467,99469,99471,99473],{"class":99,"line":1393},[97,99461,99462],{"class":103},"np.transpose(x,(",[97,99464,398],{"class":370},[97,99466,698],{"class":103},[97,99468,537],{"class":370},[97,99470,698],{"class":103},[97,99472,511],{"class":370},[97,99474,99475],{"class":103},")).shape\n",[97,99477,99478],{"class":99,"line":1407},[97,99479,99480],{"class":191},"#结果：(2,6,3)\n",[97,99482,99483,99485,99487,99489,99491,99493,99495,99497,99499,99501,99503,99505,99507,99509,99511],{"class":99,"line":1413},[97,99484,98690],{"class":103},[97,99486,115],{"class":319},[97,99488,93186],{"class":103},[97,99490,537],{"class":370},[97,99492,698],{"class":103},[97,99494,645],{"class":370},[97,99496,93191],{"class":103},[97,99498,392],{"class":370},[97,99500,698],{"class":103},[97,99502,398],{"class":370},[97,99504,698],{"class":103},[97,99506,537],{"class":370},[97,99508,698],{"class":103},[97,99510,664],{"class":370},[97,99512,329],{"class":103},[97,99514,99515],{"class":99,"line":1504},[97,99516,99517],{"class":103},"aaaa.shape\n",[97,99519,99520],{"class":99,"line":1510},[97,99521,99522],{"class":191},"#结果：（3，2，1，6）\n",[97,99524,99525],{"class":99,"line":1522},[97,99526,99527],{"class":191},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[97,99529,99530,99533,99535,99537,99539,99541,99543,99545,99547],{"class":99,"line":1804},[97,99531,99532],{"class":103},"np.transpose(aaaa,(",[97,99534,537],{"class":370},[97,99536,698],{"class":103},[97,99538,398],{"class":370},[97,99540,698],{"class":103},[97,99542,511],{"class":370},[97,99544,698],{"class":103},[97,99546,392],{"class":370},[97,99548,99475],{"class":103},[97,99550,99551],{"class":99,"line":1809},[97,99552,99553],{"class":191},"#结果：(2,1,3,6)\n",[231,99555,99556],{},"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":92,"searchDepth":195,"depth":195,"links":99558},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99283,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99565,"title":99566,"body":99567,"description":246,"extension":247,"meta":100301,"navigation":249,"path":100302,"seo":100303,"stem":100304,"__hash__":100305},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99568,"toc":100299},[99569,99572,99575,99578,99581,99584,99587,99590,99593,99702,99705,99708,100296],[10,99570,99566],{"id":99571},"_8数组分割",[24,99573,99574],{},"split分割",[24,99576,99577],{},"numpy.split(ary,indics_or_sections,axis)",[24,99579,99580],{},"解释：",[24,99582,99583],{},"ary:被分割的数组",[24,99585,99586],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[24,99588,99589],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[24,99591,99592],{},"①一维数组的分割",[87,99594,99596],{"className":30568,"code":99595,"language":30570,"meta":92,"style":92},"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",[94,99597,99598,99614,99619,99628,99632,99637,99645,99649,99654,99659,99672,99676,99681,99693,99697],{"__ignoreMap":92},[97,99599,99600,99602,99604,99606,99608,99610,99612],{"class":99,"line":100},[97,99601,558],{"class":103},[97,99603,115],{"class":319},[97,99605,93186],{"class":103},[97,99607,537],{"class":370},[97,99609,698],{"class":103},[97,99611,740],{"class":370},[97,99613,329],{"class":103},[97,99615,99616],{"class":99,"line":195},[97,99617,99618],{"class":191},"#如果传入整数，必须能够平分，否则会报错\n",[97,99620,99621,99624,99626],{"class":99,"line":241},[97,99622,99623],{"class":103},"np.split(a,",[97,99625,398],{"class":370},[97,99627,329],{"class":103},[97,99629,99630],{"class":99,"line":1387},[97,99631,93748],{"class":191},[97,99633,99634],{"class":99,"line":1393},[97,99635,99636],{"class":191},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[97,99638,99639,99641,99643],{"class":99,"line":1407},[97,99640,99623],{"class":103},[97,99642,613],{"class":370},[97,99644,329],{"class":103},[97,99646,99647],{"class":99,"line":1413},[97,99648,93748],{"class":191},[97,99650,99651],{"class":99,"line":1504},[97,99652,99653],{"class":191},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[97,99655,99656],{"class":99,"line":1510},[97,99657,99658],{"class":191},"#传入数组\n",[97,99660,99661,99664,99666,99668,99670],{"class":99,"line":1522},[97,99662,99663],{"class":103},"np.split(a,[",[97,99665,392],{"class":370},[97,99667,698],{"class":103},[97,99669,639],{"class":370},[97,99671,4848],{"class":103},[97,99673,99674],{"class":99,"line":1804},[97,99675,93748],{"class":191},[97,99677,99678],{"class":99,"line":1809},[97,99679,99680],{"class":191},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[97,99682,99683,99685,99687,99689,99691],{"class":99,"line":1815},[97,99684,99663],{"class":103},[97,99686,639],{"class":370},[97,99688,698],{"class":103},[97,99690,689],{"class":370},[97,99692,4848],{"class":103},[97,99694,99695],{"class":99,"line":1820},[97,99696,93748],{"class":191},[97,99698,99699],{"class":99,"line":1834},[97,99700,99701],{"class":191},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[24,99703,99704],{},"②二维数组的分割",[24,99706,99707],{},"使用split()",[87,99709,99711],{"className":30568,"code":99710,"language":30570,"meta":92,"style":92},"#二维数组分割\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",[94,99712,99713,99718,99742,99747,99756,99760,99764,99769,99774,99779,99784,99789,99794,99799,99803,99816,99820,99824,99828,99832,99836,99841,99846,99851,99855,99860,99876,99880,99884,99889,99894,99899,99904,99909,99914,99919,99924,99929,99934,99939,99944,99949,99954,99959,99964,99969,99974,99978,99982,100002,100006,100010,100015,100020,100025,100030,100035,100040,100045,100050,100055,100060,100065,100070,100075,100080,100085,100090,100095,100100,100104,100109,100118,100122,100126,100130,100134,100138,100142,100146,100150,100154,100163,100167,100171,100175,100179,100183,100187,100191,100195,100199,100203,100207,100211,100215,100219,100223,100227,100231,100235,100239,100243,100247,100260,100264,100268,100272,100276,100280,100284,100288,100292],{"__ignoreMap":92},[97,99714,99715],{"class":99,"line":100},[97,99716,99717],{"class":191},"#二维数组分割\n",[97,99719,99720,99722,99724,99726,99728,99730,99732,99734,99736,99738,99740],{"class":99,"line":195},[97,99721,93490],{"class":103},[97,99723,115],{"class":319},[97,99725,93186],{"class":103},[97,99727,537],{"class":370},[97,99729,698],{"class":103},[97,99731,645],{"class":370},[97,99733,93191],{"class":103},[97,99735,664],{"class":370},[97,99737,698],{"class":103},[97,99739,664],{"class":370},[97,99741,329],{"class":103},[97,99743,99744],{"class":99,"line":241},[97,99745,99746],{"class":191},"#默认axis=0  传入整数平均分,按行来的\n",[97,99748,99749,99752,99754],{"class":99,"line":1387},[97,99750,99751],{"class":103},"np.split(aa,",[97,99753,392],{"class":370},[97,99755,329],{"class":103},[97,99757,99758],{"class":99,"line":1393},[97,99759,95948],{"class":191},[97,99761,99762],{"class":99,"line":1407},[97,99763,94112],{"class":118},[97,99765,99766],{"class":99,"line":1413},[97,99767,99768],{"class":118},"[array([[ 1,  2,  3,  4,  5,  6],\n",[97,99770,99771],{"class":99,"line":1504},[97,99772,99773],{"class":118},"        [ 7,  8,  9, 10, 11, 12]]),\n",[97,99775,99776],{"class":99,"line":1510},[97,99777,99778],{"class":118}," array([[13, 14, 15, 16, 17, 18],\n",[97,99780,99781],{"class":99,"line":1522},[97,99782,99783],{"class":118},"        [19, 20, 21, 22, 23, 24]]),\n",[97,99785,99786],{"class":99,"line":1804},[97,99787,99788],{"class":118}," array([[25, 26, 27, 28, 29, 30],\n",[97,99790,99791],{"class":99,"line":1809},[97,99792,99793],{"class":118},"        [31, 32, 33, 34, 35, 36]])]\n",[97,99795,99796],{"class":99,"line":1815},[97,99797,99798],{"class":118}," '''\n",[97,99800,99801],{"class":99,"line":1820},[97,99802,99658],{"class":191},[97,99804,99805,99808,99810,99812,99814],{"class":99,"line":1834},[97,99806,99807],{"class":103},"np.split(aa,[",[97,99809,398],{"class":370},[97,99811,698],{"class":103},[97,99813,639],{"class":370},[97,99815,4848],{"class":103},[97,99817,99818],{"class":99,"line":1839},[97,99819,95948],{"class":191},[97,99821,99822],{"class":99,"line":1845},[97,99823,94112],{"class":118},[97,99825,99826],{"class":99,"line":1866},[97,99827,99768],{"class":118},[97,99829,99830],{"class":99,"line":1871},[97,99831,99773],{"class":118},[97,99833,99834],{"class":99,"line":1885},[97,99835,99778],{"class":118},[97,99837,99838],{"class":99,"line":1890},[97,99839,99840],{"class":118},"        [19, 20, 21, 22, 23, 24],\n",[97,99842,99843],{"class":99,"line":1919},[97,99844,99845],{"class":118},"        [25, 26, 27, 28, 29, 30]]),\n",[97,99847,99848],{"class":99,"line":1924},[97,99849,99850],{"class":118}," array([[31, 32, 33, 34, 35, 36]])]\n",[97,99852,99853],{"class":99,"line":1941},[97,99854,94112],{"class":118},[97,99856,99857],{"class":99,"line":1946},[97,99858,99859],{"class":191},"#axis=1 按照列来分\n",[97,99861,99862,99864,99866,99868,99870,99872,99874],{"class":99,"line":1951},[97,99863,99751],{"class":103},[97,99865,392],{"class":370},[97,99867,698],{"class":103},[97,99869,47704],{"class":5407},[97,99871,115],{"class":319},[97,99873,537],{"class":370},[97,99875,329],{"class":103},[97,99877,99878],{"class":99,"line":1956},[97,99879,95948],{"class":191},[97,99881,99882],{"class":99,"line":1970},[97,99883,94112],{"class":118},[97,99885,99886],{"class":99,"line":1975},[97,99887,99888],{"class":118},"[array([[ 1,  2],\n",[97,99890,99891],{"class":99,"line":2768},[97,99892,99893],{"class":118},"        [ 7,  8],\n",[97,99895,99896],{"class":99,"line":2782},[97,99897,99898],{"class":118},"        [13, 14],\n",[97,99900,99901],{"class":99,"line":2790},[97,99902,99903],{"class":118},"        [19, 20],\n",[97,99905,99906],{"class":99,"line":2795},[97,99907,99908],{"class":118},"        [25, 26],\n",[97,99910,99911],{"class":99,"line":2801},[97,99912,99913],{"class":118},"        [31, 32]]),\n",[97,99915,99916],{"class":99,"line":2807},[97,99917,99918],{"class":118}," array([[ 3,  4],\n",[97,99920,99921],{"class":99,"line":2812},[97,99922,99923],{"class":118},"        [ 9, 10],\n",[97,99925,99926],{"class":99,"line":8139},[97,99927,99928],{"class":118},"        [15, 16],\n",[97,99930,99931],{"class":99,"line":8163},[97,99932,99933],{"class":118},"        [21, 22],\n",[97,99935,99936],{"class":99,"line":8168},[97,99937,99938],{"class":118},"        [27, 28],\n",[97,99940,99941],{"class":99,"line":8174},[97,99942,99943],{"class":118},"        [33, 34]]),\n",[97,99945,99946],{"class":99,"line":8201},[97,99947,99948],{"class":118}," array([[ 5,  6],\n",[97,99950,99951],{"class":99,"line":8206},[97,99952,99953],{"class":118},"        [11, 12],\n",[97,99955,99956],{"class":99,"line":8212},[97,99957,99958],{"class":118},"        [17, 18],\n",[97,99960,99961],{"class":99,"line":8224},[97,99962,99963],{"class":118},"        [23, 24],\n",[97,99965,99966],{"class":99,"line":8236},[97,99967,99968],{"class":118},"        [29, 30],\n",[97,99970,99971],{"class":99,"line":8248},[97,99972,99973],{"class":118},"        [35, 36]])]\n",[97,99975,99976],{"class":99,"line":9907},[97,99977,99798],{"class":118},[97,99979,99980],{"class":99,"line":9932},[97,99981,99658],{"class":191},[97,99983,99984,99986,99988,99990,99992,99994,99996,99998,100000],{"class":99,"line":9955},[97,99985,99807],{"class":103},[97,99987,537],{"class":370},[97,99989,698],{"class":103},[97,99991,398],{"class":370},[97,99993,41799],{"class":103},[97,99995,47704],{"class":5407},[97,99997,115],{"class":319},[97,99999,537],{"class":370},[97,100001,329],{"class":103},[97,100003,100004],{"class":99,"line":9979},[97,100005,93748],{"class":191},[97,100007,100008],{"class":99,"line":9984},[97,100009,94112],{"class":118},[97,100011,100012],{"class":99,"line":9989},[97,100013,100014],{"class":118},"[array([[ 1],\n",[97,100016,100017],{"class":99,"line":9994},[97,100018,100019],{"class":118},"        [ 7],\n",[97,100021,100022],{"class":99,"line":10003},[97,100023,100024],{"class":118},"        [13],\n",[97,100026,100027],{"class":99,"line":10008},[97,100028,100029],{"class":118},"        [19],\n",[97,100031,100032],{"class":99,"line":10014},[97,100033,100034],{"class":118},"        [25],\n",[97,100036,100037],{"class":99,"line":10035},[97,100038,100039],{"class":118},"        [31]]),\n",[97,100041,100042],{"class":99,"line":10041},[97,100043,100044],{"class":118}," array([[ 2],\n",[97,100046,100047],{"class":99,"line":10055},[97,100048,100049],{"class":118},"        [ 8],\n",[97,100051,100052],{"class":99,"line":10061},[97,100053,100054],{"class":118},"        [14],\n",[97,100056,100057],{"class":99,"line":10088},[97,100058,100059],{"class":118},"        [20],\n",[97,100061,100062],{"class":99,"line":10097},[97,100063,100064],{"class":118},"        [26],\n",[97,100066,100067],{"class":99,"line":10103},[97,100068,100069],{"class":118},"        [32]]),\n",[97,100071,100072],{"class":99,"line":10111},[97,100073,100074],{"class":118}," array([[ 3,  4,  5,  6],\n",[97,100076,100077],{"class":99,"line":10116},[97,100078,100079],{"class":118},"        [ 9, 10, 11, 12],\n",[97,100081,100082],{"class":99,"line":16794},[97,100083,100084],{"class":118},"        [15, 16, 17, 18],\n",[97,100086,100087],{"class":99,"line":16800},[97,100088,100089],{"class":118},"        [21, 22, 23, 24],\n",[97,100091,100092],{"class":99,"line":16823},[97,100093,100094],{"class":118},"        [27, 28, 29, 30],\n",[97,100096,100097],{"class":99,"line":16829},[97,100098,100099],{"class":118},"        [33, 34, 35, 36]])]\n",[97,100101,100102],{"class":99,"line":16852},[97,100103,94112],{"class":118},[97,100105,100106],{"class":99,"line":16866},[97,100107,100108],{"class":191},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[97,100110,100111,100114,100116],{"class":99,"line":16886},[97,100112,100113],{"class":103},"np.vsplit(aa,",[97,100115,392],{"class":370},[97,100117,329],{"class":103},[97,100119,100120],{"class":99,"line":16892},[97,100121,93748],{"class":191},[97,100123,100124],{"class":99,"line":16903},[97,100125,94112],{"class":118},[97,100127,100128],{"class":99,"line":16926},[97,100129,99768],{"class":118},[97,100131,100132],{"class":99,"line":16948},[97,100133,99773],{"class":118},[97,100135,100136],{"class":99,"line":16953},[97,100137,99778],{"class":118},[97,100139,100140],{"class":99,"line":16959},[97,100141,99783],{"class":118},[97,100143,100144],{"class":99,"line":16973},[97,100145,99788],{"class":118},[97,100147,100148],{"class":99,"line":16986},[97,100149,99793],{"class":118},[97,100151,100152],{"class":99,"line":16991},[97,100153,94112],{"class":118},[97,100155,100156,100159,100161],{"class":99,"line":17005},[97,100157,100158],{"class":103},"np.hsplit(aa,",[97,100160,392],{"class":370},[97,100162,329],{"class":103},[97,100164,100165],{"class":99,"line":17010},[97,100166,93748],{"class":191},[97,100168,100169],{"class":99,"line":17016},[97,100170,94112],{"class":118},[97,100172,100173],{"class":99,"line":17021},[97,100174,99888],{"class":118},[97,100176,100177],{"class":99,"line":17035},[97,100178,99893],{"class":118},[97,100180,100181],{"class":99,"line":17040},[97,100182,99898],{"class":118},[97,100184,100185],{"class":99,"line":17045},[97,100186,99903],{"class":118},[97,100188,100189],{"class":99,"line":17059},[97,100190,99908],{"class":118},[97,100192,100193],{"class":99,"line":17071},[97,100194,99913],{"class":118},[97,100196,100197],{"class":99,"line":17076},[97,100198,99918],{"class":118},[97,100200,100201],{"class":99,"line":17089},[97,100202,99923],{"class":118},[97,100204,100205],{"class":99,"line":17094},[97,100206,99928],{"class":118},[97,100208,100209],{"class":99,"line":17099},[97,100210,99933],{"class":118},[97,100212,100213],{"class":99,"line":17104},[97,100214,99938],{"class":118},[97,100216,100217],{"class":99,"line":17117},[97,100218,99943],{"class":118},[97,100220,100221],{"class":99,"line":17122},[97,100222,99948],{"class":118},[97,100224,100225],{"class":99,"line":32823},[97,100226,99953],{"class":118},[97,100228,100229],{"class":99,"line":32829},[97,100230,99958],{"class":118},[97,100232,100233],{"class":99,"line":32835},[97,100234,99963],{"class":118},[97,100236,100237],{"class":99,"line":32841},[97,100238,99968],{"class":118},[97,100240,100241],{"class":99,"line":32847},[97,100242,99973],{"class":118},[97,100244,100245],{"class":99,"line":32858},[97,100246,94112],{"class":118},[97,100248,100249,100252,100254,100256,100258],{"class":99,"line":32864},[97,100250,100251],{"class":103},"np.vsplit(aa,[",[97,100253,398],{"class":370},[97,100255,698],{"class":103},[97,100257,639],{"class":370},[97,100259,4848],{"class":103},[97,100261,100262],{"class":99,"line":32884},[97,100263,93748],{"class":191},[97,100265,100266],{"class":99,"line":32890},[97,100267,94112],{"class":118},[97,100269,100270],{"class":99,"line":32901},[97,100271,99768],{"class":118},[97,100273,100274],{"class":99,"line":32907},[97,100275,99773],{"class":118},[97,100277,100278],{"class":99,"line":32913},[97,100279,99778],{"class":118},[97,100281,100282],{"class":99,"line":32919},[97,100283,99840],{"class":118},[97,100285,100286],{"class":99,"line":32925},[97,100287,99845],{"class":118},[97,100289,100290],{"class":99,"line":32931},[97,100291,99850],{"class":118},[97,100293,100294],{"class":99,"line":32937},[97,100295,99798],{"class":118},[231,100297,100298],{},"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":92,"searchDepth":195,"depth":195,"links":100300},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99566,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100307,"title":100308,"body":100309,"description":246,"extension":247,"meta":100803,"navigation":249,"path":100804,"seo":100805,"stem":100806,"__hash__":100807},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100310,"toc":100794},[100311,100314,100317,100342,100346,100405,100457,100461,100463,100499,100553,100555,100593,100664,100668,100673,100677,100680,100713,100716,100720,100723,100726,100729,100732,100737,100741,100744,100747,100750,100753,100758,100762,100767,100770,100791],[10,100312,100308],{"id":100313},"_9数学函数",[24,100315,100316],{},"补充回顾：python的列表推导式",[87,100318,100320],{"className":30568,"code":100319,"language":30570,"meta":92,"style":92},"[1\u002Fi for i in a]\n",[94,100321,100322],{"__ignoreMap":92},[97,100323,100324,100326,100328,100330,100333,100335,100337,100339],{"class":99,"line":100},[97,100325,1210],{"class":103},[97,100327,537],{"class":370},[97,100329,904],{"class":319},[97,100331,100332],{"class":103},"i ",[97,100334,3216],{"class":319},[97,100336,9629],{"class":103},[97,100338,26233],{"class":319},[97,100340,100341],{"class":103}," a]\n",[14,100343,100345],{"id":100344},"_91-求倒数","9.1 求倒数",[87,100347,100349],{"className":30568,"code":100348,"language":30570,"meta":92,"style":92},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[94,100350,100351,100356,100384,100396],{"__ignoreMap":92},[97,100352,100353],{"class":99,"line":100},[97,100354,100355],{"class":191},"#数组求倒数\n",[97,100357,100358,100360,100362,100364,100366,100368,100370,100372,100374,100376,100378,100380,100382],{"class":99,"line":195},[97,100359,558],{"class":103},[97,100361,115],{"class":319},[97,100363,1210],{"class":103},[97,100365,537],{"class":370},[97,100367,698],{"class":103},[97,100369,398],{"class":370},[97,100371,698],{"class":103},[97,100373,392],{"class":370},[97,100375,698],{"class":103},[97,100377,613],{"class":370},[97,100379,698],{"class":103},[97,100381,639],{"class":370},[97,100383,33436],{"class":103},[97,100385,100386,100388,100390,100393],{"class":99,"line":241},[97,100387,583],{"class":103},[97,100389,115],{"class":319},[97,100391,100392],{"class":103},"np.array(a)",[97,100394,100395],{"class":191},"#将列表转换为数组\n",[97,100397,100398,100400,100402],{"class":99,"line":1387},[97,100399,537],{"class":370},[97,100401,904],{"class":319},[97,100403,100404],{"class":103},"b\n",[87,100406,100408],{"className":30568,"code":100407,"language":30570,"meta":92,"style":92},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[94,100409,100410,100438,100447,100452],{"__ignoreMap":92},[97,100411,100412,100414,100416,100418,100420,100422,100424,100426,100428,100430,100432,100434,100436],{"class":99,"line":100},[97,100413,558],{"class":103},[97,100415,115],{"class":319},[97,100417,1210],{"class":103},[97,100419,537],{"class":370},[97,100421,698],{"class":103},[97,100423,398],{"class":370},[97,100425,698],{"class":103},[97,100427,392],{"class":370},[97,100429,698],{"class":103},[97,100431,613],{"class":370},[97,100433,698],{"class":103},[97,100435,639],{"class":370},[97,100437,33436],{"class":103},[97,100439,100440,100442,100444],{"class":99,"line":195},[97,100441,583],{"class":103},[97,100443,115],{"class":319},[97,100445,100446],{"class":103},"np.array(a)\n",[97,100448,100449],{"class":99,"line":241},[97,100450,100451],{"class":191},"#调用numpy中的函数reciprocal()\n",[97,100453,100454],{"class":99,"line":1387},[97,100455,100456],{"class":103},"np.reciprocal(b)\n",[14,100458,100460],{"id":100459},"_92-求平方","9.2 求平方",[24,100462,94714],{},[87,100464,100466],{"className":30568,"code":100465,"language":30570,"meta":92,"style":92},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[94,100467,100468,100473,100478,100494],{"__ignoreMap":92},[97,100469,100470],{"class":99,"line":100},[97,100471,100472],{"class":191},"#square()，求平方\n",[97,100474,100475],{"class":99,"line":195},[97,100476,100477],{"class":191},"#一维数组\n",[97,100479,100480,100482,100484,100486,100488,100490,100492],{"class":99,"line":241},[97,100481,558],{"class":103},[97,100483,115],{"class":319},[97,100485,93186],{"class":103},[97,100487,537],{"class":370},[97,100489,698],{"class":103},[97,100491,766],{"class":370},[97,100493,329],{"class":103},[97,100495,100496],{"class":99,"line":1387},[97,100497,100498],{"class":103},"np.square(a)\n",[87,100500,100502],{"className":30568,"code":100501,"language":30570,"meta":92,"style":92},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[94,100503,100504,100509,100514,100535],{"__ignoreMap":92},[97,100505,100506],{"class":99,"line":100},[97,100507,100508],{"class":191},"#或者通过循环遍历的形式来计算\n",[97,100510,100511],{"class":99,"line":195},[97,100512,100513],{"class":191},"#这是一个列表\n",[97,100515,100516,100519,100521,100523,100525,100527,100529,100532],{"class":99,"line":241},[97,100517,100518],{"class":103},"[i",[97,100520,775],{"class":319},[97,100522,100332],{"class":103},[97,100524,3216],{"class":319},[97,100526,9629],{"class":103},[97,100528,26233],{"class":319},[97,100530,100531],{"class":103}," a]",[97,100533,100534],{"class":191},"#这个求完之后在数列当中\n",[97,100536,100537,100540,100542,100544,100546,100548,100550],{"class":99,"line":1387},[97,100538,100539],{"class":103},"np.array([i",[97,100541,775],{"class":319},[97,100543,100332],{"class":103},[97,100545,3216],{"class":319},[97,100547,9629],{"class":103},[97,100549,26233],{"class":319},[97,100551,100552],{"class":103}," a])\n",[24,100554,93475],{},[87,100556,100558],{"className":30568,"code":100557,"language":30570,"meta":92,"style":92},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[94,100559,100560,100564,100588],{"__ignoreMap":92},[97,100561,100562],{"class":99,"line":100},[97,100563,93485],{"class":191},[97,100565,100566,100568,100570,100572,100574,100576,100578,100580,100582,100584,100586],{"class":99,"line":195},[97,100567,93490],{"class":103},[97,100569,115],{"class":319},[97,100571,93186],{"class":103},[97,100573,537],{"class":370},[97,100575,698],{"class":103},[97,100577,843],{"class":370},[97,100579,93191],{"class":103},[97,100581,613],{"class":370},[97,100583,698],{"class":103},[97,100585,392],{"class":370},[97,100587,329],{"class":103},[97,100589,100590],{"class":99,"line":241},[97,100591,100592],{"class":103},"np.square(aa)\n",[87,100594,100596],{"className":30568,"code":100595,"language":30570,"meta":92,"style":92},"#传统的方式\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",[94,100597,100598,100603,100612,100628,100644,100659],{"__ignoreMap":92},[97,100599,100600],{"class":99,"line":100},[97,100601,100602],{"class":191},"#传统的方式\n",[97,100604,100605,100607,100609],{"class":99,"line":195},[97,100606,98371],{"class":103},[97,100608,115],{"class":319},[97,100610,100611],{"class":103},"np.empty_like(aa)\n",[97,100613,100614,100616,100618,100620,100622,100624,100626],{"class":99,"line":241},[97,100615,3216],{"class":319},[97,100617,9629],{"class":103},[97,100619,26233],{"class":319},[97,100621,32633],{"class":370},[97,100623,323],{"class":103},[97,100625,613],{"class":370},[97,100627,30976],{"class":103},[97,100629,100630,100632,100634,100636,100638,100640,100642],{"class":99,"line":1387},[97,100631,3392],{"class":319},[97,100633,9691],{"class":103},[97,100635,26233],{"class":319},[97,100637,32633],{"class":370},[97,100639,323],{"class":103},[97,100641,392],{"class":370},[97,100643,30976],{"class":103},[97,100645,100646,100649,100651,100654,100656],{"class":99,"line":1393},[97,100647,100648],{"class":103},"        bb[i,j]",[97,100650,115],{"class":319},[97,100652,100653],{"class":103},"aa[i,j]",[97,100655,775],{"class":319},[97,100657,100658],{"class":103},"aa[i,j]\n",[97,100660,100661],{"class":99,"line":1407},[97,100662,100663],{"class":103},"bb\n",[14,100665,100667],{"id":100666},"_93-求各元素的符号","9.3 求各元素的符号",[24,100669,100670],{},[19,100671],{"alt":92,"src":100672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100674,100676],{"id":100675},"_94-modf函数","9.4 modf函数",[24,100678,100679],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[87,100681,100683],{"className":30568,"code":100682,"language":30570,"meta":92,"style":92},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[94,100684,100685,100708],{"__ignoreMap":92},[97,100686,100687,100689,100691,100693,100695,100697,100699,100701,100703,100706],{"class":99,"line":100},[97,100688,558],{"class":103},[97,100690,115],{"class":319},[97,100692,93186],{"class":103},[97,100694,852],{"class":319},[97,100696,766],{"class":370},[97,100698,698],{"class":103},[97,100700,766],{"class":370},[97,100702,698],{"class":103},[97,100704,100705],{"class":370},"0.3",[97,100707,329],{"class":103},[97,100709,100710],{"class":99,"line":195},[97,100711,100712],{"class":103},"np.modf(a)\n",[24,100714,100715],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100717,100719],{"id":100718},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[24,100721,100722],{},"np.cell()",[24,100724,100725],{},"np.floor()",[24,100727,100728],{},"np.rint()",[24,100730,100731],{},"对各元素分别向上取整、向下取整、四舍五入",[24,100733,100734],{},[19,100735],{"alt":92,"src":100736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100738,100740],{"id":100739},"_96-around函数","9.6 around()函数",[24,100742,100743],{},"around()函数也可以实现对数的小数位数进行操作",[24,100745,100746],{},"其中的参数：",[24,100748,100749],{},"1.要传的数组",[24,100751,100752],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[24,100754,100755],{},[19,100756],{"alt":92,"src":100757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100759,100761],{"id":100760},"_97-三角函数","9.7 三角函数",[24,100763,100764],{},[19,100765],{"alt":92,"src":100766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[24,100768,100769],{},"引入图像模块非常重要",[87,100771,100773],{"className":30568,"code":100772,"language":30570,"meta":92,"style":92},"from matplotlib import pyplot as plt\n",[94,100774,100775],{"__ignoreMap":92},[97,100776,100777,100779,100782,100784,100787,100789],{"class":99,"line":100},[97,100778,30927],{"class":319},[97,100780,100781],{"class":103}," matplotlib ",[97,100783,30582],{"class":319},[97,100785,100786],{"class":103}," pyplot ",[97,100788,31573],{"class":319},[97,100790,31627],{"class":103},[231,100792,100793],{},"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":92,"searchDepth":195,"depth":195,"links":100795},[100796,100797,100798,100799,100800,100801,100802],{"id":100344,"depth":195,"text":100345},{"id":100459,"depth":195,"text":100460},{"id":100666,"depth":195,"text":100667},{"id":100675,"depth":195,"text":100676},{"id":100718,"depth":195,"text":100719},{"id":100739,"depth":195,"text":100740},{"id":100760,"depth":195,"text":100761},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100308,"description":246},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100809,"title":100810,"body":100811,"description":246,"extension":247,"meta":100815,"navigation":249,"path":100816,"seo":100817,"stem":100818,"__hash__":100819},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100812,"toc":100813},[],{"title":92,"searchDepth":195,"depth":195,"links":100814},[],{"category":50610},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100810,"description":246},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100821,"title":100822,"body":100823,"description":92,"extension":247,"meta":102831,"navigation":249,"path":102832,"seo":102833,"stem":102834,"__hash__":102835},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100824,"toc":102807},[100825,100828,100832,100835,100838,100844,100847,100870,100873,100907,100910,100951,100955,100958,101051,101054,101098,101101,101118,101121,101135,101138,101141,101186,101189,101226,101230,101233,101239,101244,101264,101268,101271,101337,101340,101358,101362,101365,101394,101404,101410,101414,101417,101423,101434,101438,101441,101471,101474,101754,101757,101760,101771,101774,101777,101799,101806,101809,101827,101830,101833,101847,101855,101858,101884,101890,101893,101896,101906,101918,101938,101947,101967,101977,102001,102014,102028,102033,102074,102091,102116,102128,102148,102154,102199,102218,102235,102248,102264,102271,102283,102292,102327,102348,102373,102386,102410,102425,102450,102453,102474,102483,102486,102497,102501,102504,102510,102522,102529,102533,102536,102548,102551,102565,102568,102578,102588,102591,102631,102634,102638,102644,102647,102661,102665,102668,102701,102705,102708,102731,102739,102742,102748,102754,102757,102760,102788,102792,102795,102801,102804],[10,100826,100822],{"id":100827},"_1环境安装与第一个-mujoco-程序",[14,100829,100831],{"id":100830},"_1目标说明","1.目标说明",[24,100833,100834],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[24,100836,100837],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[87,100839,100842],{"className":100840,"code":100841,"language":5378,"meta":92},[5376],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[94,100843,100841],{"__ignoreMap":92},[24,100845,100846],{},"需要掌握:",[138,100848,100849,100852,100855,100860,100865],{},[70,100850,100851],{},"Fedora 44 下 MuJoCo 的系统依赖",[70,100853,100854],{},"Python 虚拟环境创建",[70,100856,100857],{},[94,100858,100859],{},"mujoco.MjModel",[70,100861,100862],{},[94,100863,100864],{},"mujoco.MjData",[70,100866,100867],{},[94,100868,100869],{},"mujoco.mj_step(model, data)",[24,100871,100872],{},"MuJoCo 中最重要的两个对象:",[457,100874,100875,100885],{},[460,100876,100877],{},[463,100878,100879,100882],{},[466,100880,100881],{"align":23925},"对象",[466,100883,100884],{"align":23925},"含义",[504,100886,100887,100897],{},[463,100888,100889,100894],{},[509,100890,100891],{"align":23925},[94,100892,100893],{},"MjModel",[509,100895,100896],{"align":23925},"模型结构，来自 XML，基本不随时间变化",[463,100898,100899,100904],{},[509,100900,100901],{"align":23925},[94,100902,100903],{},"MjData",[509,100905,100906],{"align":23925},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[24,100908,100909],{},"可以先用一个类比理解：",[457,100911,100912,100922],{},[460,100913,100914],{},[463,100915,100916,100919],{},[466,100917,100918],{"align":23925},"类比",[466,100920,100921],{"align":23925},"MuJoCo 对象",[504,100923,100924,100933,100942],{},[463,100925,100926,100929],{},[509,100927,100928],{"align":23925},"游戏地图和角色配置",[509,100930,100931],{"align":23925},[94,100932,100893],{},[463,100934,100935,100938],{},[509,100936,100937],{"align":23925},"游戏运行到当前帧的状态",[509,100939,100940],{"align":23925},[94,100941,100903],{},[463,100943,100944,100947],{},[509,100945,100946],{"align":23925},"前进一帧",[509,100948,100949],{"align":23925},[94,100950,100869],{},[14,100952,100954],{"id":100953},"_2环境与依赖安装","2.环境与依赖安装",[24,100956,100957],{},"Fedora 44 系统依赖:",[87,100959,100961],{"className":24011,"code":100960,"language":24013,"meta":92,"style":92},"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",[94,100962,100963,100975,100988,101001,101011,101021,101040],{"__ignoreMap":92},[97,100964,100965,100967,100969,100971,100973],{"class":99,"line":100},[97,100966,24766],{"class":111},[97,100968,26505],{"class":118},[97,100970,24023],{"class":118},[97,100972,26590],{"class":370},[97,100974,24868],{"class":370},[97,100976,100977,100980,100983,100986],{"class":99,"line":195},[97,100978,100979],{"class":118},"  python3",[97,100981,100982],{"class":118}," python3-pip",[97,100984,100985],{"class":118}," python3-virtualenv",[97,100987,24868],{"class":370},[97,100989,100990,100993,100996,100999],{"class":99,"line":241},[97,100991,100992],{"class":118},"  mesa-libGL",[97,100994,100995],{"class":118}," mesa-libGLU",[97,100997,100998],{"class":118}," mesa-dri-drivers",[97,101000,24868],{"class":370},[97,101002,101003,101006,101009],{"class":99,"line":1387},[97,101004,101005],{"class":118},"  libglvnd-glx",[97,101007,101008],{"class":118}," libglvnd-opengl",[97,101010,24868],{"class":370},[97,101012,101013,101016,101019],{"class":99,"line":1393},[97,101014,101015],{"class":118},"  glfw",[97,101017,101018],{"class":118}," glfw-devel",[97,101020,24868],{"class":370},[97,101022,101023,101026,101029,101032,101035,101038],{"class":99,"line":1407},[97,101024,101025],{"class":118},"  libX11",[97,101027,101028],{"class":118}," libXcursor",[97,101030,101031],{"class":118}," libXi",[97,101033,101034],{"class":118}," libXinerama",[97,101036,101037],{"class":118}," libXrandr",[97,101039,24868],{"class":370},[97,101041,101042,101045,101048],{"class":99,"line":1413},[97,101043,101044],{"class":118},"  gcc",[97,101046,101047],{"class":118}," gcc-c++",[97,101049,101050],{"class":118}," make\n",[24,101052,101053],{},"创建 Python 环境:",[87,101055,101057],{"className":24011,"code":101056,"language":24013,"meta":92,"style":92},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[94,101058,101059,101073,101081],{"__ignoreMap":92},[97,101060,101061,101064,101067,101070],{"class":99,"line":100},[97,101062,101063],{"class":111},"python3",[97,101065,101066],{"class":370}," -m",[97,101068,101069],{"class":118}," venv",[97,101071,101072],{"class":118}," .venv\n",[97,101074,101075,101078],{"class":99,"line":195},[97,101076,101077],{"class":370},"source",[97,101079,101080],{"class":118}," .venv\u002Fbin\u002Factivate\n",[97,101082,101083,101085,101087,101090,101092,101095],{"class":99,"line":241},[97,101084,30570],{"class":111},[97,101086,101066],{"class":370},[97,101088,101089],{"class":118}," pip",[97,101091,24023],{"class":118},[97,101093,101094],{"class":370}," --upgrade",[97,101096,101097],{"class":118}," pip\n",[24,101099,101100],{},"pip 安装:",[87,101102,101104],{"className":24011,"code":101103,"language":24013,"meta":92,"style":92},"pip install \"mujoco>=2.3\" numpy\n",[94,101105,101106],{"__ignoreMap":92},[97,101107,101108,101110,101112,101115],{"class":99,"line":100},[97,101109,24020],{"class":111},[97,101111,24023],{"class":118},[97,101113,101114],{"class":118}," \"mujoco>=2.3\"",[97,101116,101117],{"class":118}," numpy\n",[24,101119,101120],{},"安装完成后，先做最小检查：",[87,101122,101124],{"className":24011,"code":101123,"language":24013,"meta":92,"style":92},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[94,101125,101126],{"__ignoreMap":92},[97,101127,101128,101130,101132],{"class":99,"line":100},[97,101129,30570],{"class":111},[97,101131,30548],{"class":370},[97,101133,101134],{"class":118}," \"import mujoco; print(mujoco.__version__)\"\n",[24,101136,101137],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[24,101139,101140],{},"conda 安装:",[87,101142,101144],{"className":24011,"code":101143,"language":24013,"meta":92,"style":92},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[94,101145,101146,101166,101176],{"__ignoreMap":92},[97,101147,101148,101150,101152,101154,101157,101160,101163],{"class":99,"line":100},[97,101149,30520],{"class":111},[97,101151,29366],{"class":118},[97,101153,25305],{"class":370},[97,101155,101156],{"class":118}," mujoco-study",[97,101158,101159],{"class":118}," python=",[97,101161,101162],{"class":370},"3.10",[97,101164,101165],{"class":370}," -y\n",[97,101167,101168,101170,101173],{"class":99,"line":195},[97,101169,30520],{"class":111},[97,101171,101172],{"class":118}," activate",[97,101174,101175],{"class":118}," mujoco-study\n",[97,101177,101178,101180,101182,101184],{"class":99,"line":241},[97,101179,24020],{"class":111},[97,101181,24023],{"class":118},[97,101183,101114],{"class":118},[97,101185,101117],{"class":118},[24,101187,101188],{},"版本冲突说明:",[138,101190,101191,101197,101207,101216],{},[70,101192,101193,101194,28575],{},"不要安装 ",[94,101195,101196],{},"mujoco-py",[70,101198,101199,101200,101202,101203,101206],{},"如果旧项目里同时安装了 ",[94,101201,101196],{}," 和 ",[94,101204,101205],{},"mujoco","，建议新建干净虚拟环境。",[70,101208,101209,101212,101213,28575],{},[94,101210,101211],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[94,101214,101215],{},"~\u002F.mujoco\u002Fmujoco210",[70,101217,101218,101219,82723,101222,101225],{},"离屏渲染可能涉及 OpenGL 后端，",[94,101220,101221],{},"MUJOCO_GL=egl",[94,101223,101224],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101227,101229],{"id":101228},"_3核心概念解释","3.核心概念解释",[24,101231,101232],{},"MuJoCo 的基本执行流程:",[87,101234,101237],{"className":101235,"code":101236,"language":5378,"meta":92},[5376],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[94,101238,101236],{"__ignoreMap":92},[24,101240,101241,101243],{},[94,101242,100893],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[24,101245,101246,101248,101249,532,101252,532,101255,532,101258,532,101261,28575],{},[94,101247,100903],{}," 存放仿真运行时状态，例如 ",[94,101250,101251],{},"data.time",[94,101253,101254],{},"data.qpos",[94,101256,101257],{},"data.qvel",[94,101259,101260],{},"data.ctrl",[94,101262,101263],{},"data.xpos",[48,101265,101267],{"id":101266},"xml-是什么","XML 是什么",[24,101269,101270],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[87,101272,101274],{"className":53251,"code":101273,"language":53253,"meta":92,"style":92},"\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",[94,101275,101276,101298,101329],{"__ignoreMap":92},[97,101277,101278,101280,101282,101284,101286,101288,101291,101293,101296],{"class":99,"line":100},[97,101279,104],{"class":103},[97,101281,51984],{"class":107},[97,101283,112],{"class":111},[97,101285,115],{"class":103},[97,101287,53675],{"class":118},[97,101289,101290],{"class":111}," pos",[97,101292,115],{"class":103},[97,101294,101295],{"class":118},"\"0 0 1\"",[97,101297,130],{"class":103},[97,101299,101300,101302,101305,101307,101309,101312,101314,101316,101318,101321,101323,101326],{"class":99,"line":195},[97,101301,52328],{"class":103},[97,101303,101304],{"class":107},"geom",[97,101306,112],{"class":111},[97,101308,115],{"class":103},[97,101310,101311],{"class":118},"\"box_geom\"",[97,101313,54008],{"class":111},[97,101315,115],{"class":103},[97,101317,53675],{"class":118},[97,101319,101320],{"class":111}," size",[97,101322,115],{"class":103},[97,101324,101325],{"class":118},"\"0.1 0.1 0.1\"",[97,101327,101328],{"class":103},"\u002F>\n",[97,101330,101331,101333,101335],{"class":99,"line":241},[97,101332,51969],{"class":103},[97,101334,51984],{"class":107},[97,101336,130],{"class":103},[24,101338,101339],{},"这段意思是：",[138,101341,101342,101348,101355],{},[70,101343,101344,101345,101347],{},"创建一个叫 ",[94,101346,53898],{}," 的刚体。",[70,101349,101350,101351,101354],{},"它初始放在 ",[94,101352,101353],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[70,101356,101357],{},"它里面有一个盒子形状的几何体。",[48,101359,101361],{"id":101360},"timestep-是什么","timestep 是什么",[24,101363,101364],{},"XML 里的：",[87,101366,101368],{"className":53251,"code":101367,"language":53253,"meta":92,"style":92},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[94,101369,101370],{"__ignoreMap":92},[97,101371,101372,101374,101376,101379,101381,101384,101387,101389,101392],{"class":99,"line":100},[97,101373,104],{"class":103},[97,101375,69350],{"class":107},[97,101377,101378],{"class":111}," timestep",[97,101380,115],{"class":103},[97,101382,101383],{"class":118},"\"0.01\"",[97,101385,101386],{"class":111}," gravity",[97,101388,115],{"class":103},[97,101390,101391],{"class":118},"\"0 0 -9.81\"",[97,101393,101328],{"class":103},[24,101395,101396,101397,101400,101401,101403],{},"表示每调用一次 ",[94,101398,101399],{},"mj_step","，仿真时间前进 ",[94,101402,39176],{}," 秒。循环 100 次，大约就是 1 秒：",[87,101405,101408],{"className":101406,"code":101407,"language":5378,"meta":92},[5376],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[94,101409,101407],{"__ignoreMap":92},[48,101411,101413],{"id":101412},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[24,101415,101416],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[87,101418,101421],{"className":101419,"code":101420,"language":5378,"meta":92},[5376],"x y z qw qx qy qz\n",[94,101422,101420],{"__ignoreMap":92},[24,101424,101425,101426,101429,101430,101433],{},"表示一个自由刚体的位置和姿态。其中 ",[94,101427,101428],{},"x y z"," 是位置，",[94,101431,101432],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101435,101437],{"id":101436},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[24,101439,101440],{},"新建文件:",[87,101442,101444],{"className":24011,"code":101443,"language":24013,"meta":92,"style":92},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[94,101445,101446,101456,101463],{"__ignoreMap":92},[97,101447,101448,101451,101453],{"class":99,"line":100},[97,101449,101450],{"class":111},"mkdir",[97,101452,29406],{"class":370},[97,101454,101455],{"class":118}," mujoco_tutorial\n",[97,101457,101458,101461],{"class":99,"line":195},[97,101459,101460],{"class":370},"cd",[97,101462,101455],{"class":118},[97,101464,101465,101468],{"class":99,"line":241},[97,101466,101467],{"class":111},"touch",[97,101469,101470],{"class":118}," ch1_first_sim.py\n",[24,101472,101473],{},"写入:",[87,101475,101477],{"className":30568,"code":101476,"language":30570,"meta":92,"style":92},"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",[94,101478,101479,101486,101490,101494,101504,101509,101514,101518,101523,101528,101532,101537,101542,101547,101552,101557,101562,101566,101570,101574,101587,101601,101611,101615,101627,101639,101651,101663,101675,101679,101696,101701,101705,101716,101727,101731,101735,101749],{"__ignoreMap":92},[97,101480,101481,101483],{"class":99,"line":100},[97,101482,30582],{"class":319},[97,101484,101485],{"class":103}," mujoco\n",[97,101487,101488],{"class":99,"line":195},[97,101489,2591],{"emptyLinePlaceholder":249},[97,101491,101492],{"class":99,"line":241},[97,101493,2591],{"emptyLinePlaceholder":249},[97,101495,101496,101499,101501],{"class":99,"line":1387},[97,101497,101498],{"class":370},"XML",[97,101500,13755],{"class":319},[97,101502,101503],{"class":118}," \"\"\"\n",[97,101505,101506],{"class":99,"line":1393},[97,101507,101508],{"class":118},"\u003Cmujoco model=\"first_sim\">\n",[97,101510,101511],{"class":99,"line":1407},[97,101512,101513],{"class":118},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[97,101515,101516],{"class":99,"line":1413},[97,101517,2591],{"emptyLinePlaceholder":249},[97,101519,101520],{"class":99,"line":1504},[97,101521,101522],{"class":118},"  \u003Cworldbody>\n",[97,101524,101525],{"class":99,"line":1510},[97,101526,101527],{"class":118},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[97,101529,101530],{"class":99,"line":1522},[97,101531,2591],{"emptyLinePlaceholder":249},[97,101533,101534],{"class":99,"line":1804},[97,101535,101536],{"class":118},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[97,101538,101539],{"class":99,"line":1809},[97,101540,101541],{"class":118},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[97,101543,101544],{"class":99,"line":1815},[97,101545,101546],{"class":118},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[97,101548,101549],{"class":99,"line":1820},[97,101550,101551],{"class":118},"    \u003C\u002Fbody>\n",[97,101553,101554],{"class":99,"line":1834},[97,101555,101556],{"class":118},"  \u003C\u002Fworldbody>\n",[97,101558,101559],{"class":99,"line":1839},[97,101560,101561],{"class":118},"\u003C\u002Fmujoco>\n",[97,101563,101564],{"class":99,"line":1845},[97,101565,95882],{"class":118},[97,101567,101568],{"class":99,"line":1866},[97,101569,2591],{"emptyLinePlaceholder":249},[97,101571,101572],{"class":99,"line":1871},[97,101573,2591],{"emptyLinePlaceholder":249},[97,101575,101576,101578,101580,101583,101585],{"class":99,"line":1885},[97,101577,32137],{"class":319},[97,101579,2164],{"class":111},[97,101581,101582],{"class":103},"() -> ",[97,101584,95870],{"class":370},[97,101586,3930],{"class":103},[97,101588,101589,101592,101594,101597,101599],{"class":99,"line":1890},[97,101590,101591],{"class":103},"    model ",[97,101593,115],{"class":319},[97,101595,101596],{"class":103}," mujoco.MjModel.from_xml_string(",[97,101598,101498],{"class":370},[97,101600,329],{"class":103},[97,101602,101603,101606,101608],{"class":99,"line":1919},[97,101604,101605],{"class":103},"    data ",[97,101607,115],{"class":319},[97,101609,101610],{"class":103}," mujoco.MjData(model)\n",[97,101612,101613],{"class":99,"line":1924},[97,101614,2591],{"emptyLinePlaceholder":249},[97,101616,101617,101619,101621,101624],{"class":99,"line":1941},[97,101618,31489],{"class":370},[97,101620,323],{"class":103},[97,101622,101623],{"class":118},"\"nq:\"",[97,101625,101626],{"class":103},", model.nq)\n",[97,101628,101629,101631,101633,101636],{"class":99,"line":1946},[97,101630,31489],{"class":370},[97,101632,323],{"class":103},[97,101634,101635],{"class":118},"\"nv:\"",[97,101637,101638],{"class":103},", model.nv)\n",[97,101640,101641,101643,101645,101648],{"class":99,"line":1951},[97,101642,31489],{"class":370},[97,101644,323],{"class":103},[97,101646,101647],{"class":118},"\"nu:\"",[97,101649,101650],{"class":103},", model.nu)\n",[97,101652,101653,101655,101657,101660],{"class":99,"line":1956},[97,101654,31489],{"class":370},[97,101656,323],{"class":103},[97,101658,101659],{"class":118},"\"initial time:\"",[97,101661,101662],{"class":103},", data.time)\n",[97,101664,101665,101667,101669,101672],{"class":99,"line":1970},[97,101666,31489],{"class":370},[97,101668,323],{"class":103},[97,101670,101671],{"class":118},"\"initial qpos:\"",[97,101673,101674],{"class":103},", data.qpos.copy())\n",[97,101676,101677],{"class":99,"line":1975},[97,101678,2591],{"emptyLinePlaceholder":249},[97,101680,101681,101683,101686,101688,101690,101692,101694],{"class":99,"line":2768},[97,101682,3392],{"class":319},[97,101684,101685],{"class":103}," _ ",[97,101687,26233],{"class":319},[97,101689,32633],{"class":370},[97,101691,323],{"class":103},[97,101693,631],{"class":370},[97,101695,30976],{"class":103},[97,101697,101698],{"class":99,"line":2782},[97,101699,101700],{"class":103},"        mujoco.mj_step(model, data)\n",[97,101702,101703],{"class":99,"line":2790},[97,101704,2591],{"emptyLinePlaceholder":249},[97,101706,101707,101709,101711,101714],{"class":99,"line":2795},[97,101708,31489],{"class":370},[97,101710,323],{"class":103},[97,101712,101713],{"class":118},"\"final time:\"",[97,101715,101662],{"class":103},[97,101717,101718,101720,101722,101725],{"class":99,"line":2801},[97,101719,31489],{"class":370},[97,101721,323],{"class":103},[97,101723,101724],{"class":118},"\"final qpos:\"",[97,101726,101674],{"class":103},[97,101728,101729],{"class":99,"line":2807},[97,101730,2591],{"emptyLinePlaceholder":249},[97,101732,101733],{"class":99,"line":2812},[97,101734,2591],{"emptyLinePlaceholder":249},[97,101736,101737,101739,101741,101744,101747],{"class":99,"line":8139},[97,101738,1723],{"class":319},[97,101740,31410],{"class":370},[97,101742,101743],{"class":319}," ==",[97,101745,101746],{"class":118}," \"__main__\"",[97,101748,3930],{"class":103},[97,101750,101751],{"class":99,"line":8163},[97,101752,101753],{"class":103},"    main()\n",[48,101755,101756],{"id":101756},"代码逐段解释",[24,101758,101759],{},"导入库：",[87,101761,101763],{"className":30568,"code":101762,"language":30570,"meta":92,"style":92},"import mujoco\n",[94,101764,101765],{"__ignoreMap":92},[97,101766,101767,101769],{"class":99,"line":100},[97,101768,30582],{"class":319},[97,101770,101485],{"class":103},[24,101772,101773],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[24,101775,101776],{},"定义 XML：",[87,101778,101780],{"className":30568,"code":101779,"language":30570,"meta":92,"style":92},"XML = \"\"\"\n...\n\"\"\"\n",[94,101781,101782,101790,101795],{"__ignoreMap":92},[97,101783,101784,101786,101788],{"class":99,"line":100},[97,101785,101498],{"class":370},[97,101787,13755],{"class":319},[97,101789,101503],{"class":118},[97,101791,101792],{"class":99,"line":195},[97,101793,101794],{"class":118},"...\n",[97,101796,101797],{"class":99,"line":241},[97,101798,95882],{"class":118},[24,101800,101801,101802,101805],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[94,101803,101804],{},"freejoint"," 的方块。",[24,101807,101808],{},"编译模型：",[87,101810,101812],{"className":30568,"code":101811,"language":30570,"meta":92,"style":92},"model = mujoco.MjModel.from_xml_string(XML)\n",[94,101813,101814],{"__ignoreMap":92},[97,101815,101816,101819,101821,101823,101825],{"class":99,"line":100},[97,101817,101818],{"class":103},"model ",[97,101820,115],{"class":319},[97,101822,101596],{"class":103},[97,101824,101498],{"class":370},[97,101826,329],{"class":103},[24,101828,101829],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[24,101831,101832],{},"创建数据：",[87,101834,101836],{"className":30568,"code":101835,"language":30570,"meta":92,"style":92},"data = mujoco.MjData(model)\n",[94,101837,101838],{"__ignoreMap":92},[97,101839,101840,101843,101845],{"class":99,"line":100},[97,101841,101842],{"class":103},"data ",[97,101844,115],{"class":319},[97,101846,101610],{"class":103},[24,101848,101849,101851,101852,101854],{},[94,101850,33591],{}," 会保存仿真当前状态。刚创建时，时间是 ",[94,101853,511],{},"，方块还在初始位置。",[24,101856,101857],{},"推进仿真：",[87,101859,101861],{"className":30568,"code":101860,"language":30570,"meta":92,"style":92},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[94,101862,101863,101879],{"__ignoreMap":92},[97,101864,101865,101867,101869,101871,101873,101875,101877],{"class":99,"line":100},[97,101866,3216],{"class":319},[97,101868,101685],{"class":103},[97,101870,26233],{"class":319},[97,101872,32633],{"class":370},[97,101874,323],{"class":103},[97,101876,631],{"class":370},[97,101878,30976],{"class":103},[97,101880,101881],{"class":99,"line":195},[97,101882,101883],{"class":103},"    mujoco.mj_step(model, data)\n",[24,101885,101886,101887,101889],{},"每次 ",[94,101888,101399],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[48,101891,101892],{"id":101892},"代码逐行细讲",[24,101894,101895],{},"下面把完整代码按新手视角拆开讲。",[87,101897,101898],{"className":30568,"code":101762,"language":30570,"meta":92,"style":92},[94,101899,101900],{"__ignoreMap":92},[97,101901,101902,101904],{"class":99,"line":100},[97,101903,30582],{"class":319},[97,101905,101485],{"class":103},[24,101907,101908,101910,101911,532,101913,532,101915,28575],{},[94,101909,30582],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[94,101912,100859],{},[94,101914,100864],{},[94,101916,101917],{},"mujoco.mj_step",[87,101919,101920],{"className":30568,"code":101779,"language":30570,"meta":92,"style":92},[94,101921,101922,101930,101934],{"__ignoreMap":92},[97,101923,101924,101926,101928],{"class":99,"line":100},[97,101925,101498],{"class":370},[97,101927,13755],{"class":319},[97,101929,101503],{"class":118},[97,101931,101932],{"class":99,"line":195},[97,101933,101794],{"class":118},[97,101935,101936],{"class":99,"line":241},[97,101937,95882],{"class":118},[24,101939,101940,101942,101943,101946],{},[94,101941,101498],{}," 是一个变量名。右边的三引号 ",[94,101944,101945],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[87,101948,101949],{"className":53251,"code":101508,"language":53253,"meta":92,"style":92},[94,101950,101951],{"__ignoreMap":92},[97,101952,101953,101955,101957,101960,101962,101965],{"class":99,"line":100},[97,101954,104],{"class":103},[97,101956,101205],{"class":107},[97,101958,101959],{"class":111}," model",[97,101961,115],{"class":103},[97,101963,101964],{"class":118},"\"first_sim\"",[97,101966,130],{"class":103},[24,101968,101969,101970,101973,101974,28575],{},"这是 XML 的根标签。",[94,101971,101972],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[94,101975,101976],{},"first_sim",[87,101978,101979],{"className":53251,"code":101367,"language":53253,"meta":92,"style":92},[94,101980,101981],{"__ignoreMap":92},[97,101982,101983,101985,101987,101989,101991,101993,101995,101997,101999],{"class":99,"line":100},[97,101984,104],{"class":103},[97,101986,69350],{"class":107},[97,101988,101378],{"class":111},[97,101990,115],{"class":103},[97,101992,101383],{"class":118},[97,101994,101386],{"class":111},[97,101996,115],{"class":103},[97,101998,101391],{"class":118},[97,102000,101328],{"class":103},[24,102002,102003,102005,102006,102009,102010,102013],{},[94,102004,69350],{}," 用来设置仿真参数。",[94,102007,102008],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[94,102011,102012],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[87,102015,102017],{"className":53251,"code":102016,"language":53253,"meta":92,"style":92},"\u003Cworldbody>\n",[94,102018,102019],{"__ignoreMap":92},[97,102020,102021,102023,102026],{"class":99,"line":100},[97,102022,104],{"class":103},[97,102024,102025],{"class":107},"worldbody",[97,102027,130],{"class":103},[24,102029,102030,102032],{},[94,102031,102025],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[87,102034,102036],{"className":53251,"code":102035,"language":53253,"meta":92,"style":92},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[94,102037,102038],{"__ignoreMap":92},[97,102039,102040,102042,102044,102046,102048,102051,102053,102055,102058,102060,102062,102065,102067,102069,102072],{"class":99,"line":100},[97,102041,104],{"class":103},[97,102043,101304],{"class":107},[97,102045,112],{"class":111},[97,102047,115],{"class":103},[97,102049,102050],{"class":118},"\"floor\"",[97,102052,54008],{"class":111},[97,102054,115],{"class":103},[97,102056,102057],{"class":118},"\"plane\"",[97,102059,101320],{"class":111},[97,102061,115],{"class":103},[97,102063,102064],{"class":118},"\"2 2 0.1\"",[97,102066,78951],{"class":111},[97,102068,115],{"class":103},[97,102070,102071],{"class":118},"\"0.8 0.8 0.8 1\"",[97,102073,101328],{"class":103},[24,102075,102076,102077,102079,102080,102083,102084,102087,102088,102090],{},"这行创建地面。",[94,102078,101304],{}," 是几何体。",[94,102081,102082],{},"name=\"floor\""," 是名字。",[94,102085,102086],{},"type=\"plane\""," 表示平面。",[94,102089,55294],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[87,102092,102094],{"className":53251,"code":102093,"language":53253,"meta":92,"style":92},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[94,102095,102096],{"__ignoreMap":92},[97,102097,102098,102100,102102,102104,102106,102108,102110,102112,102114],{"class":99,"line":100},[97,102099,104],{"class":103},[97,102101,51984],{"class":107},[97,102103,112],{"class":111},[97,102105,115],{"class":103},[97,102107,53675],{"class":118},[97,102109,101290],{"class":111},[97,102111,115],{"class":103},[97,102113,101295],{"class":118},[97,102115,130],{"class":103},[24,102117,102118,102119,28575,102121,102124,102125,102127],{},"这行创建一个刚体，名字叫 ",[94,102120,53898],{},[94,102122,102123],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[94,102126,101353],{},"，也就是离地面 1 米高。",[87,102129,102131],{"className":53251,"code":102130,"language":53253,"meta":92,"style":92},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[94,102132,102133],{"__ignoreMap":92},[97,102134,102135,102137,102139,102141,102143,102146],{"class":99,"line":100},[97,102136,104],{"class":103},[97,102138,101804],{"class":107},[97,102140,112],{"class":111},[97,102142,115],{"class":103},[97,102144,102145],{"class":118},"\"box_free\"",[97,102147,101328],{"class":103},[24,102149,102150,102151,102153],{},"这行很重要。",[94,102152,101804],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[87,102155,102157],{"className":53251,"code":102156,"language":53253,"meta":92,"style":92},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[94,102158,102159],{"__ignoreMap":92},[97,102160,102161,102163,102165,102167,102169,102171,102173,102175,102177,102179,102181,102183,102186,102188,102190,102192,102194,102197],{"class":99,"line":100},[97,102162,104],{"class":103},[97,102164,101304],{"class":107},[97,102166,112],{"class":111},[97,102168,115],{"class":103},[97,102170,101311],{"class":118},[97,102172,54008],{"class":111},[97,102174,115],{"class":103},[97,102176,53675],{"class":118},[97,102178,101320],{"class":111},[97,102180,115],{"class":103},[97,102182,101325],{"class":118},[97,102184,102185],{"class":111}," mass",[97,102187,115],{"class":103},[97,102189,3869],{"class":118},[97,102191,78951],{"class":111},[97,102193,115],{"class":103},[97,102195,102196],{"class":118},"\"1 0 0 1\"",[97,102198,101328],{"class":103},[24,102200,102201,102202,102205,102206,102209,102210,102213,102214,102217],{},"这行给 box body 添加一个盒子形状。",[94,102203,102204],{},"type=\"box\""," 表示形状是盒子。",[94,102207,102208],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[94,102211,102212],{},"mass=\"1\""," 表示质量是 1。",[94,102215,102216],{},"rgba=\"1 0 0 1\""," 表示红色。",[87,102219,102221],{"className":30568,"code":102220,"language":30570,"meta":92,"style":92},"def main() -> None:\n",[94,102222,102223],{"__ignoreMap":92},[97,102224,102225,102227,102229,102231,102233],{"class":99,"line":100},[97,102226,32137],{"class":319},[97,102228,2164],{"class":111},[97,102230,101582],{"class":103},[97,102232,95870],{"class":370},[97,102234,3930],{"class":103},[24,102236,102237,102239,102240,102243,102244,102247],{},[94,102238,32137],{}," 用来定义函数。这里定义了一个叫 ",[94,102241,102242],{},"main"," 的函数。",[94,102245,102246],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[87,102249,102250],{"className":30568,"code":101811,"language":30570,"meta":92,"style":92},[94,102251,102252],{"__ignoreMap":92},[97,102253,102254,102256,102258,102260,102262],{"class":99,"line":100},[97,102255,101818],{"class":103},[97,102257,115],{"class":319},[97,102259,101596],{"class":103},[97,102261,101498],{"class":370},[97,102263,329],{"class":103},[24,102265,102266,102267,102270],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[94,102268,102269],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[87,102272,102273],{"className":30568,"code":101835,"language":30570,"meta":92,"style":92},[94,102274,102275],{"__ignoreMap":92},[97,102276,102277,102279,102281],{"class":99,"line":100},[97,102278,101842],{"class":103},[97,102280,115],{"class":319},[97,102282,101610],{"class":103},[24,102284,102285,102286,102288,102289,102291],{},"这行创建仿真数据。",[94,102287,33591],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[94,102290,33591],{}," 都会变化。",[87,102293,102295],{"className":30568,"code":102294,"language":30570,"meta":92,"style":92},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[94,102296,102297,102307,102317],{"__ignoreMap":92},[97,102298,102299,102301,102303,102305],{"class":99,"line":100},[97,102300,30605],{"class":370},[97,102302,323],{"class":103},[97,102304,101623],{"class":118},[97,102306,101626],{"class":103},[97,102308,102309,102311,102313,102315],{"class":99,"line":195},[97,102310,30605],{"class":370},[97,102312,323],{"class":103},[97,102314,101635],{"class":118},[97,102316,101638],{"class":103},[97,102318,102319,102321,102323,102325],{"class":99,"line":241},[97,102320,30605],{"class":370},[97,102322,323],{"class":103},[97,102324,101647],{"class":118},[97,102326,101650],{"class":103},[24,102328,102329,102331,102332,102335,102336,102339,102340,102343,102344,102347],{},[94,102330,30605],{}," 用来输出信息。",[94,102333,102334],{},"model.nq"," 是位置变量数量，",[94,102337,102338],{},"model.nv"," 是速度变量数量，",[94,102341,102342],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[94,102345,102346],{},"nu"," 是 0。",[87,102349,102351],{"className":30568,"code":102350,"language":30570,"meta":92,"style":92},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[94,102352,102353,102363],{"__ignoreMap":92},[97,102354,102355,102357,102359,102361],{"class":99,"line":100},[97,102356,30605],{"class":370},[97,102358,323],{"class":103},[97,102360,101659],{"class":118},[97,102362,101662],{"class":103},[97,102364,102365,102367,102369,102371],{"class":99,"line":195},[97,102366,30605],{"class":370},[97,102368,323],{"class":103},[97,102370,101671],{"class":118},[97,102372,101674],{"class":103},[24,102374,102375,102376,102378,102379,102381,102382,102385],{},"这里打印初始时间和初始位置。",[94,102377,101251],{}," 一开始是 0。",[94,102380,101254],{}," 是位置数组。",[94,102383,102384],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[87,102387,102388],{"className":30568,"code":101860,"language":30570,"meta":92,"style":92},[94,102389,102390,102406],{"__ignoreMap":92},[97,102391,102392,102394,102396,102398,102400,102402,102404],{"class":99,"line":100},[97,102393,3216],{"class":319},[97,102395,101685],{"class":103},[97,102397,26233],{"class":319},[97,102399,32633],{"class":370},[97,102401,323],{"class":103},[97,102403,631],{"class":370},[97,102405,30976],{"class":103},[97,102407,102408],{"class":99,"line":195},[97,102409,101883],{"class":103},[24,102411,102412,102414,102415,102418,102419,102421,102422,102424],{},[94,102413,3216],{}," 是循环。",[94,102416,102417],{},"range(100)"," 表示循环 100 次。",[94,102420,1311],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[94,102423,101399],{},"，仿真就前进一步。",[87,102426,102428],{"className":30568,"code":102427,"language":30570,"meta":92,"style":92},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[94,102429,102430,102440],{"__ignoreMap":92},[97,102431,102432,102434,102436,102438],{"class":99,"line":100},[97,102433,30605],{"class":370},[97,102435,323],{"class":103},[97,102437,101713],{"class":118},[97,102439,101662],{"class":103},[97,102441,102442,102444,102446,102448],{"class":99,"line":195},[97,102443,30605],{"class":370},[97,102445,323],{"class":103},[97,102447,101724],{"class":118},[97,102449,101674],{"class":103},[24,102451,102452],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[87,102454,102456],{"className":30568,"code":102455,"language":30570,"meta":92,"style":92},"if __name__ == \"__main__\":\n    main()\n",[94,102457,102458,102470],{"__ignoreMap":92},[97,102459,102460,102462,102464,102466,102468],{"class":99,"line":100},[97,102461,1723],{"class":319},[97,102463,31410],{"class":370},[97,102465,101743],{"class":319},[97,102467,101746],{"class":118},[97,102469,3930],{"class":103},[97,102471,102472],{"class":99,"line":195},[97,102473,101753],{"class":103},[24,102475,102476,102477,102480,102481,28575],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[94,102478,102479],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[94,102482,102479],{},[24,102484,102485],{},"运行:",[87,102487,102489],{"className":24011,"code":102488,"language":24013,"meta":92,"style":92},"python ch1_first_sim.py\n",[94,102490,102491],{"__ignoreMap":92},[97,102492,102493,102495],{"class":99,"line":100},[97,102494,30570],{"class":111},[97,102496,101470],{"class":118},[14,102498,102500],{"id":102499},"_5运行结果说明","5.运行结果说明",[24,102502,102503],{},"你应该看到类似输出:",[87,102505,102508],{"className":102506,"code":102507,"language":5378,"meta":92},[5376],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[94,102509,102507],{"__ignoreMap":92},[24,102511,102512,102514,102515,102518,102519,28575],{},[94,102513,101804],{}," 有 7 个位置变量: ",[94,102516,102517],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[94,102520,102521],{},"vx vy vz wx wy wz",[24,102523,102524,102525,102528],{},"你还会看到 ",[94,102526,102527],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102530,102532],{"id":102531},"_6验证步骤","6.验证步骤",[24,102534,102535],{},"确认版本:",[87,102537,102538],{"className":24011,"code":101123,"language":24013,"meta":92,"style":92},[94,102539,102540],{"__ignoreMap":92},[97,102541,102542,102544,102546],{"class":99,"line":100},[97,102543,30570],{"class":111},[97,102545,30548],{"class":370},[97,102547,101134],{"class":118},[24,102549,102550],{},"确认导入的是官方 bindings:",[87,102552,102554],{"className":24011,"code":102553,"language":24013,"meta":92,"style":92},"python -c \"import mujoco; print(mujoco)\"\n",[94,102555,102556],{"__ignoreMap":92},[97,102557,102558,102560,102562],{"class":99,"line":100},[97,102559,30570],{"class":111},[97,102561,30548],{"class":370},[97,102563,102564],{"class":118}," \"import mujoco; print(mujoco)\"\n",[24,102566,102567],{},"运行程序:",[87,102569,102570],{"className":24011,"code":102488,"language":24013,"meta":92,"style":92},[94,102571,102572],{"__ignoreMap":92},[97,102573,102574,102576],{"class":99,"line":100},[97,102575,30570],{"class":111},[97,102577,101470],{"class":118},[24,102579,102580,102581,102584,102585,28575],{},"检查 ",[94,102582,102583],{},"final time"," 是否约等于 ",[94,102586,102587],{},"1.0",[24,102589,102590],{},"再做几个小实验：",[138,102592,102593,102603,102611,102624],{},[70,102594,102595,102596,102598,102599,102602],{},"把 ",[94,102597,102123],{}," 改成 ",[94,102600,102601],{},"pos=\"0 0 2\"","，观察初始高度变化。",[70,102604,102595,102605,102598,102607,102610],{},[94,102606,102012],{},[94,102608,102609],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[70,102612,102595,102613,102598,102615,102618,102619,102621,102622,28575],{},[94,102614,102008],{},[94,102616,102617],{},"timestep=\"0.005\"","，观察 100 步后的 ",[94,102620,102583],{}," 是否变成约 ",[94,102623,35519],{},[70,102625,102626,102627,102630],{},"删除 ",[94,102628,102629],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[24,102632,102633],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102635,102637],{"id":102636},"_7常见错误与解决方案","7.常见错误与解决方案",[48,102639,102641],{"id":102640},"modulenotfounderror-no-module-named-mujoco",[94,102642,102643],{},"ModuleNotFoundError: No module named 'mujoco'",[24,102645,102646],{},"解决:",[87,102648,102650],{"className":24011,"code":102649,"language":24013,"meta":92,"style":92},"pip install \"mujoco>=2.3\"\n",[94,102651,102652],{"__ignoreMap":92},[97,102653,102654,102656,102658],{"class":99,"line":100},[97,102655,24020],{"class":111},[97,102657,24023],{"class":118},[97,102659,102660],{"class":118}," \"mujoco>=2.3\"\n",[48,102662,102664],{"id":102663},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[24,102666,102667],{},"先安装系统依赖:",[87,102669,102671],{"className":24011,"code":102670,"language":24013,"meta":92,"style":92},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[94,102672,102673],{"__ignoreMap":92},[97,102674,102675,102677,102679,102681,102683,102686,102688,102691,102693,102696,102698],{"class":99,"line":100},[97,102676,24766],{"class":111},[97,102678,26505],{"class":118},[97,102680,24023],{"class":118},[97,102682,26590],{"class":370},[97,102684,102685],{"class":118}," mesa-libGL",[97,102687,100998],{"class":118},[97,102689,102690],{"class":118}," glfw",[97,102692,101018],{"class":118},[97,102694,102695],{"class":118}," libX11",[97,102697,101031],{"class":118},[97,102699,102700],{"class":118}," libXrandr\n",[48,102702,102704],{"id":102703},"xml-解析失败","XML 解析失败",[24,102706,102707],{},"检查:",[138,102709,102710,102713,102716,102722],{},[70,102711,102712],{},"标签是否闭合",[70,102714,102715],{},"属性是否带引号",[70,102717,102718,102719],{},"根节点是否是 ",[94,102720,102721],{},"\u003Cmujoco>",[70,102723,102724,102726,102727,102730],{},[94,102725,51984],{}," 是否放在 ",[94,102728,102729],{},"\u003Cworldbody>"," 内部",[48,102732,102734,102736,102737],{"id":102733},"final-time-不是严格等于-10",[94,102735,102583],{}," 不是严格等于 ",[94,102738,102587],{},[24,102740,102741],{},"这通常不是错误。浮点数计算可能得到：",[87,102743,102746],{"className":102744,"code":102745,"language":5378,"meta":92},[5376],"1.0000000000000007\n",[94,102747,102745],{"__ignoreMap":92},[24,102749,102750,102751,102753],{},"只要接近 ",[94,102752,102587],{}," 就正常。",[48,102755,102756],{"id":102756},"方块没有掉下来",[24,102758,102759],{},"检查：",[138,102761,102762,102768,102774,102779],{},[70,102763,102764,102765],{},"方块 body 里是否有 ",[94,102766,102767],{},"\u003Cfreejoint\u002F>",[70,102769,102770,102771],{},"重力是否是 ",[94,102772,102773],{},"0 0 -9.81",[70,102775,102776,102777],{},"是否真的调用了 ",[94,102778,100869],{},[70,102780,102781,102782,102784,102785],{},"你看的是否是 ",[94,102783,102527],{},"，不是 ",[94,102786,102787],{},"initial qpos",[14,102789,102791],{"id":102790},"_8本章小结","8.本章小结",[24,102793,102794],{},"本章你已经完成了 MuJoCo 的最小闭环：",[87,102796,102799],{"className":102797,"code":102798,"language":5378,"meta":92},[5376],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[94,102800,102798],{"__ignoreMap":92},[24,102802,102803],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[231,102805,102806],{},"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":92,"searchDepth":195,"depth":195,"links":102808},[102809,102810,102811,102816,102820,102821,102822,102830],{"id":100830,"depth":195,"text":100831},{"id":100953,"depth":195,"text":100954},{"id":101228,"depth":195,"text":101229,"children":102812},[102813,102814,102815],{"id":101266,"depth":241,"text":101267},{"id":101360,"depth":241,"text":101361},{"id":101412,"depth":241,"text":101413},{"id":101436,"depth":195,"text":101437,"children":102817},[102818,102819],{"id":101756,"depth":241,"text":101756},{"id":101892,"depth":241,"text":101892},{"id":102499,"depth":195,"text":102500},{"id":102531,"depth":195,"text":102532},{"id":102636,"depth":195,"text":102637,"children":102823},[102824,102825,102826,102827,102829],{"id":102640,"depth":241,"text":102643},{"id":102663,"depth":241,"text":102664},{"id":102703,"depth":241,"text":102704},{"id":102733,"depth":241,"text":102828},"final time 不是严格等于 1.0",{"id":102756,"depth":241,"text":102756},{"id":102790,"depth":195,"text":102791},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100822,"description":92},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102837,"title":102838,"body":102839,"description":92,"extension":247,"meta":104495,"navigation":249,"path":104496,"seo":104497,"stem":104498,"__hash__":104499},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102840,"toc":104471},[102841,102844,102846,102849,102852,102869,102964,102967,102973,102975,102977,103001,103004,103018,103021,103062,103064,103077,103079,103082,103130,103142,103145,103148,103154,103167,103234,103237,103256,103259,103262,103268,103270,103279,103282,103286,103295,103377,103386,103390,103396,103410,103420,103422,103752,103755,103767,103769,103780,103782,103785,103803,103806,103809,103827,103838,103841,103856,103866,103868,103889,103906,103926,103932,103972,103988,104004,104010,104013,104037,104053,104058,104088,104105,104130,104133,104148,104157,104172,104181,104196,104203,104205,104215,104228,104235,104238,104277,104284,104286,104338,104340,104346,104349,104356,104363,104366,104368,104386,104389,104392,104426,104438,104440,104443,104465,104468],[10,102842,102838],{"id":102843},"_2xml-与-mjcf-物理建模基础",[14,102845,100831],{"id":100830},[24,102847,102848],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[24,102850,102851],{},"本章结束后，你应该能看懂一个简单模型里：",[138,102853,102854,102857,102860,102863,102866],{},[70,102855,102856],{},"地面在哪里。",[70,102858,102859],{},"物体初始位置在哪里。",[70,102861,102862],{},"几何体是什么形状。",[70,102864,102865],{},"哪些 body 可以自由运动。",[70,102867,102868],{},"如何用名字在 Python 里找到 XML 中的对象。",[457,102870,102871,102881],{},[460,102872,102873],{},[463,102874,102875,102878],{},[466,102876,102877],{"align":23925},"标签",[466,102879,102880],{"align":23925},"作用",[504,102882,102883,102892,102902,102911,102921,102931,102944,102954],{},[463,102884,102885,102889],{},[509,102886,102887],{"align":23925},[94,102888,102721],{},[509,102890,102891],{"align":23925},"根节点",[463,102893,102894,102899],{},[509,102895,102896],{"align":23925},[94,102897,102898],{},"\u003Coption>",[509,102900,102901],{"align":23925},"仿真参数",[463,102903,102904,102908],{},[509,102905,102906],{"align":23925},[94,102907,102729],{},[509,102909,102910],{"align":23925},"世界中的物体",[463,102912,102913,102918],{},[509,102914,102915],{"align":23925},[94,102916,102917],{},"\u003Cbody>",[509,102919,102920],{"align":23925},"刚体",[463,102922,102923,102928],{},[509,102924,102925],{"align":23925},[94,102926,102927],{},"\u003Cgeom>",[509,102929,102930],{"align":23925},"几何体、碰撞体、可视体",[463,102932,102933,102941],{},[509,102934,102935,25168,102938],{"align":23925},[94,102936,102937],{},"\u003Cjoint>",[94,102939,102940],{},"\u003Cfreejoint>",[509,102942,102943],{"align":23925},"关节",[463,102945,102946,102951],{},[509,102947,102948],{"align":23925},[94,102949,102950],{},"\u003Csite>",[509,102952,102953],{"align":23925},"标记点",[463,102955,102956,102961],{},[509,102957,102958],{"align":23925},[94,102959,102960],{},"\u003Cactuator>",[509,102962,102963],{"align":23925},"控制器",[24,102965,102966],{},"初学时可以先记住：",[87,102968,102971],{"className":102969,"code":102970,"language":5378,"meta":92},[5376],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[94,102972,102970],{"__ignoreMap":92},[14,102974,100954],{"id":100953},[24,102976,100957],{},[87,102978,102980],{"className":24011,"code":102979,"language":24013,"meta":92,"style":92},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[94,102981,102982],{"__ignoreMap":92},[97,102983,102984,102986,102988,102990,102992,102994,102996,102998],{"class":99,"line":100},[97,102985,24766],{"class":111},[97,102987,26505],{"class":118},[97,102989,24023],{"class":118},[97,102991,26590],{"class":370},[97,102993,102685],{"class":118},[97,102995,100998],{"class":118},[97,102997,102690],{"class":118},[97,102999,103000],{"class":118}," glfw-devel\n",[24,103002,103003],{},"pip:",[87,103005,103006],{"className":24011,"code":101103,"language":24013,"meta":92,"style":92},[94,103007,103008],{"__ignoreMap":92},[97,103009,103010,103012,103014,103016],{"class":99,"line":100},[97,103011,24020],{"class":111},[97,103013,24023],{"class":118},[97,103015,101114],{"class":118},[97,103017,101117],{"class":118},[24,103019,103020],{},"conda:",[87,103022,103024],{"className":24011,"code":103023,"language":24013,"meta":92,"style":92},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[94,103025,103026,103043,103052],{"__ignoreMap":92},[97,103027,103028,103030,103032,103034,103037,103039,103041],{"class":99,"line":100},[97,103029,30520],{"class":111},[97,103031,29366],{"class":118},[97,103033,25305],{"class":370},[97,103035,103036],{"class":118}," mujoco-xml",[97,103038,101159],{"class":118},[97,103040,101162],{"class":370},[97,103042,101165],{"class":370},[97,103044,103045,103047,103049],{"class":99,"line":195},[97,103046,30520],{"class":111},[97,103048,101172],{"class":118},[97,103050,103051],{"class":118}," mujoco-xml\n",[97,103053,103054,103056,103058,103060],{"class":99,"line":241},[97,103055,24020],{"class":111},[97,103057,24023],{"class":118},[97,103059,101114],{"class":118},[97,103061,101117],{"class":118},[24,103063,101188],{},[138,103065,103066,103069,103074],{},[70,103067,103068],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[70,103070,103071,103072,28575],{},"本章使用基础标签，适用于 ",[94,103073,101211],{},[70,103075,103076],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103078,101229],{"id":101228},[24,103080,103081],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[87,103083,103085],{"className":53251,"code":103084,"language":53253,"meta":92,"style":92},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[94,103086,103087,103101,103109,103114,103122],{"__ignoreMap":92},[97,103088,103089,103091,103093,103095,103097,103099],{"class":99,"line":100},[97,103090,104],{"class":103},[97,103092,101205],{"class":107},[97,103094,101959],{"class":111},[97,103096,115],{"class":103},[97,103098,62863],{"class":118},[97,103100,130],{"class":103},[97,103102,103103,103105,103107],{"class":99,"line":195},[97,103104,52328],{"class":103},[97,103106,102025],{"class":107},[97,103108,130],{"class":103},[97,103110,103111],{"class":99,"line":241},[97,103112,103113],{"class":103},"    ...\n",[97,103115,103116,103118,103120],{"class":99,"line":1387},[97,103117,52601],{"class":103},[97,103119,102025],{"class":107},[97,103121,130],{"class":103},[97,103123,103124,103126,103128],{"class":99,"line":1393},[97,103125,51969],{"class":103},[97,103127,101205],{"class":107},[97,103129,130],{"class":103},[24,103131,103132,103134,103135,103137,103138,103141],{},[94,103133,51984],{}," 表示刚体。",[94,103136,101304],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[94,103139,103140],{},"joint"," 表示刚体相对父刚体如何运动。",[48,103143,103144],{"id":103144},"层级结构非常重要",[24,103146,103147],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[87,103149,103152],{"className":103150,"code":103151,"language":5378,"meta":92},[5376],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[94,103153,103151],{"__ignoreMap":92},[24,103155,103156,101202,103159,103162,103163,103166],{},[94,103157,103158],{},"red_box_geom",[94,103160,103161],{},"box_center"," 都属于 ",[94,103164,103165],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[87,103168,103170],{"className":53251,"code":103169,"language":53253,"meta":92,"style":92},"\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",[94,103171,103172,103192,103206,103226],{"__ignoreMap":92},[97,103173,103174,103176,103178,103180,103182,103184,103186,103188,103190],{"class":99,"line":100},[97,103175,104],{"class":103},[97,103177,51984],{"class":107},[97,103179,112],{"class":111},[97,103181,115],{"class":103},[97,103183,53675],{"class":118},[97,103185,101290],{"class":111},[97,103187,115],{"class":103},[97,103189,101295],{"class":118},[97,103191,130],{"class":103},[97,103193,103194,103196,103198,103200,103202,103204],{"class":99,"line":195},[97,103195,52328],{"class":103},[97,103197,101804],{"class":107},[97,103199,112],{"class":111},[97,103201,115],{"class":103},[97,103203,102145],{"class":118},[97,103205,101328],{"class":103},[97,103207,103208,103210,103212,103214,103216,103218,103220,103222,103224],{"class":99,"line":241},[97,103209,52328],{"class":103},[97,103211,101304],{"class":107},[97,103213,54008],{"class":111},[97,103215,115],{"class":103},[97,103217,53675],{"class":118},[97,103219,101320],{"class":111},[97,103221,115],{"class":103},[97,103223,101325],{"class":118},[97,103225,101328],{"class":103},[97,103227,103228,103230,103232],{"class":99,"line":1387},[97,103229,51969],{"class":103},[97,103231,51984],{"class":107},[97,103233,130],{"class":103},[24,103235,103236],{},"含义:",[138,103238,103239,103245,103250,103253],{},[70,103240,103241,103242,103244],{},"创建名为 ",[94,103243,53898],{}," 的刚体",[70,103246,103247,103248],{},"初始位置在世界坐标 ",[94,103249,101353],{},[70,103251,103252],{},"它有一个自由关节",[70,103254,103255],{},"它有一个盒子几何体",[48,103257,103258],{"id":103258},"坐标怎么理解",[24,103260,103261],{},"MuJoCo 默认使用三维坐标：",[87,103263,103266],{"className":103264,"code":103265,"language":5378,"meta":92},[5376],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[94,103267,103265],{"__ignoreMap":92},[24,103269,14824],{},[87,103271,103273],{"className":53251,"code":103272,"language":53253,"meta":92,"style":92},"pos=\"0 0 1\"\n",[94,103274,103275],{"__ignoreMap":92},[97,103276,103277],{"class":99,"line":100},[97,103278,103272],{"class":103},[24,103280,103281],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[48,103283,103285],{"id":103284},"geom-的-size-怎么理解","geom 的 size 怎么理解",[24,103287,103288,103289,82714,103292,103294],{},"不同 ",[94,103290,103291],{},"type",[94,103293,31686],{}," 含义不同：",[457,103296,103297,103312],{},[460,103298,103299],{},[463,103300,103301,103305,103310],{},[466,103302,103303],{"align":23925},[94,103304,103291],{},[466,103306,103307,103309],{"align":23925},[94,103308,31686],{}," 示例",[466,103311,100884],{"align":23925},[504,103313,103314,103328,103343,103362],{},[463,103315,103316,103320,103325],{},[509,103317,103318],{"align":23925},[94,103319,53898],{},[509,103321,103322],{"align":23925},[94,103323,103324],{},"size=\"0.1 0.2 0.3\"",[509,103326,103327],{"align":23925},"x\u002Fy\u002Fz 半边长，不是完整长度",[463,103329,103330,103335,103340],{},[509,103331,103332],{"align":23925},[94,103333,103334],{},"sphere",[509,103336,103337],{"align":23925},[94,103338,103339],{},"size=\"0.1\"",[509,103341,103342],{"align":23925},"球半径",[463,103344,103345,103350,103355],{},[509,103346,103347],{"align":23925},[94,103348,103349],{},"capsule",[509,103351,103352],{"align":23925},[94,103353,103354],{},"size=\"0.03\"",[509,103356,103357,103358,103361],{"align":23925},"胶囊半径，长度常用 ",[94,103359,103360],{},"fromto"," 指定",[463,103363,103364,103369,103374],{},[509,103365,103366],{"align":23925},[94,103367,103368],{},"plane",[509,103370,103371],{"align":23925},[94,103372,103373],{},"size=\"3 3 0.1\"",[509,103375,103376],{"align":23925},"可视平面大小，通常当地面",[24,103378,103379,103380,103382,103383,103385],{},"最容易踩坑的是 box：",[94,103381,102208],{}," 表示边长大约是 ",[94,103384,32227],{},"，因为 MuJoCo 用的是半边长。",[48,103387,103389],{"id":103388},"site-是什么","site 是什么",[24,103391,103392,103395],{},[94,103393,103394],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[138,103397,103398,103401,103404,103407],{},[70,103399,103400],{},"标记机械臂末端。",[70,103402,103403],{},"标记目标位置。",[70,103405,103406],{},"放传感器或相机参考点。",[70,103408,103409],{},"在 Python 中读取某个关键点的世界坐标。",[24,103411,103412,103413,101202,103416,103419],{},"在后面的 Reacher 任务中，",[94,103414,103415],{},"tip",[94,103417,103418],{},"target"," 就会用 site 表示。",[14,103421,101437],{"id":101436},[87,103423,103425],{"className":30568,"code":103424,"language":30570,"meta":92,"style":92},"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",[94,103426,103427,103433,103443,103447,103451,103459,103464,103468,103472,103476,103481,103485,103490,103495,103500,103505,103509,103513,103517,103521,103525,103529,103541,103553,103561,103565,103580,103595,103599,103612,103627,103640,103653,103657,103673,103677,103681,103692,103704,103716,103728,103732,103736,103748],{"__ignoreMap":92},[97,103428,103429,103431],{"class":99,"line":100},[97,103430,30582],{"class":319},[97,103432,101485],{"class":103},[97,103434,103435,103437,103439,103441],{"class":99,"line":195},[97,103436,30582],{"class":319},[97,103438,31570],{"class":103},[97,103440,31573],{"class":319},[97,103442,31576],{"class":103},[97,103444,103445],{"class":99,"line":241},[97,103446,2591],{"emptyLinePlaceholder":249},[97,103448,103449],{"class":99,"line":1387},[97,103450,2591],{"emptyLinePlaceholder":249},[97,103452,103453,103455,103457],{"class":99,"line":1393},[97,103454,101498],{"class":370},[97,103456,13755],{"class":319},[97,103458,101503],{"class":118},[97,103460,103461],{"class":99,"line":1407},[97,103462,103463],{"class":118},"\u003Cmujoco model=\"xml_basic\">\n",[97,103465,103466],{"class":99,"line":1413},[97,103467,101513],{"class":118},[97,103469,103470],{"class":99,"line":1504},[97,103471,2591],{"emptyLinePlaceholder":249},[97,103473,103474],{"class":99,"line":1510},[97,103475,101522],{"class":118},[97,103477,103478],{"class":99,"line":1522},[97,103479,103480],{"class":118},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[97,103482,103483],{"class":99,"line":1804},[97,103484,2591],{"emptyLinePlaceholder":249},[97,103486,103487],{"class":99,"line":1809},[97,103488,103489],{"class":118},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[97,103491,103492],{"class":99,"line":1815},[97,103493,103494],{"class":118},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[97,103496,103497],{"class":99,"line":1820},[97,103498,103499],{"class":118},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[97,103501,103502],{"class":99,"line":1834},[97,103503,103504],{"class":118},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[97,103506,103507],{"class":99,"line":1839},[97,103508,101551],{"class":118},[97,103510,103511],{"class":99,"line":1845},[97,103512,101556],{"class":118},[97,103514,103515],{"class":99,"line":1866},[97,103516,101561],{"class":118},[97,103518,103519],{"class":99,"line":1871},[97,103520,95882],{"class":118},[97,103522,103523],{"class":99,"line":1885},[97,103524,2591],{"emptyLinePlaceholder":249},[97,103526,103527],{"class":99,"line":1890},[97,103528,2591],{"emptyLinePlaceholder":249},[97,103530,103531,103533,103535,103537,103539],{"class":99,"line":1919},[97,103532,32137],{"class":319},[97,103534,2164],{"class":111},[97,103536,101582],{"class":103},[97,103538,95870],{"class":370},[97,103540,3930],{"class":103},[97,103542,103543,103545,103547,103549,103551],{"class":99,"line":1924},[97,103544,101591],{"class":103},[97,103546,115],{"class":319},[97,103548,101596],{"class":103},[97,103550,101498],{"class":370},[97,103552,329],{"class":103},[97,103554,103555,103557,103559],{"class":99,"line":1941},[97,103556,101605],{"class":103},[97,103558,115],{"class":319},[97,103560,101610],{"class":103},[97,103562,103563],{"class":99,"line":1946},[97,103564,2591],{"emptyLinePlaceholder":249},[97,103566,103567,103570,103572,103575,103578],{"class":99,"line":1951},[97,103568,103569],{"class":103},"    box_body_id ",[97,103571,115],{"class":319},[97,103573,103574],{"class":103}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[97,103576,103577],{"class":118},"\"red_box\"",[97,103579,329],{"class":103},[97,103581,103582,103585,103587,103590,103593],{"class":99,"line":1956},[97,103583,103584],{"class":103},"    site_id ",[97,103586,115],{"class":319},[97,103588,103589],{"class":103}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[97,103591,103592],{"class":118},"\"box_center\"",[97,103594,329],{"class":103},[97,103596,103597],{"class":99,"line":1970},[97,103598,2591],{"emptyLinePlaceholder":249},[97,103600,103601,103603,103606,103608,103610],{"class":99,"line":1975},[97,103602,3292],{"class":319},[97,103604,103605],{"class":103}," box_body_id ",[97,103607,104],{"class":319},[97,103609,4284],{"class":370},[97,103611,3930],{"class":103},[97,103613,103614,103617,103620,103622,103625],{"class":99,"line":2768},[97,103615,103616],{"class":319},"        raise",[97,103618,103619],{"class":370}," RuntimeError",[97,103621,323],{"class":103},[97,103623,103624],{"class":118},"\"body red_box not found\"",[97,103626,329],{"class":103},[97,103628,103629,103631,103634,103636,103638],{"class":99,"line":2782},[97,103630,3292],{"class":319},[97,103632,103633],{"class":103}," site_id ",[97,103635,104],{"class":319},[97,103637,4284],{"class":370},[97,103639,3930],{"class":103},[97,103641,103642,103644,103646,103648,103651],{"class":99,"line":2790},[97,103643,103616],{"class":319},[97,103645,103619],{"class":370},[97,103647,323],{"class":103},[97,103649,103650],{"class":118},"\"site box_center not found\"",[97,103652,329],{"class":103},[97,103654,103655],{"class":99,"line":2795},[97,103656,2591],{"emptyLinePlaceholder":249},[97,103658,103659,103661,103663,103665,103667,103669,103671],{"class":99,"line":2801},[97,103660,3392],{"class":319},[97,103662,101685],{"class":103},[97,103664,26233],{"class":319},[97,103666,32633],{"class":370},[97,103668,323],{"class":103},[97,103670,1914],{"class":370},[97,103672,30976],{"class":103},[97,103674,103675],{"class":99,"line":2807},[97,103676,101700],{"class":103},[97,103678,103679],{"class":99,"line":2812},[97,103680,2591],{"emptyLinePlaceholder":249},[97,103682,103683,103685,103687,103690],{"class":99,"line":8139},[97,103684,31489],{"class":370},[97,103686,323],{"class":103},[97,103688,103689],{"class":118},"\"simulation time:\"",[97,103691,101662],{"class":103},[97,103693,103694,103696,103698,103701],{"class":99,"line":8163},[97,103695,31489],{"class":370},[97,103697,323],{"class":103},[97,103699,103700],{"class":118},"\"box body position:\"",[97,103702,103703],{"class":103},", data.xpos[box_body_id].copy())\n",[97,103705,103706,103708,103710,103713],{"class":99,"line":8168},[97,103707,31489],{"class":370},[97,103709,323],{"class":103},[97,103711,103712],{"class":118},"\"site position:\"",[97,103714,103715],{"class":103},", data.site_xpos[site_id].copy())\n",[97,103717,103718,103720,103722,103725],{"class":99,"line":8174},[97,103719,31489],{"class":370},[97,103721,323],{"class":103},[97,103723,103724],{"class":118},"\"box qpos:\"",[97,103726,103727],{"class":103},", np.array(data.qpos))\n",[97,103729,103730],{"class":99,"line":8201},[97,103731,2591],{"emptyLinePlaceholder":249},[97,103733,103734],{"class":99,"line":8206},[97,103735,2591],{"emptyLinePlaceholder":249},[97,103737,103738,103740,103742,103744,103746],{"class":99,"line":8212},[97,103739,1723],{"class":319},[97,103741,31410],{"class":370},[97,103743,101743],{"class":319},[97,103745,101746],{"class":118},[97,103747,3930],{"class":103},[97,103749,103750],{"class":99,"line":8224},[97,103751,101753],{"class":103},[24,103753,103754],{},"保存为：",[87,103756,103758],{"className":24011,"code":103757,"language":24013,"meta":92,"style":92},"touch ch2_xml_basic.py\n",[94,103759,103760],{"__ignoreMap":92},[97,103761,103762,103764],{"class":99,"line":100},[97,103763,101467],{"class":111},[97,103765,103766],{"class":118}," ch2_xml_basic.py\n",[24,103768,102485],{},[87,103770,103772],{"className":24011,"code":103771,"language":24013,"meta":92,"style":92},"python ch2_xml_basic.py\n",[94,103773,103774],{"__ignoreMap":92},[97,103775,103776,103778],{"class":99,"line":100},[97,103777,30570],{"class":111},[97,103779,103766],{"class":118},[48,103781,101756],{"id":101756},[24,103783,103784],{},"用名字查找 body：",[87,103786,103788],{"className":30568,"code":103787,"language":30570,"meta":92,"style":92},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[94,103789,103790],{"__ignoreMap":92},[97,103791,103792,103795,103797,103799,103801],{"class":99,"line":100},[97,103793,103794],{"class":103},"box_body_id ",[97,103796,115],{"class":319},[97,103798,103574],{"class":103},[97,103800,103577],{"class":118},[97,103802,329],{"class":103},[24,103804,103805],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[24,103807,103808],{},"用名字查找 site：",[87,103810,103812],{"className":30568,"code":103811,"language":30570,"meta":92,"style":92},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[94,103813,103814],{"__ignoreMap":92},[97,103815,103816,103819,103821,103823,103825],{"class":99,"line":100},[97,103817,103818],{"class":103},"site_id ",[97,103820,115],{"class":319},[97,103822,103589],{"class":103},[97,103824,103592],{"class":118},[97,103826,329],{"class":103},[24,103828,103829,103830,103833,103834,103837],{},"注意第二个参数是对象类型。查 body 就用 ",[94,103831,103832],{},"mjOBJ_BODY","，查 site 就用 ",[94,103835,103836],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[24,103839,103840],{},"读取世界坐标：",[87,103842,103844],{"className":30568,"code":103843,"language":30570,"meta":92,"style":92},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[94,103845,103846,103851],{"__ignoreMap":92},[97,103847,103848],{"class":99,"line":100},[97,103849,103850],{"class":103},"data.xpos[box_body_id]\n",[97,103852,103853],{"class":99,"line":195},[97,103854,103855],{"class":103},"data.site_xpos[site_id]\n",[24,103857,103858,103861,103862,103865],{},[94,103859,103860],{},"xpos"," 是 body 的世界坐标，",[94,103863,103864],{},"site_xpos"," 是 site 的世界坐标。",[48,103867,101892],{"id":101892},[87,103869,103871],{"className":30568,"code":103870,"language":30570,"meta":92,"style":92},"import mujoco\nimport numpy as np\n",[94,103872,103873,103879],{"__ignoreMap":92},[97,103874,103875,103877],{"class":99,"line":100},[97,103876,30582],{"class":319},[97,103878,101485],{"class":103},[97,103880,103881,103883,103885,103887],{"class":99,"line":195},[97,103882,30582],{"class":319},[97,103884,31570],{"class":103},[97,103886,31573],{"class":319},[97,103888,31576],{"class":103},[24,103890,103891,103892,103895,103896,103899,103900,532,103903,28575],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[94,103893,103894],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[94,103897,103898],{},"as np"," 是习惯写法，后面就可以写 ",[94,103901,103902],{},"np.array(...)",[94,103904,103905],{},"np.round(...)",[87,103907,103908],{"className":30568,"code":101779,"language":30570,"meta":92,"style":92},[94,103909,103910,103918,103922],{"__ignoreMap":92},[97,103911,103912,103914,103916],{"class":99,"line":100},[97,103913,101498],{"class":370},[97,103915,13755],{"class":319},[97,103917,101503],{"class":118},[97,103919,103920],{"class":99,"line":195},[97,103921,101794],{"class":118},[97,103923,103924],{"class":99,"line":241},[97,103925,95882],{"class":118},[24,103927,103928,103929,28575],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[94,103930,103931],{},"mujoco.MjModel.from_xml_string(XML)",[87,103933,103935],{"className":53251,"code":103934,"language":53253,"meta":92,"style":92},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[94,103936,103937],{"__ignoreMap":92},[97,103938,103939,103941,103943,103945,103947,103949,103951,103953,103956,103958,103960,103963,103965,103967,103970],{"class":99,"line":100},[97,103940,104],{"class":103},[97,103942,103394],{"class":107},[97,103944,112],{"class":111},[97,103946,115],{"class":103},[97,103948,103592],{"class":118},[97,103950,101290],{"class":111},[97,103952,115],{"class":103},[97,103954,103955],{"class":118},"\"0 0 0\"",[97,103957,101320],{"class":111},[97,103959,115],{"class":103},[97,103961,103962],{"class":118},"\"0.03\"",[97,103964,78951],{"class":111},[97,103966,115],{"class":103},[97,103968,103969],{"class":118},"\"0 1 0 1\"",[97,103971,101328],{"class":103},[24,103973,103974,103976,103977,103980,103981,103983,103984,103987],{},[94,103975,103394],{}," 是标记点。",[94,103978,103979],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[94,103982,103354],{}," 表示显示出来的小球大小。",[94,103985,103986],{},"rgba=\"0 1 0 1\""," 表示绿色。",[87,103989,103990],{"className":30568,"code":103787,"language":30570,"meta":92,"style":92},[94,103991,103992],{"__ignoreMap":92},[97,103993,103994,103996,103998,104000,104002],{"class":99,"line":100},[97,103995,103794],{"class":103},[97,103997,115],{"class":319},[97,103999,103574],{"class":103},[97,104001,103577],{"class":118},[97,104003,329],{"class":103},[24,104005,104006,104007,104009],{},"这行的作用是：根据名字 ",[94,104008,103577],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[24,104011,104012],{},"拆开看：",[138,104014,104015,104021,104026,104032],{},[70,104016,104017,104020],{},[94,104018,104019],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[70,104022,104023,104025],{},[94,104024,102269],{}," 是被查询的模型。",[70,104027,104028,104031],{},[94,104029,104030],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[70,104033,104034,104036],{},[94,104035,103577],{}," 是 XML 里写的名字。",[87,104038,104039],{"className":30568,"code":103811,"language":30570,"meta":92,"style":92},[94,104040,104041],{"__ignoreMap":92},[97,104042,104043,104045,104047,104049,104051],{"class":99,"line":100},[97,104044,103818],{"class":103},[97,104046,115],{"class":319},[97,104048,103589],{"class":103},[97,104050,103592],{"class":118},[97,104052,329],{"class":103},[24,104054,104055,104056,28575],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[94,104057,103592],{},[87,104059,104061],{"className":30568,"code":104060,"language":30570,"meta":92,"style":92},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[94,104062,104063,104075],{"__ignoreMap":92},[97,104064,104065,104067,104069,104071,104073],{"class":99,"line":100},[97,104066,1723],{"class":319},[97,104068,103605],{"class":103},[97,104070,104],{"class":319},[97,104072,4284],{"class":370},[97,104074,3930],{"class":103},[97,104076,104077,104080,104082,104084,104086],{"class":99,"line":195},[97,104078,104079],{"class":319},"    raise",[97,104081,103619],{"class":370},[97,104083,323],{"class":103},[97,104085,103624],{"class":118},[97,104087,329],{"class":103},[24,104089,104090,104092,104093,104096,104097,104100,104101,104104],{},[94,104091,1723],{}," 是条件判断。",[94,104094,104095],{},"mj_name2id"," 找不到对象时会返回 ",[94,104098,104099],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[94,104102,104103],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[87,104106,104108],{"className":30568,"code":104107,"language":30570,"meta":92,"style":92},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[94,104109,104110,104126],{"__ignoreMap":92},[97,104111,104112,104114,104116,104118,104120,104122,104124],{"class":99,"line":100},[97,104113,3216],{"class":319},[97,104115,101685],{"class":103},[97,104117,26233],{"class":319},[97,104119,32633],{"class":370},[97,104121,323],{"class":103},[97,104123,1914],{"class":370},[97,104125,30976],{"class":103},[97,104127,104128],{"class":99,"line":195},[97,104129,101883],{"class":103},[24,104131,104132],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[87,104134,104136],{"className":30568,"code":104135,"language":30570,"meta":92,"style":92},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[94,104137,104138],{"__ignoreMap":92},[97,104139,104140,104142,104144,104146],{"class":99,"line":100},[97,104141,30605],{"class":370},[97,104143,323],{"class":103},[97,104145,103700],{"class":118},[97,104147,103703],{"class":103},[24,104149,104150,104152,104153,104156],{},[94,104151,101263],{}," 保存所有 body 的世界坐标。",[94,104154,104155],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[87,104158,104160],{"className":30568,"code":104159,"language":30570,"meta":92,"style":92},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[94,104161,104162],{"__ignoreMap":92},[97,104163,104164,104166,104168,104170],{"class":99,"line":100},[97,104165,30605],{"class":370},[97,104167,323],{"class":103},[97,104169,103712],{"class":118},[97,104171,103715],{"class":103},[24,104173,104174,104177,104178,104180],{},[94,104175,104176],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[94,104179,103161],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[87,104182,104184],{"className":30568,"code":104183,"language":30570,"meta":92,"style":92},"print(\"box qpos:\", np.array(data.qpos))\n",[94,104185,104186],{"__ignoreMap":92},[97,104187,104188,104190,104192,104194],{"class":99,"line":100},[97,104189,30605],{"class":370},[97,104191,323],{"class":103},[97,104193,103724],{"class":118},[97,104195,103727],{"class":103},[24,104197,104198,104199,104202],{},"这里打印广义位置数组。",[94,104200,104201],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104204,102500],{"id":102499},[24,104206,104207,104208,104211,104212,28575],{},"程序会输出 ",[94,104209,104210],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[94,104213,104214],{},"qpos",[24,104216,104217,104219,104220,104223,104224,104227],{},[94,104218,104155],{}," 是 body 的世界坐标位置。",[94,104221,104222],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[94,104225,104226],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[24,104229,82406,104230,82714,104232,104234],{},[94,104231,103161],{},[94,104233,103979],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[24,104236,104237],{},"如果你把 site 改成：",[87,104239,104241],{"className":53251,"code":104240,"language":53253,"meta":92,"style":92},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[94,104242,104243],{"__ignoreMap":92},[97,104244,104245,104247,104249,104251,104253,104256,104258,104260,104263,104265,104267,104269,104271,104273,104275],{"class":99,"line":100},[97,104246,104],{"class":103},[97,104248,103394],{"class":107},[97,104250,112],{"class":111},[97,104252,115],{"class":103},[97,104254,104255],{"class":118},"\"box_top\"",[97,104257,101290],{"class":111},[97,104259,115],{"class":103},[97,104261,104262],{"class":118},"\"0 0 0.15\"",[97,104264,101320],{"class":111},[97,104266,115],{"class":103},[97,104268,103962],{"class":118},[97,104270,78951],{"class":111},[97,104272,115],{"class":103},[97,104274,103969],{"class":118},[97,104276,101328],{"class":103},[24,104278,104279,104280,104283],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[94,104281,104282],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104285,102532],{"id":102531},[138,104287,104288,104297,104300,104307,104313,104324],{},[70,104289,102595,104290,104292,104293,102598,104295,28575],{},[94,104291,103165],{}," 的初始高度从 ",[94,104294,537],{},[94,104296,398],{},[70,104298,104299],{},"重新运行程序。",[70,104301,104302,104303,104306],{},"观察 ",[94,104304,104305],{},"box qpos"," 和最终位置是否变化。",[70,104308,104309,104310,104312],{},"故意把 ",[94,104311,103394],{}," 名称改错，确认程序能报错。",[70,104314,102595,104315,104317,104318,102598,104320,104323],{},[94,104316,101304],{}," 的颜色 ",[94,104319,102216],{},[94,104321,104322],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[70,104325,102595,104326,82714,104328,102598,104331,104334,104335,104337],{},[94,104327,103161],{},[94,104329,104330],{},"pos",[94,104332,104333],{},"0 0 0.2","，观察 ",[94,104336,104282],{}," 如何变化。",[14,104339,102637],{"id":102636},[48,104341,104343],{"id":104342},"xml-error-schema-violation",[94,104344,104345],{},"XML Error: Schema violation",[24,104347,104348],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[48,104350,104352,81474,104354],{"id":104351},"mj_name2id-返回-1",[94,104353,104095],{},[94,104355,104099],{},[24,104357,104358,104359,104362],{},"说明名字没有找到。检查 XML 中 ",[94,104360,104361],{},"name=\"...\"","，并确认对象类型正确。",[48,104364,104365],{"id":104365},"物体不下落",[24,104367,102707],{},[138,104369,104370,104375,104380],{},[70,104371,104372,104373],{},"body 是否有 ",[94,104374,101804],{},[70,104376,104377,104378],{},"gravity 是否为 ",[94,104379,102773],{},[70,104381,104382,104383,104385],{},"body 是否被固定在 ",[94,104384,102025],{}," 中",[48,104387,104388],{"id":104388},"坐标看起来不符合预期",[24,104390,104391],{},"先区分两种坐标：",[457,104393,104394,104403],{},[460,104395,104396],{},[463,104397,104398,104401],{},[466,104399,104400],{"align":23925},"坐标",[466,104402,100884],{"align":23925},[504,104404,104405,104415],{},[463,104406,104407,104412],{},[509,104408,104409,104410],{"align":23925},"XML 里的 ",[94,104411,104330],{},[509,104413,104414],{"align":23925},"相对父 body 的局部坐标",[463,104416,104417,104423],{},[509,104418,104419,25168,104421],{"align":23925},[94,104420,101263],{},[94,104422,104176],{},[509,104424,104425],{"align":23925},"仿真更新后的世界坐标",[24,104427,104428,104429,104431,104432,82723,104435,104437],{},"如果你修改了 ",[94,104430,101254],{},"，但还没调用 ",[94,104433,104434],{},"mj_forward",[94,104436,101399],{},"，世界坐标可能还没有更新。",[14,104439,102791],{"id":102790},[24,104441,104442],{},"MJCF 建模先掌握四件事：",[138,104444,104445,104450,104455,104460],{},[70,104446,104447,104449],{},[94,104448,51984],{}," 表示刚体层级。",[70,104451,104452,104454],{},[94,104453,101304],{}," 表示形状、碰撞和质量。",[70,104456,104457,104459],{},[94,104458,103140],{}," 决定 body 能不能动、怎么动。",[70,104461,104462,104464],{},[94,104463,103394],{}," 用来标记关键点，方便 Python 读取位置。",[24,104466,104467],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[231,104469,104470],{},"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":92,"searchDepth":195,"depth":195,"links":104472},[104473,104474,104475,104481,104485,104486,104487,104494],{"id":100830,"depth":195,"text":100831},{"id":100953,"depth":195,"text":100954},{"id":101228,"depth":195,"text":101229,"children":104476},[104477,104478,104479,104480],{"id":103144,"depth":241,"text":103144},{"id":103258,"depth":241,"text":103258},{"id":103284,"depth":241,"text":103285},{"id":103388,"depth":241,"text":103389},{"id":101436,"depth":195,"text":101437,"children":104482},[104483,104484],{"id":101756,"depth":241,"text":101756},{"id":101892,"depth":241,"text":101892},{"id":102499,"depth":195,"text":102500},{"id":102531,"depth":195,"text":102532},{"id":102636,"depth":195,"text":102637,"children":104488},[104489,104490,104492,104493],{"id":104342,"depth":241,"text":104345},{"id":104351,"depth":241,"text":104491},"mj_name2id 返回 -1",{"id":104365,"depth":241,"text":104365},{"id":104388,"depth":241,"text":104388},{"id":102790,"depth":195,"text":102791},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102838,"description":92},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104501,"title":104502,"body":104503,"description":92,"extension":247,"meta":105998,"navigation":249,"path":105999,"seo":106000,"stem":106001,"__hash__":106002},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104504,"toc":105970},[104505,104508,104510,104513,104516,104554,104557,104563,104566,104568,104570,104597,104599,104613,104615,104656,104658,104682,104684,104687,104696,104705,104708,104717,104725,104734,104737,104747,104750,104802,104809,104815,104823,104871,104874,104893,104896,104904,104908,104917,104950,104952,105300,105302,105314,105316,105327,105329,105332,105353,105359,105362,105387,105397,105400,105408,105411,105414,105435,105446,105448,105468,105471,105492,105501,105520,105526,105551,105554,105568,105575,105599,105602,105610,105619,105635,105647,105655,105664,105666,105669,105693,105698,105701,105723,105725,105764,105766,105773,105775,105783,105786,105789,105801,105842,105849,105860,105867,105870,105919,105922,105925,105931,105933,105938,105964,105967],[10,104506,104502],{"id":104507},"_3python-控制接口读取状态与推进仿真",[14,104509,100831],{"id":100830},[24,104511,104512],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[24,104514,104515],{},"你将学习:",[138,104517,104518,104523,104528,104532,104537,104548],{},[70,104519,104520],{},[94,104521,104522],{},"MjModel.from_xml_string",[70,104524,104525],{},[94,104526,104527],{},"MjData(model)",[70,104529,104530],{},[94,104531,101399],{},[70,104533,104534],{},[94,104535,104536],{},"mj_resetData",[70,104538,104539,104540,532,104542,532,104545],{},"读取 ",[94,104541,104214],{},[94,104543,104544],{},"qvel",[94,104546,104547],{},"ctrl",[70,104549,104550,104551],{},"使用 ",[94,104552,104553],{},"model.opt.timestep",[24,104555,104556],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[87,104558,104561],{"className":104559,"code":104560,"language":5378,"meta":92},[5376],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[94,104562,104560],{"__ignoreMap":92},[24,104564,104565],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104567,100954],{"id":100953},[24,104569,100957],{},[87,104571,104573],{"className":24011,"code":104572,"language":24013,"meta":92,"style":92},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[94,104574,104575],{"__ignoreMap":92},[97,104576,104577,104579,104581,104583,104585,104588,104590,104592,104594],{"class":99,"line":100},[97,104578,24766],{"class":111},[97,104580,26505],{"class":118},[97,104582,24023],{"class":118},[97,104584,26590],{"class":370},[97,104586,104587],{"class":118}," python3",[97,104589,100982],{"class":118},[97,104591,102685],{"class":118},[97,104593,100998],{"class":118},[97,104595,104596],{"class":118}," glfw\n",[24,104598,103003],{},[87,104600,104601],{"className":24011,"code":101103,"language":24013,"meta":92,"style":92},[94,104602,104603],{"__ignoreMap":92},[97,104604,104605,104607,104609,104611],{"class":99,"line":100},[97,104606,24020],{"class":111},[97,104608,24023],{"class":118},[97,104610,101114],{"class":118},[97,104612,101117],{"class":118},[24,104614,103020],{},[87,104616,104618],{"className":24011,"code":104617,"language":24013,"meta":92,"style":92},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[94,104619,104620,104637,104646],{"__ignoreMap":92},[97,104621,104622,104624,104626,104628,104631,104633,104635],{"class":99,"line":100},[97,104623,30520],{"class":111},[97,104625,29366],{"class":118},[97,104627,25305],{"class":370},[97,104629,104630],{"class":118}," mujoco-python-api",[97,104632,101159],{"class":118},[97,104634,101162],{"class":370},[97,104636,101165],{"class":370},[97,104638,104639,104641,104643],{"class":99,"line":195},[97,104640,30520],{"class":111},[97,104642,101172],{"class":118},[97,104644,104645],{"class":118}," mujoco-python-api\n",[97,104647,104648,104650,104652,104654],{"class":99,"line":241},[97,104649,24020],{"class":111},[97,104651,24023],{"class":118},[97,104653,101114],{"class":118},[97,104655,101117],{"class":118},[24,104657,101188],{},[138,104659,104660,104667,104676],{},[70,104661,104662,101202,104664,104666],{},[94,104663,100859],{},[94,104665,100864],{}," 是官方 Python bindings 的类名。",[70,104668,104669,104670,104673,104674,28575],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[94,104671,104672],{},"mjModel"," 在 Python 中是 ",[94,104675,100893],{},[70,104677,104678,104679,28575],{},"不要使用 ",[94,104680,104681],{},"sim = mujoco_py.MjSim(...)",[14,104683,101229],{"id":101228},[24,104685,104686],{},"仿真推进核心代码:",[87,104688,104690],{"className":30568,"code":104689,"language":30570,"meta":92,"style":92},"mujoco.mj_step(model, data)\n",[94,104691,104692],{"__ignoreMap":92},[97,104693,104694],{"class":99,"line":100},[97,104695,104689],{"class":103},[24,104697,104698,104699,532,104701,532,104703,28575],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[94,104700,101254],{},[94,104702,101257],{},[94,104704,101251],{},[24,104706,104707],{},"重置仿真:",[87,104709,104711],{"className":30568,"code":104710,"language":30570,"meta":92,"style":92},"mujoco.mj_resetData(model, data)\n",[94,104712,104713],{"__ignoreMap":92},[97,104714,104715],{"class":99,"line":100},[97,104716,104710],{"class":103},[24,104718,104719,104720,82723,104722,104724],{},"如果手动修改了 ",[94,104721,101254],{},[94,104723,101257],{},"，通常应调用:",[87,104726,104728],{"className":30568,"code":104727,"language":30570,"meta":92,"style":92},"mujoco.mj_forward(model, data)\n",[94,104729,104730],{"__ignoreMap":92},[97,104731,104732],{"class":99,"line":100},[97,104733,104727],{"class":103},[24,104735,104736],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[48,104738,104740,532,104742,532,104744,104746],{"id":104739},"qposqvelctrl-是什么",[94,104741,104214],{},[94,104743,104544],{},[94,104745,104547],{}," 是什么",[24,104748,104749],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[457,104751,104752,104764],{},[460,104753,104754],{},[463,104755,104756,104759,104761],{},[466,104757,104758],{"align":23925},"字段",[466,104760,100884],{"align":23925},[466,104762,104763],{"align":23925},"谁来修改",[504,104765,104766,104778,104790],{},[463,104767,104768,104772,104775],{},[509,104769,104770],{"align":23925},[94,104771,101254],{},[509,104773,104774],{"align":23925},"广义位置，例如小车位置、关节角、自由物体位置姿态",[509,104776,104777],{"align":23925},"MuJoCo 更新，也可以手动设置初始状态",[463,104779,104780,104784,104787],{},[509,104781,104782],{"align":23925},[94,104783,101257],{},[509,104785,104786],{"align":23925},"广义速度，例如小车速度、关节角速度",[509,104788,104789],{"align":23925},"MuJoCo 更新，也可以手动清零",[463,104791,104792,104796,104799],{},[509,104793,104794],{"align":23925},[94,104795,101260],{},[509,104797,104798],{"align":23925},"actuator 的控制输入",[509,104800,104801],{"align":23925},"主要由你的控制代码写入",[24,104803,9216,104804,101202,104806,104808],{},[94,104805,104214],{},[94,104807,104544],{}," 不一定同维。自由刚体就是典型例子：",[87,104810,104813],{"className":104811,"code":104812,"language":5378,"meta":92},[5376],"freejoint: qpos 7 维，qvel 6 维\n",[94,104814,104812],{"__ignoreMap":92},[48,104816,104818,101202,104820,104822],{"id":104817},"mj_step-和-mj_forward-的区别",[94,104819,101399],{},[94,104821,104434],{}," 的区别",[457,104824,104825,104838],{},[460,104826,104827],{},[463,104828,104829,104832,104835],{},[466,104830,104831],{"align":23925},"函数",[466,104833,104834],{"align":23925},"是否推进时间",[466,104836,104837],{"align":23925},"什么时候用",[504,104839,104840,104853],{},[463,104841,104842,104847,104850],{},[509,104843,104844],{"align":23925},[94,104845,104846],{},"mj_step(model, data)",[509,104848,104849],{"align":23925},"是",[509,104851,104852],{"align":23925},"正常仿真循环，每调用一次前进一步",[463,104854,104855,104860,104863],{},[509,104856,104857],{"align":23925},[94,104858,104859],{},"mj_forward(model, data)",[509,104861,104862],{"align":23925},"否",[509,104864,104865,104866,532,104868,104870],{"align":23925},"手动改了 ",[94,104867,104214],{},[94,104869,104544],{}," 后，刷新派生量",[24,104872,104873],{},"例如你写：",[87,104875,104877],{"className":30568,"code":104876,"language":30570,"meta":92,"style":92},"data.qpos[2] = 2.0\n",[94,104878,104879],{"__ignoreMap":92},[97,104880,104881,104884,104886,104888,104890],{"class":99,"line":100},[97,104882,104883],{"class":103},"data.qpos[",[97,104885,398],{"class":370},[97,104887,4634],{"class":103},[97,104889,115],{"class":319},[97,104891,104892],{"class":370}," 2.0\n",[24,104894,104895],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[87,104897,104898],{"className":30568,"code":104727,"language":30570,"meta":92,"style":92},[94,104899,104900],{"__ignoreMap":92},[97,104901,104902],{"class":99,"line":100},[97,104903,104727],{"class":103},[48,104905,104907],{"id":104906},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[24,104909,104910,104913,104914,104916],{},[94,104911,104912],{},"mujoco.mj_resetData(model, data)"," 会把 ",[94,104915,33591],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[87,104918,104920],{"className":30568,"code":104919,"language":30570,"meta":92,"style":92},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[94,104921,104922,104926,104936,104946],{"__ignoreMap":92},[97,104923,104924],{"class":99,"line":100},[97,104925,104710],{"class":103},[97,104927,104928,104931,104933],{"class":99,"line":195},[97,104929,104930],{"class":103},"data.qpos[:] ",[97,104932,115],{"class":319},[97,104934,104935],{"class":103}," random_qpos\n",[97,104937,104938,104941,104943],{"class":99,"line":241},[97,104939,104940],{"class":103},"data.qvel[:] ",[97,104942,115],{"class":319},[97,104944,104945],{"class":370}," 0.0\n",[97,104947,104948],{"class":99,"line":1387},[97,104949,104727],{"class":103},[14,104951,101437],{"id":101436},[87,104953,104955],{"className":30568,"code":104954,"language":30570,"meta":92,"style":92},"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",[94,104956,104957,104963,104973,104977,104981,104989,104994,104998,105002,105006,105011,105015,105020,105025,105030,105034,105038,105042,105046,105050,105054,105073,105080,105092,105103,105119,105135,105139,105143,105155,105167,105175,105179,105190,105194,105210,105214,105218,105227,105231,105236,105245,105249,105262,105267,105276,105280,105284,105296],{"__ignoreMap":92},[97,104958,104959,104961],{"class":99,"line":100},[97,104960,30582],{"class":319},[97,104962,101485],{"class":103},[97,104964,104965,104967,104969,104971],{"class":99,"line":195},[97,104966,30582],{"class":319},[97,104968,31570],{"class":103},[97,104970,31573],{"class":319},[97,104972,31576],{"class":103},[97,104974,104975],{"class":99,"line":241},[97,104976,2591],{"emptyLinePlaceholder":249},[97,104978,104979],{"class":99,"line":1387},[97,104980,2591],{"emptyLinePlaceholder":249},[97,104982,104983,104985,104987],{"class":99,"line":1393},[97,104984,101498],{"class":370},[97,104986,13755],{"class":319},[97,104988,101503],{"class":118},[97,104990,104991],{"class":99,"line":1407},[97,104992,104993],{"class":118},"\u003Cmujoco model=\"state_api\">\n",[97,104995,104996],{"class":99,"line":1413},[97,104997,101513],{"class":118},[97,104999,105000],{"class":99,"line":1504},[97,105001,2591],{"emptyLinePlaceholder":249},[97,105003,105004],{"class":99,"line":1510},[97,105005,101522],{"class":118},[97,105007,105008],{"class":99,"line":1522},[97,105009,105010],{"class":118},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[97,105012,105013],{"class":99,"line":1804},[97,105014,2591],{"emptyLinePlaceholder":249},[97,105016,105017],{"class":99,"line":1809},[97,105018,105019],{"class":118},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[97,105021,105022],{"class":99,"line":1815},[97,105023,105024],{"class":118},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[97,105026,105027],{"class":99,"line":1820},[97,105028,105029],{"class":118},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[97,105031,105032],{"class":99,"line":1834},[97,105033,101551],{"class":118},[97,105035,105036],{"class":99,"line":1839},[97,105037,101556],{"class":118},[97,105039,105040],{"class":99,"line":1845},[97,105041,101561],{"class":118},[97,105043,105044],{"class":99,"line":1866},[97,105045,95882],{"class":118},[97,105047,105048],{"class":99,"line":1871},[97,105049,2591],{"emptyLinePlaceholder":249},[97,105051,105052],{"class":99,"line":1885},[97,105053,2591],{"emptyLinePlaceholder":249},[97,105055,105056,105058,105061,105064,105066,105069,105071],{"class":99,"line":1890},[97,105057,32137],{"class":319},[97,105059,105060],{"class":111}," print_state",[97,105062,105063],{"class":103},"(prefix: ",[97,105065,1492],{"class":370},[97,105067,105068],{"class":103},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[97,105070,95870],{"class":370},[97,105072,3930],{"class":103},[97,105074,105075,105077],{"class":99,"line":1919},[97,105076,31489],{"class":370},[97,105078,105079],{"class":103},"(prefix)\n",[97,105081,105082,105084,105086,105089],{"class":99,"line":1924},[97,105083,31489],{"class":370},[97,105085,323],{"class":103},[97,105087,105088],{"class":118},"\"  timestep:\"",[97,105090,105091],{"class":103},", model.opt.timestep)\n",[97,105093,105094,105096,105098,105101],{"class":99,"line":1941},[97,105095,31489],{"class":370},[97,105097,323],{"class":103},[97,105099,105100],{"class":118},"\"  time:\"",[97,105102,101662],{"class":103},[97,105104,105105,105107,105109,105112,105115,105117],{"class":99,"line":1946},[97,105106,31489],{"class":370},[97,105108,323],{"class":103},[97,105110,105111],{"class":118},"\"  qpos:\"",[97,105113,105114],{"class":103},", np.round(data.qpos.copy(), ",[97,105116,613],{"class":370},[97,105118,30687],{"class":103},[97,105120,105121,105123,105125,105128,105131,105133],{"class":99,"line":1951},[97,105122,31489],{"class":370},[97,105124,323],{"class":103},[97,105126,105127],{"class":118},"\"  qvel:\"",[97,105129,105130],{"class":103},", np.round(data.qvel.copy(), ",[97,105132,613],{"class":370},[97,105134,30687],{"class":103},[97,105136,105137],{"class":99,"line":1956},[97,105138,2591],{"emptyLinePlaceholder":249},[97,105140,105141],{"class":99,"line":1970},[97,105142,2591],{"emptyLinePlaceholder":249},[97,105144,105145,105147,105149,105151,105153],{"class":99,"line":1975},[97,105146,32137],{"class":319},[97,105148,2164],{"class":111},[97,105150,101582],{"class":103},[97,105152,95870],{"class":370},[97,105154,3930],{"class":103},[97,105156,105157,105159,105161,105163,105165],{"class":99,"line":2768},[97,105158,101591],{"class":103},[97,105160,115],{"class":319},[97,105162,101596],{"class":103},[97,105164,101498],{"class":370},[97,105166,329],{"class":103},[97,105168,105169,105171,105173],{"class":99,"line":2782},[97,105170,101605],{"class":103},[97,105172,115],{"class":319},[97,105174,101610],{"class":103},[97,105176,105177],{"class":99,"line":2790},[97,105178,2591],{"emptyLinePlaceholder":249},[97,105180,105181,105184,105187],{"class":99,"line":2795},[97,105182,105183],{"class":103},"    print_state(",[97,105185,105186],{"class":118},"\"initial\"",[97,105188,105189],{"class":103},", model, data)\n",[97,105191,105192],{"class":99,"line":2801},[97,105193,2591],{"emptyLinePlaceholder":249},[97,105195,105196,105198,105200,105202,105204,105206,105208],{"class":99,"line":2807},[97,105197,3392],{"class":319},[97,105199,101685],{"class":103},[97,105201,26233],{"class":319},[97,105203,32633],{"class":370},[97,105205,323],{"class":103},[97,105207,976],{"class":370},[97,105209,30976],{"class":103},[97,105211,105212],{"class":99,"line":2812},[97,105213,101700],{"class":103},[97,105215,105216],{"class":99,"line":8139},[97,105217,2591],{"emptyLinePlaceholder":249},[97,105219,105220,105222,105225],{"class":99,"line":8163},[97,105221,105183],{"class":103},[97,105223,105224],{"class":118},"\"after 50 steps\"",[97,105226,105189],{"class":103},[97,105228,105229],{"class":99,"line":8168},[97,105230,2591],{"emptyLinePlaceholder":249},[97,105232,105233],{"class":99,"line":8174},[97,105234,105235],{"class":103},"    mujoco.mj_resetData(model, data)\n",[97,105237,105238,105240,105243],{"class":99,"line":8201},[97,105239,105183],{"class":103},[97,105241,105242],{"class":118},"\"after reset\"",[97,105244,105189],{"class":103},[97,105246,105247],{"class":99,"line":8206},[97,105248,2591],{"emptyLinePlaceholder":249},[97,105250,105251,105254,105256,105258,105260],{"class":99,"line":8212},[97,105252,105253],{"class":103},"    data.qpos[",[97,105255,398],{"class":370},[97,105257,4634],{"class":103},[97,105259,115],{"class":319},[97,105261,104892],{"class":370},[97,105263,105264],{"class":99,"line":8224},[97,105265,105266],{"class":103},"    mujoco.mj_forward(model, data)\n",[97,105268,105269,105271,105274],{"class":99,"line":8236},[97,105270,105183],{"class":103},[97,105272,105273],{"class":118},"\"after manual qpos edit\"",[97,105275,105189],{"class":103},[97,105277,105278],{"class":99,"line":8248},[97,105279,2591],{"emptyLinePlaceholder":249},[97,105281,105282],{"class":99,"line":9907},[97,105283,2591],{"emptyLinePlaceholder":249},[97,105285,105286,105288,105290,105292,105294],{"class":99,"line":9932},[97,105287,1723],{"class":319},[97,105289,31410],{"class":370},[97,105291,101743],{"class":319},[97,105293,101746],{"class":118},[97,105295,3930],{"class":103},[97,105297,105298],{"class":99,"line":9955},[97,105299,101753],{"class":103},[24,105301,103754],{},[87,105303,105305],{"className":24011,"code":105304,"language":24013,"meta":92,"style":92},"touch ch3_python_state.py\n",[94,105306,105307],{"__ignoreMap":92},[97,105308,105309,105311],{"class":99,"line":100},[97,105310,101467],{"class":111},[97,105312,105313],{"class":118}," ch3_python_state.py\n",[24,105315,102485],{},[87,105317,105319],{"className":24011,"code":105318,"language":24013,"meta":92,"style":92},"python ch3_python_state.py\n",[94,105320,105321],{"__ignoreMap":92},[97,105322,105323,105325],{"class":99,"line":100},[97,105324,30570],{"class":111},[97,105326,105313],{"class":118},[48,105328,101756],{"id":101756},[24,105330,105331],{},"打印状态的函数：",[87,105333,105335],{"className":30568,"code":105334,"language":30570,"meta":92,"style":92},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[94,105336,105337],{"__ignoreMap":92},[97,105338,105339,105341,105343,105345,105347,105349,105351],{"class":99,"line":100},[97,105340,32137],{"class":319},[97,105342,105060],{"class":111},[97,105344,105063],{"class":103},[97,105346,1492],{"class":370},[97,105348,105068],{"class":103},[97,105350,95870],{"class":370},[97,105352,3930],{"class":103},[24,105354,105355,105356,105358],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[94,105357,33591],{}," 里发生了什么。",[24,105360,105361],{},"推进 50 步：",[87,105363,105365],{"className":30568,"code":105364,"language":30570,"meta":92,"style":92},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[94,105366,105367,105383],{"__ignoreMap":92},[97,105368,105369,105371,105373,105375,105377,105379,105381],{"class":99,"line":100},[97,105370,3216],{"class":319},[97,105372,101685],{"class":103},[97,105374,26233],{"class":319},[97,105376,32633],{"class":370},[97,105378,323],{"class":103},[97,105380,976],{"class":370},[97,105382,30976],{"class":103},[97,105384,105385],{"class":99,"line":195},[97,105386,101883],{"class":103},[24,105388,105389,105390,105393,105394,105396],{},"由于 ",[94,105391,105392],{},"timestep=0.01","，所以 50 步后时间约为 ",[94,105395,35519],{}," 秒。",[24,105398,105399],{},"重置：",[87,105401,105402],{"className":30568,"code":104710,"language":30570,"meta":92,"style":92},[94,105403,105404],{"__ignoreMap":92},[97,105405,105406],{"class":99,"line":100},[97,105407,104710],{"class":103},[24,105409,105410],{},"这会把时间、位置、速度恢复到初始状态。",[24,105412,105413],{},"手动改高度：",[87,105415,105417],{"className":30568,"code":105416,"language":30570,"meta":92,"style":92},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[94,105418,105419,105431],{"__ignoreMap":92},[97,105420,105421,105423,105425,105427,105429],{"class":99,"line":100},[97,105422,104883],{"class":103},[97,105424,398],{"class":370},[97,105426,4634],{"class":103},[97,105428,115],{"class":319},[97,105430,104892],{"class":370},[97,105432,105433],{"class":99,"line":195},[97,105434,104727],{"class":103},[24,105436,105437,105438,105441,105442,105445],{},"这个例子里 ",[94,105439,105440],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[94,105443,105444],{},"2.0"," 表示把小球放到更高的位置。",[48,105447,101892],{"id":101892},[87,105449,105450],{"className":30568,"code":105334,"language":30570,"meta":92,"style":92},[94,105451,105452],{"__ignoreMap":92},[97,105453,105454,105456,105458,105460,105462,105464,105466],{"class":99,"line":100},[97,105455,32137],{"class":319},[97,105457,105060],{"class":111},[97,105459,105063],{"class":103},[97,105461,1492],{"class":370},[97,105463,105068],{"class":103},[97,105465,95870],{"class":370},[97,105467,3930],{"class":103},[24,105469,105470],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[138,105472,105473,105482,105487],{},[70,105474,105475,105478,105479,105481],{},[94,105476,105477],{},"prefix","：一段文字，比如 ",[94,105480,105186],{},"，用来说明现在打印的是哪个阶段。",[70,105483,105484,105486],{},[94,105485,102269],{},"：MuJoCo 模型。",[70,105488,105489,105491],{},[94,105490,33591],{},"：MuJoCo 当前状态。",[24,105493,105494,532,105497,105500],{},[94,105495,105496],{},"prefix: str",[94,105498,105499],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[87,105502,105504],{"className":30568,"code":105503,"language":30570,"meta":92,"style":92},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[94,105505,105506],{"__ignoreMap":92},[97,105507,105508,105510,105512,105514,105516,105518],{"class":99,"line":100},[97,105509,30605],{"class":370},[97,105511,323],{"class":103},[97,105513,105111],{"class":118},[97,105515,105114],{"class":103},[97,105517,613],{"class":370},[97,105519,30687],{"class":103},[24,105521,105522,105525],{},[94,105523,105524],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[87,105527,105529],{"className":30568,"code":105528,"language":30570,"meta":92,"style":92},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[94,105530,105531,105543],{"__ignoreMap":92},[97,105532,105533,105535,105537,105539,105541],{"class":99,"line":100},[97,105534,101818],{"class":103},[97,105536,115],{"class":319},[97,105538,101596],{"class":103},[97,105540,101498],{"class":370},[97,105542,329],{"class":103},[97,105544,105545,105547,105549],{"class":99,"line":195},[97,105546,101842],{"class":103},[97,105548,115],{"class":319},[97,105550,101610],{"class":103},[24,105552,105553],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[87,105555,105557],{"className":30568,"code":105556,"language":30570,"meta":92,"style":92},"print_state(\"initial\", model, data)\n",[94,105558,105559],{"__ignoreMap":92},[97,105560,105561,105564,105566],{"class":99,"line":100},[97,105562,105563],{"class":103},"print_state(",[97,105565,105186],{"class":118},[97,105567,105189],{"class":103},[24,105569,105570,105571,105574],{},"调用刚才定义的 ",[94,105572,105573],{},"print_state"," 函数，打印初始状态。",[87,105576,105577],{"className":30568,"code":105364,"language":30570,"meta":92,"style":92},[94,105578,105579,105595],{"__ignoreMap":92},[97,105580,105581,105583,105585,105587,105589,105591,105593],{"class":99,"line":100},[97,105582,3216],{"class":319},[97,105584,101685],{"class":103},[97,105586,26233],{"class":319},[97,105588,32633],{"class":370},[97,105590,323],{"class":103},[97,105592,976],{"class":370},[97,105594,30976],{"class":103},[97,105596,105597],{"class":99,"line":195},[97,105598,101883],{"class":103},[24,105600,105601],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[87,105603,105604],{"className":30568,"code":104710,"language":30570,"meta":92,"style":92},[94,105605,105606],{"__ignoreMap":92},[97,105607,105608],{"class":99,"line":100},[97,105609,104710],{"class":103},[24,105611,105612,105613,105615,105616,105618],{},"重置 ",[94,105614,33591],{},"。注意它不会重新创建 ",[94,105617,102269],{},"，因为模型结构没有变，只是状态回到初始值。",[87,105620,105621],{"className":30568,"code":104876,"language":30570,"meta":92,"style":92},[94,105622,105623],{"__ignoreMap":92},[97,105624,105625,105627,105629,105631,105633],{"class":99,"line":100},[97,105626,104883],{"class":103},[97,105628,398],{"class":370},[97,105630,4634],{"class":103},[97,105632,115],{"class":319},[97,105634,104892],{"class":370},[24,105636,105637,105638,532,105641,532,105644,105646],{},"这行是“手动改状态”。在 freejoint 中，",[94,105639,105640],{},"qpos[0]",[94,105642,105643],{},"qpos[1]",[94,105645,105440],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[87,105648,105649],{"className":30568,"code":104727,"language":30570,"meta":92,"style":92},[94,105650,105651],{"__ignoreMap":92},[97,105652,105653],{"class":99,"line":100},[97,105654,104727],{"class":103},[24,105656,105657,105658,105660,105661,105663],{},"手动改完 ",[94,105659,104214],{}," 后，调用 ",[94,105662,104434],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105665,102500],{"id":102499},[24,105667,105668],{},"你会看到:",[138,105670,105671,105676,105681,105684],{},[70,105672,105673,105674],{},"初始时间为 ",[94,105675,511],{},[70,105677,105678,105679],{},"50 步后时间约为 ",[94,105680,35519],{},[70,105682,105683],{},"reset 后状态恢复",[70,105685,105686,105687,105690,105691],{},"手动修改 ",[94,105688,105689],{},"data.qpos[2]"," 后，小球高度变为 ",[94,105692,105444],{},[24,105694,105695,105697],{},[94,105696,105440],{}," 在这个例子中表示自由刚体的 z 坐标。",[24,105699,105700],{},"输出里可以重点看三件事：",[138,105702,105703,105711,105716],{},[70,105704,105705,105707,105708,105710],{},[94,105706,2578],{}," 是否随着 ",[94,105709,101399],{}," 增加。",[70,105712,105713,105715],{},[94,105714,104214],{}," 的 z 坐标是否因为下落而变化。",[70,105717,105718,105720,105721,28575],{},[94,105719,104536],{}," 后时间是否回到 ",[94,105722,511],{},[14,105724,102532],{"id":102531},[138,105726,105727,105733,105739,105745,105748,105757],{},[70,105728,105729,105730,28575],{},"修改 timestep 为 ",[94,105731,105732],{},"0.005",[70,105734,105735,105736,28575],{},"重新运行，检查 50 步后时间是否约为 ",[94,105737,105738],{},"0.25",[70,105740,105741,105742,28575],{},"修改重力为 ",[94,105743,105744],{},"0 0 -1.0",[70,105746,105747],{},"观察小球下降速度是否变慢。",[70,105749,102595,105750,102598,105753,105756],{},[94,105751,105752],{},"data.qpos[2] = 2.0",[94,105754,105755],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[70,105758,105759,105760,105763],{},"注释掉 ",[94,105761,105762],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105765,102637],{"id":102636},[48,105767,105769,105770,105772],{"id":105768},"修改-dataqpos-后位置没有更新","修改 ",[94,105771,101254],{}," 后位置没有更新",[24,105774,102646],{},[87,105776,105777],{"className":30568,"code":104727,"language":30570,"meta":92,"style":92},[94,105778,105779],{"__ignoreMap":92},[97,105780,105781],{"class":99,"line":100},[97,105782,104727],{"class":103},[48,105784,105785],{"id":105785},"数组维度看不懂",[24,105787,105788],{},"打印模型维度:",[87,105790,105792],{"className":30568,"code":105791,"language":30570,"meta":92,"style":92},"print(model.nq, model.nv, model.nu)\n",[94,105793,105794],{"__ignoreMap":92},[97,105795,105796,105798],{"class":99,"line":100},[97,105797,30605],{"class":370},[97,105799,105800],{"class":103},"(model.nq, model.nv, model.nu)\n",[457,105802,105803,105811],{},[460,105804,105805],{},[463,105806,105807,105809],{},[466,105808,104758],{"align":23925},[466,105810,100884],{"align":23925},[504,105812,105813,105823,105833],{},[463,105814,105815,105820],{},[509,105816,105817],{"align":23925},[94,105818,105819],{},"nq",[509,105821,105822],{"align":23925},"位置变量数量",[463,105824,105825,105830],{},[509,105826,105827],{"align":23925},[94,105828,105829],{},"nv",[509,105831,105832],{"align":23925},"速度变量数量",[463,105834,105835,105839],{},[509,105836,105837],{"align":23925},[94,105838,102346],{},[509,105840,105841],{"align":23925},"控制输入数量",[48,105843,105845,105846,105848],{"id":105844},"误以为-qpos-一定等于关节数","误以为 ",[94,105847,104214],{}," 一定等于关节数",[24,105850,105851,105852,82714,105854,105856,105857,105859],{},"不是。例如 ",[94,105853,101804],{},[94,105855,104214],{}," 是 7 维，但 ",[94,105858,104544],{}," 是 6 维。",[48,105861,105863,105864,105866],{"id":105862},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[94,105865,104214],{}," 的第几位",[24,105868,105869],{},"初学时可以先打印：",[87,105871,105873],{"className":30568,"code":105872,"language":30570,"meta":92,"style":92},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[94,105874,105875,105885,105895,105907],{"__ignoreMap":92},[97,105876,105877,105879,105881,105883],{"class":99,"line":100},[97,105878,30605],{"class":370},[97,105880,323],{"class":103},[97,105882,101623],{"class":118},[97,105884,101626],{"class":103},[97,105886,105887,105889,105891,105893],{"class":99,"line":195},[97,105888,30605],{"class":370},[97,105890,323],{"class":103},[97,105892,101635],{"class":118},[97,105894,101638],{"class":103},[97,105896,105897,105899,105901,105904],{"class":99,"line":241},[97,105898,30605],{"class":370},[97,105900,323],{"class":103},[97,105902,105903],{"class":118},"\"qpos:\"",[97,105905,105906],{"class":103},", data.qpos)\n",[97,105908,105909,105911,105913,105916],{"class":99,"line":1387},[97,105910,30605],{"class":370},[97,105912,323],{"class":103},[97,105914,105915],{"class":118},"\"qvel:\"",[97,105917,105918],{"class":103},", data.qvel)\n",[24,105920,105921],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[48,105923,105924],{"id":105924},"仿真结果每次都一样",[24,105926,105927,105928,105930],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[94,105929,104214],{},"、目标点或控制输入。",[14,105932,102791],{"id":102790},[24,105934,105935,105936,24808],{},"Python 控制 MuJoCo 的核心就是读写 ",[94,105937,33591],{},[138,105939,105940,105948,105953,105958],{},[70,105941,105942,105943,101202,105945,105947],{},"用 ",[94,105944,101254],{},[94,105946,101257],{}," 读取状态。",[70,105949,105942,105950,105952],{},[94,105951,101260],{}," 写入控制。",[70,105954,105942,105955,105957],{},[94,105956,101399],{}," 推进时间。",[70,105959,105960,105961,105963],{},"手动改状态后用 ",[94,105962,104434],{}," 刷新派生量。",[24,105965,105966],{},"理解这一章后，就可以进入关节和 actuator 控制。",[231,105968,105969],{},"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":92,"searchDepth":195,"depth":195,"links":105971},[105972,105973,105974,105981,105985,105986,105987,105997],{"id":100830,"depth":195,"text":100831},{"id":100953,"depth":195,"text":100954},{"id":101228,"depth":195,"text":101229,"children":105975},[105976,105978,105980],{"id":104739,"depth":241,"text":105977},"qpos、qvel、ctrl 是什么",{"id":104817,"depth":241,"text":105979},"mj_step 和 mj_forward 的区别",{"id":104906,"depth":241,"text":104907},{"id":101436,"depth":195,"text":101437,"children":105982},[105983,105984],{"id":101756,"depth":241,"text":101756},{"id":101892,"depth":241,"text":101892},{"id":102499,"depth":195,"text":102500},{"id":102531,"depth":195,"text":102532},{"id":102636,"depth":195,"text":102637,"children":105988},[105989,105991,105992,105994,105996],{"id":105768,"depth":241,"text":105990},"修改 data.qpos 后位置没有更新",{"id":105785,"depth":241,"text":105785},{"id":105844,"depth":241,"text":105993},"误以为 qpos 一定等于关节数",{"id":105862,"depth":241,"text":105995},"不知道某个元素在 qpos 的第几位",{"id":105924,"depth":241,"text":105924},{"id":102790,"depth":195,"text":102791},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104502,"description":92},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106004,"title":106005,"body":106006,"description":92,"extension":247,"meta":107696,"navigation":249,"path":107697,"seo":107698,"stem":107699,"__hash__":107700},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106007,"toc":107672},[106008,106011,106013,106016,106018,106043,106046,106065,106068,106070,106072,106096,106098,106112,106114,106155,106157,106181,106183,106186,106220,106222,106235,106238,106306,106315,106319,106322,106356,106362,106365,106369,106408,106411,106431,106435,106478,106480,106509,106512,106518,106521,106523,106917,106919,106931,106933,106944,106946,106949,106978,106986,106989,107024,107027,107029,107037,107040,107042,107053,107063,107083,107086,107122,107134,107182,107201,107243,107256,107284,107289,107310,107320,107338,107341,107375,107378,107398,107401,107420,107426,107428,107431,107437,107443,107453,107456,107462,107471,107473,107519,107521,107527,107533,107536,107539,107559,107562,107568,107574,107576,107599,107602,107605,107614,107617,107655,107657,107660,107666,107669],[10,106009,106005],{"id":106010},"_4关节actuator-与力控制",[14,106012,100831],{"id":100830},[24,106014,106015],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[24,106017,104515],{},[138,106019,106020,106026,106031,106035,106040],{},[70,106021,106022,106025],{},[94,106023,106024],{},"hinge"," 关节",[70,106027,106028],{},[94,106029,106030],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[70,106032,106033],{},[94,106034,101260],{},[70,106036,106037],{},[94,106038,106039],{},"ctrlrange",[70,106041,106042],{},"读取关节角和角速度",[24,106044,106045],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[87,106047,106049],{"className":30568,"code":106048,"language":30570,"meta":92,"style":92},"data.ctrl[0] = ...\n",[94,106050,106051],{"__ignoreMap":92},[97,106052,106053,106056,106058,106060,106062],{"class":99,"line":100},[97,106054,106055],{"class":103},"data.ctrl[",[97,106057,511],{"class":370},[97,106059,4634],{"class":103},[97,106061,115],{"class":319},[97,106063,106064],{"class":370}," ...\n",[24,106066,106067],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106069,100954],{"id":100953},[24,106071,100957],{},[87,106073,106074],{"className":24011,"code":104572,"language":24013,"meta":92,"style":92},[94,106075,106076],{"__ignoreMap":92},[97,106077,106078,106080,106082,106084,106086,106088,106090,106092,106094],{"class":99,"line":100},[97,106079,24766],{"class":111},[97,106081,26505],{"class":118},[97,106083,24023],{"class":118},[97,106085,26590],{"class":370},[97,106087,104587],{"class":118},[97,106089,100982],{"class":118},[97,106091,102685],{"class":118},[97,106093,100998],{"class":118},[97,106095,104596],{"class":118},[24,106097,103003],{},[87,106099,106100],{"className":24011,"code":101103,"language":24013,"meta":92,"style":92},[94,106101,106102],{"__ignoreMap":92},[97,106103,106104,106106,106108,106110],{"class":99,"line":100},[97,106105,24020],{"class":111},[97,106107,24023],{"class":118},[97,106109,101114],{"class":118},[97,106111,101117],{"class":118},[24,106113,103020],{},[87,106115,106117],{"className":24011,"code":106116,"language":24013,"meta":92,"style":92},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[94,106118,106119,106136,106145],{"__ignoreMap":92},[97,106120,106121,106123,106125,106127,106130,106132,106134],{"class":99,"line":100},[97,106122,30520],{"class":111},[97,106124,29366],{"class":118},[97,106126,25305],{"class":370},[97,106128,106129],{"class":118}," mujoco-control",[97,106131,101159],{"class":118},[97,106133,101162],{"class":370},[97,106135,101165],{"class":370},[97,106137,106138,106140,106142],{"class":99,"line":195},[97,106139,30520],{"class":111},[97,106141,101172],{"class":118},[97,106143,106144],{"class":118}," mujoco-control\n",[97,106146,106147,106149,106151,106153],{"class":99,"line":241},[97,106148,24020],{"class":111},[97,106150,24023],{"class":118},[97,106152,101114],{"class":118},[97,106154,101117],{"class":118},[24,106156,101188],{},[138,106158,106159,106165,106172,106178],{},[70,106160,106161,106164],{},[94,106162,106163],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[70,106166,106167,106169,106170,28575],{},[94,106168,101260],{}," 长度等于 ",[94,106171,102342],{},[70,106173,82406,106174,106177],{},[94,106175,106176],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[70,106179,106180],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106182,101229],{"id":101228},[24,106184,106185],{},"关节决定 body 如何运动:",[87,106187,106189],{"className":53251,"code":106188,"language":53253,"meta":92,"style":92},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[94,106190,106191],{"__ignoreMap":92},[97,106192,106193,106195,106197,106199,106201,106204,106206,106208,106210,106213,106215,106218],{"class":99,"line":100},[97,106194,104],{"class":103},[97,106196,103140],{"class":107},[97,106198,112],{"class":111},[97,106200,115],{"class":103},[97,106202,106203],{"class":118},"\"hinge\"",[97,106205,54008],{"class":111},[97,106207,115],{"class":103},[97,106209,106203],{"class":118},[97,106211,106212],{"class":111}," axis",[97,106214,115],{"class":103},[97,106216,106217],{"class":118},"\"0 1 0\"",[97,106219,101328],{"class":103},[24,106221,103236],{},[138,106223,106224,106229,106232],{},[70,106225,106226,106227],{},"名字是 ",[94,106228,106024],{},[70,106230,106231],{},"类型是旋转关节",[70,106233,106234],{},"绕 y 轴旋转",[24,106236,106237],{},"actuator 决定如何施加控制:",[87,106239,106241],{"className":53251,"code":106240,"language":53253,"meta":92,"style":92},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[94,106242,106243,106252,106298],{"__ignoreMap":92},[97,106244,106245,106247,106250],{"class":99,"line":100},[97,106246,104],{"class":103},[97,106248,106249],{"class":107},"actuator",[97,106251,130],{"class":103},[97,106253,106254,106256,106259,106261,106263,106266,106269,106271,106273,106276,106278,106280,106283,106285,106288,106291,106293,106296],{"class":99,"line":195},[97,106255,52328],{"class":103},[97,106257,106258],{"class":107},"motor",[97,106260,112],{"class":111},[97,106262,115],{"class":103},[97,106264,106265],{"class":118},"\"hinge_motor\"",[97,106267,106268],{"class":111}," joint",[97,106270,115],{"class":103},[97,106272,106203],{"class":118},[97,106274,106275],{"class":111}," gear",[97,106277,115],{"class":103},[97,106279,3869],{"class":118},[97,106281,106282],{"class":111}," ctrlrange",[97,106284,115],{"class":103},[97,106286,106287],{"class":118},"\"-2 2\"",[97,106289,106290],{"class":111}," ctrllimited",[97,106292,115],{"class":103},[97,106294,106295],{"class":118},"\"true\"",[97,106297,101328],{"class":103},[97,106299,106300,106302,106304],{"class":99,"line":241},[97,106301,51969],{"class":103},[97,106303,106249],{"class":107},[97,106305,130],{"class":103},[24,106307,106308,106311,106312,28575],{},[94,106309,106310],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[94,106313,106314],{},"[-2, 2]",[48,106316,106318],{"id":106317},"joint-和-actuator-的关系","joint 和 actuator 的关系",[24,106320,106321],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[457,106323,106324,106334],{},[460,106325,106326],{},[463,106327,106328,106330,106332],{},[466,106329,25943],{"align":23925},[466,106331,102880],{"align":23925},[466,106333,100918],{"align":23925},[504,106335,106336,106346],{},[463,106337,106338,106340,106343],{},[509,106339,103140],{"align":23925},[509,106341,106342],{"align":23925},"定义能怎么动",[509,106344,106345],{"align":23925},"门轴允许门旋转",[463,106347,106348,106350,106353],{},[509,106349,106249],{"align":23925},[509,106351,106352],{"align":23925},"定义怎么施力或控制",[509,106354,106355],{"align":23925},"人推门、马达带动门",[24,106357,106358,106359,106361],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[94,106360,101260],{}," 主动控制它。",[24,106363,106364],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[48,106366,106368],{"id":106367},"hinge-joint","hinge joint",[87,106370,106372],{"className":53251,"code":106371,"language":53253,"meta":92,"style":92},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[94,106373,106374],{"__ignoreMap":92},[97,106375,106376,106378,106380,106382,106384,106386,106388,106390,106392,106394,106396,106398,106401,106403,106406],{"class":99,"line":100},[97,106377,104],{"class":103},[97,106379,103140],{"class":107},[97,106381,112],{"class":111},[97,106383,115],{"class":103},[97,106385,106203],{"class":118},[97,106387,54008],{"class":111},[97,106389,115],{"class":103},[97,106391,106203],{"class":118},[97,106393,106212],{"class":111},[97,106395,115],{"class":103},[97,106397,106217],{"class":118},[97,106399,106400],{"class":111}," damping",[97,106402,115],{"class":103},[97,106404,106405],{"class":118},"\"0.1\"",[97,106407,101328],{"class":103},[24,106409,106410],{},"含义：",[138,106412,106413,106419,106425],{},[70,106414,106415,106418],{},[94,106416,106417],{},"type=\"hinge\"","：只能绕一个轴旋转。",[70,106420,106421,106424],{},[94,106422,106423],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[70,106426,106427,106430],{},[94,106428,106429],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[48,106432,106434],{"id":106433},"motor-actuator","motor actuator",[87,106436,106438],{"className":53251,"code":106437,"language":53253,"meta":92,"style":92},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[94,106439,106440],{"__ignoreMap":92},[97,106441,106442,106444,106446,106448,106450,106452,106454,106456,106458,106460,106462,106464,106466,106468,106470,106472,106474,106476],{"class":99,"line":100},[97,106443,104],{"class":103},[97,106445,106258],{"class":107},[97,106447,112],{"class":111},[97,106449,115],{"class":103},[97,106451,106265],{"class":118},[97,106453,106268],{"class":111},[97,106455,115],{"class":103},[97,106457,106203],{"class":118},[97,106459,106275],{"class":111},[97,106461,115],{"class":103},[97,106463,3869],{"class":118},[97,106465,106282],{"class":111},[97,106467,115],{"class":103},[97,106469,106287],{"class":118},[97,106471,106290],{"class":111},[97,106473,115],{"class":103},[97,106475,106295],{"class":118},[97,106477,101328],{"class":103},[24,106479,106410],{},[138,106481,106482,106491,106497,106503],{},[70,106483,106484,106487,106488,106490],{},[94,106485,106486],{},"joint=\"hinge\"","：这个电机作用在名为 ",[94,106489,106024],{}," 的关节上。",[70,106492,106493,106496],{},[94,106494,106495],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[70,106498,106499,106502],{},[94,106500,106501],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[70,106504,106505,106508],{},[94,106506,106507],{},"ctrllimited=\"true\"","：启用控制范围限制。",[24,106510,106511],{},"简单理解：",[87,106513,106516],{"className":106514,"code":106515,"language":5378,"meta":92},[5376],"实际施加效果 ≈ data.ctrl[0] * gear\n",[94,106517,106515],{"__ignoreMap":92},[24,106519,106520],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106522,101437],{"id":101436},[87,106524,106526],{"className":30568,"code":106525,"language":30570,"meta":92,"style":92},"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",[94,106527,106528,106535,106539,106545,106555,106559,106563,106571,106576,106581,106585,106589,106594,106599,106603,106608,106613,106618,106623,106627,106631,106635,106640,106645,106650,106654,106658,106662,106666,106678,106690,106698,106702,106712,106722,106732,106736,106749,106762,106766,106783,106797,106832,106836,106840,106851,106866,106881,106893,106897,106901,106913],{"__ignoreMap":92},[97,106529,106530,106532],{"class":99,"line":100},[97,106531,30582],{"class":319},[97,106533,106534],{"class":103}," math\n",[97,106536,106537],{"class":99,"line":195},[97,106538,2591],{"emptyLinePlaceholder":249},[97,106540,106541,106543],{"class":99,"line":241},[97,106542,30582],{"class":319},[97,106544,101485],{"class":103},[97,106546,106547,106549,106551,106553],{"class":99,"line":1387},[97,106548,30582],{"class":319},[97,106550,31570],{"class":103},[97,106552,31573],{"class":319},[97,106554,31576],{"class":103},[97,106556,106557],{"class":99,"line":1393},[97,106558,2591],{"emptyLinePlaceholder":249},[97,106560,106561],{"class":99,"line":1407},[97,106562,2591],{"emptyLinePlaceholder":249},[97,106564,106565,106567,106569],{"class":99,"line":1413},[97,106566,101498],{"class":370},[97,106568,13755],{"class":319},[97,106570,101503],{"class":118},[97,106572,106573],{"class":99,"line":1504},[97,106574,106575],{"class":118},"\u003Cmujoco model=\"one_link_motor\">\n",[97,106577,106578],{"class":99,"line":1510},[97,106579,106580],{"class":118},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[97,106582,106583],{"class":99,"line":1522},[97,106584,2591],{"emptyLinePlaceholder":249},[97,106586,106587],{"class":99,"line":1804},[97,106588,101522],{"class":118},[97,106590,106591],{"class":99,"line":1809},[97,106592,106593],{"class":118},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[97,106595,106596],{"class":99,"line":1815},[97,106597,106598],{"class":118},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[97,106600,106601],{"class":99,"line":1820},[97,106602,2591],{"emptyLinePlaceholder":249},[97,106604,106605],{"class":99,"line":1834},[97,106606,106607],{"class":118},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[97,106609,106610],{"class":99,"line":1839},[97,106611,106612],{"class":118},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[97,106614,106615],{"class":99,"line":1845},[97,106616,106617],{"class":118},"        \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",[97,106619,106620],{"class":99,"line":1866},[97,106621,106622],{"class":118},"      \u003C\u002Fbody>\n",[97,106624,106625],{"class":99,"line":1871},[97,106626,101551],{"class":118},[97,106628,106629],{"class":99,"line":1885},[97,106630,101556],{"class":118},[97,106632,106633],{"class":99,"line":1890},[97,106634,2591],{"emptyLinePlaceholder":249},[97,106636,106637],{"class":99,"line":1919},[97,106638,106639],{"class":118},"  \u003Cactuator>\n",[97,106641,106642],{"class":99,"line":1924},[97,106643,106644],{"class":118},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[97,106646,106647],{"class":99,"line":1941},[97,106648,106649],{"class":118},"  \u003C\u002Factuator>\n",[97,106651,106652],{"class":99,"line":1946},[97,106653,101561],{"class":118},[97,106655,106656],{"class":99,"line":1951},[97,106657,95882],{"class":118},[97,106659,106660],{"class":99,"line":1956},[97,106661,2591],{"emptyLinePlaceholder":249},[97,106663,106664],{"class":99,"line":1970},[97,106665,2591],{"emptyLinePlaceholder":249},[97,106667,106668,106670,106672,106674,106676],{"class":99,"line":1975},[97,106669,32137],{"class":319},[97,106671,2164],{"class":111},[97,106673,101582],{"class":103},[97,106675,95870],{"class":370},[97,106677,3930],{"class":103},[97,106679,106680,106682,106684,106686,106688],{"class":99,"line":2768},[97,106681,101591],{"class":103},[97,106683,115],{"class":319},[97,106685,101596],{"class":103},[97,106687,101498],{"class":370},[97,106689,329],{"class":103},[97,106691,106692,106694,106696],{"class":99,"line":2782},[97,106693,101605],{"class":103},[97,106695,115],{"class":319},[97,106697,101610],{"class":103},[97,106699,106700],{"class":99,"line":2790},[97,106701,2591],{"emptyLinePlaceholder":249},[97,106703,106704,106706,106708,106710],{"class":99,"line":2795},[97,106705,31489],{"class":370},[97,106707,323],{"class":103},[97,106709,101623],{"class":118},[97,106711,101626],{"class":103},[97,106713,106714,106716,106718,106720],{"class":99,"line":2801},[97,106715,31489],{"class":370},[97,106717,323],{"class":103},[97,106719,101635],{"class":118},[97,106721,101638],{"class":103},[97,106723,106724,106726,106728,106730],{"class":99,"line":2807},[97,106725,31489],{"class":370},[97,106727,323],{"class":103},[97,106729,101647],{"class":118},[97,106731,101650],{"class":103},[97,106733,106734],{"class":99,"line":2812},[97,106735,2591],{"emptyLinePlaceholder":249},[97,106737,106738,106740,106743,106745,106747],{"class":99,"line":8139},[97,106739,3292],{"class":319},[97,106741,106742],{"class":103}," model.nu ",[97,106744,21138],{"class":319},[97,106746,25308],{"class":370},[97,106748,3930],{"class":103},[97,106750,106751,106753,106755,106757,106760],{"class":99,"line":8163},[97,106752,103616],{"class":319},[97,106754,103619],{"class":370},[97,106756,323],{"class":103},[97,106758,106759],{"class":118},"\"expected exactly one actuator\"",[97,106761,329],{"class":103},[97,106763,106764],{"class":99,"line":8168},[97,106765,2591],{"emptyLinePlaceholder":249},[97,106767,106768,106770,106772,106774,106776,106778,106781],{"class":99,"line":8174},[97,106769,3392],{"class":319},[97,106771,31806],{"class":103},[97,106773,26233],{"class":319},[97,106775,32633],{"class":370},[97,106777,323],{"class":103},[97,106779,106780],{"class":370},"2000",[97,106782,30976],{"class":103},[97,106784,106785,106788,106790,106792,106794],{"class":99,"line":8201},[97,106786,106787],{"class":103},"        t ",[97,106789,115],{"class":319},[97,106791,31806],{"class":103},[97,106793,775],{"class":319},[97,106795,106796],{"class":103}," model.opt.timestep\n",[97,106798,106799,106802,106804,106806,106808,106811,106813,106816,106818,106820,106823,106825,106827,106829],{"class":99,"line":8206},[97,106800,106801],{"class":103},"        data.ctrl[",[97,106803,511],{"class":370},[97,106805,4634],{"class":103},[97,106807,115],{"class":319},[97,106809,106810],{"class":370}," 1.5",[97,106812,6709],{"class":319},[97,106814,106815],{"class":103}," math.sin(",[97,106817,105444],{"class":370},[97,106819,6709],{"class":319},[97,106821,106822],{"class":103}," math.pi ",[97,106824,775],{"class":319},[97,106826,62051],{"class":370},[97,106828,6709],{"class":319},[97,106830,106831],{"class":103}," t)\n",[97,106833,106834],{"class":99,"line":8212},[97,106835,101700],{"class":103},[97,106837,106838],{"class":99,"line":8224},[97,106839,2591],{"emptyLinePlaceholder":249},[97,106841,106842,106844,106846,106849],{"class":99,"line":8236},[97,106843,31489],{"class":370},[97,106845,323],{"class":103},[97,106847,106848],{"class":118},"\"time:\"",[97,106850,101662],{"class":103},[97,106852,106853,106855,106857,106860,106862,106864],{"class":99,"line":8248},[97,106854,31489],{"class":370},[97,106856,323],{"class":103},[97,106858,106859],{"class":118},"\"joint qpos:\"",[97,106861,105114],{"class":103},[97,106863,613],{"class":370},[97,106865,30687],{"class":103},[97,106867,106868,106870,106872,106875,106877,106879],{"class":99,"line":9907},[97,106869,31489],{"class":370},[97,106871,323],{"class":103},[97,106873,106874],{"class":118},"\"joint qvel:\"",[97,106876,105130],{"class":103},[97,106878,613],{"class":370},[97,106880,30687],{"class":103},[97,106882,106883,106885,106887,106890],{"class":99,"line":9932},[97,106884,31489],{"class":370},[97,106886,323],{"class":103},[97,106888,106889],{"class":118},"\"last ctrl:\"",[97,106891,106892],{"class":103},", data.ctrl.copy())\n",[97,106894,106895],{"class":99,"line":9955},[97,106896,2591],{"emptyLinePlaceholder":249},[97,106898,106899],{"class":99,"line":9979},[97,106900,2591],{"emptyLinePlaceholder":249},[97,106902,106903,106905,106907,106909,106911],{"class":99,"line":9984},[97,106904,1723],{"class":319},[97,106906,31410],{"class":370},[97,106908,101743],{"class":319},[97,106910,101746],{"class":118},[97,106912,3930],{"class":103},[97,106914,106915],{"class":99,"line":9989},[97,106916,101753],{"class":103},[24,106918,103754],{},[87,106920,106922],{"className":24011,"code":106921,"language":24013,"meta":92,"style":92},"touch ch4_joint_motor.py\n",[94,106923,106924],{"__ignoreMap":92},[97,106925,106926,106928],{"class":99,"line":100},[97,106927,101467],{"class":111},[97,106929,106930],{"class":118}," ch4_joint_motor.py\n",[24,106932,102485],{},[87,106934,106936],{"className":24011,"code":106935,"language":24013,"meta":92,"style":92},"python ch4_joint_motor.py\n",[94,106937,106938],{"__ignoreMap":92},[97,106939,106940,106942],{"class":99,"line":100},[97,106941,30570],{"class":111},[97,106943,106930],{"class":118},[48,106945,101756],{"id":101756},[24,106947,106948],{},"检查 actuator 数量：",[87,106950,106952],{"className":30568,"code":106951,"language":30570,"meta":92,"style":92},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[94,106953,106954,106966],{"__ignoreMap":92},[97,106955,106956,106958,106960,106962,106964],{"class":99,"line":100},[97,106957,1723],{"class":319},[97,106959,106742],{"class":103},[97,106961,21138],{"class":319},[97,106963,25308],{"class":370},[97,106965,3930],{"class":103},[97,106967,106968,106970,106972,106974,106976],{"class":99,"line":195},[97,106969,104079],{"class":319},[97,106971,103619],{"class":370},[97,106973,323],{"class":103},[97,106975,106759],{"class":118},[97,106977,329],{"class":103},[24,106979,106980,106982,106983,106985],{},[94,106981,102342],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[94,106984,101260],{}," 长度应该是 1。",[24,106987,106988],{},"产生正弦控制信号：",[87,106990,106992],{"className":30568,"code":106991,"language":30570,"meta":92,"style":92},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[94,106993,106994],{"__ignoreMap":92},[97,106995,106996,106998,107000,107002,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022],{"class":99,"line":100},[97,106997,106055],{"class":103},[97,106999,511],{"class":370},[97,107001,4634],{"class":103},[97,107003,115],{"class":319},[97,107005,106810],{"class":370},[97,107007,6709],{"class":319},[97,107009,106815],{"class":103},[97,107011,105444],{"class":370},[97,107013,6709],{"class":319},[97,107015,106822],{"class":103},[97,107017,775],{"class":319},[97,107019,62051],{"class":370},[97,107021,6709],{"class":319},[97,107023,106831],{"class":103},[24,107025,107026],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[24,107028,101857],{},[87,107030,107031],{"className":30568,"code":104689,"language":30570,"meta":92,"style":92},[94,107032,107033],{"__ignoreMap":92},[97,107034,107035],{"class":99,"line":100},[97,107036,104689],{"class":103},[24,107038,107039],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[48,107041,101892],{"id":101892},[87,107043,107045],{"className":30568,"code":107044,"language":30570,"meta":92,"style":92},"import math\n",[94,107046,107047],{"__ignoreMap":92},[97,107048,107049,107051],{"class":99,"line":100},[97,107050,30582],{"class":319},[97,107052,106534],{"class":103},[24,107054,107055,107056,101202,107059,107062],{},"导入 Python 标准库里的数学模块。后面要用 ",[94,107057,107058],{},"math.sin",[94,107060,107061],{},"math.pi"," 生成周期变化的控制信号。",[87,107064,107065],{"className":30568,"code":103870,"language":30570,"meta":92,"style":92},[94,107066,107067,107073],{"__ignoreMap":92},[97,107068,107069,107071],{"class":99,"line":100},[97,107070,30582],{"class":319},[97,107072,101485],{"class":103},[97,107074,107075,107077,107079,107081],{"class":99,"line":195},[97,107076,30582],{"class":319},[97,107078,31570],{"class":103},[97,107080,31573],{"class":319},[97,107082,31576],{"class":103},[24,107084,107085],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[87,107087,107088],{"className":53251,"code":106371,"language":53253,"meta":92,"style":92},[94,107089,107090],{"__ignoreMap":92},[97,107091,107092,107094,107096,107098,107100,107102,107104,107106,107108,107110,107112,107114,107116,107118,107120],{"class":99,"line":100},[97,107093,104],{"class":103},[97,107095,103140],{"class":107},[97,107097,112],{"class":111},[97,107099,115],{"class":103},[97,107101,106203],{"class":118},[97,107103,54008],{"class":111},[97,107105,115],{"class":103},[97,107107,106203],{"class":118},[97,107109,106212],{"class":111},[97,107111,115],{"class":103},[97,107113,106217],{"class":118},[97,107115,106400],{"class":111},[97,107117,115],{"class":103},[97,107119,106405],{"class":118},[97,107121,101328],{"class":103},[24,107123,107124,107125,107127,107128,107130,107131,107133],{},"这行定义关节。",[94,107126,106024],{}," 表示旋转关节。",[94,107129,106423],{}," 表示绕 y 轴旋转。",[94,107132,106429],{}," 表示有一点阻尼，运动不会完全无损耗。",[87,107135,107137],{"className":53251,"code":107136,"language":53253,"meta":92,"style":92},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[94,107138,107139],{"__ignoreMap":92},[97,107140,107141,107143,107145,107147,107149,107152,107154,107156,107159,107162,107164,107167,107169,107171,107173,107175,107177,107180],{"class":99,"line":100},[97,107142,104],{"class":103},[97,107144,101304],{"class":107},[97,107146,112],{"class":111},[97,107148,115],{"class":103},[97,107150,107151],{"class":118},"\"link_geom\"",[97,107153,54008],{"class":111},[97,107155,115],{"class":103},[97,107157,107158],{"class":118},"\"capsule\"",[97,107160,107161],{"class":111}," fromto",[97,107163,115],{"class":103},[97,107165,107166],{"class":118},"\"0 0 0 0 0 0.5\"",[97,107168,101320],{"class":111},[97,107170,115],{"class":103},[97,107172,103962],{"class":118},[97,107174,102185],{"class":111},[97,107176,115],{"class":103},[97,107178,107179],{"class":118},"\"0.5\"",[97,107181,101328],{"class":103},[24,107183,107184,107185,107187,107188,107190,107191,107194,107195,28575,107198,107200],{},"这行定义摆杆的形状。",[94,107186,103349],{}," 是胶囊体，适合表示杆子。",[94,107189,103360],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[94,107192,107193],{},"(0,0,0)"," 延伸到 ",[94,107196,107197],{},"(0,0,0.5)",[94,107199,103354],{}," 是半径。",[87,107202,107203],{"className":53251,"code":106437,"language":53253,"meta":92,"style":92},[94,107204,107205],{"__ignoreMap":92},[97,107206,107207,107209,107211,107213,107215,107217,107219,107221,107223,107225,107227,107229,107231,107233,107235,107237,107239,107241],{"class":99,"line":100},[97,107208,104],{"class":103},[97,107210,106258],{"class":107},[97,107212,112],{"class":111},[97,107214,115],{"class":103},[97,107216,106265],{"class":118},[97,107218,106268],{"class":111},[97,107220,115],{"class":103},[97,107222,106203],{"class":118},[97,107224,106275],{"class":111},[97,107226,115],{"class":103},[97,107228,3869],{"class":118},[97,107230,106282],{"class":111},[97,107232,115],{"class":103},[97,107234,106287],{"class":118},[97,107236,106290],{"class":111},[97,107238,115],{"class":103},[97,107240,106295],{"class":118},[97,107242,101328],{"class":103},[24,107244,107245,107246,107248,107249,107252,107253,107255],{},"这行定义电机。它作用在 ",[94,107247,106024],{}," 关节上。",[94,107250,107251],{},"gear"," 可以理解成放大倍数。",[94,107254,106039],{}," 限制控制输入范围。",[87,107257,107258],{"className":30568,"code":106951,"language":30570,"meta":92,"style":92},[94,107259,107260,107272],{"__ignoreMap":92},[97,107261,107262,107264,107266,107268,107270],{"class":99,"line":100},[97,107263,1723],{"class":319},[97,107265,106742],{"class":103},[97,107267,21138],{"class":319},[97,107269,25308],{"class":370},[97,107271,3930],{"class":103},[97,107273,107274,107276,107278,107280,107282],{"class":99,"line":195},[97,107275,104079],{"class":319},[97,107277,103619],{"class":370},[97,107279,323],{"class":103},[97,107281,106759],{"class":118},[97,107283,329],{"class":103},[24,107285,107286,107288],{},[94,107287,102342],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[87,107290,107292],{"className":30568,"code":107291,"language":30570,"meta":92,"style":92},"for step in range(2000):\n",[94,107293,107294],{"__ignoreMap":92},[97,107295,107296,107298,107300,107302,107304,107306,107308],{"class":99,"line":100},[97,107297,3216],{"class":319},[97,107299,31806],{"class":103},[97,107301,26233],{"class":319},[97,107303,32633],{"class":370},[97,107305,323],{"class":103},[97,107307,106780],{"class":370},[97,107309,30976],{"class":103},[24,107311,107312,107313,107315,107316,107319],{},"循环 2000 步。这里没有用 ",[94,107314,1311],{},"，而是用 ",[94,107317,107318],{},"step","，因为后面要用当前步数计算时间。",[87,107321,107323],{"className":30568,"code":107322,"language":30570,"meta":92,"style":92},"t = step * model.opt.timestep\n",[94,107324,107325],{"__ignoreMap":92},[97,107326,107327,107330,107332,107334,107336],{"class":99,"line":100},[97,107328,107329],{"class":103},"t ",[97,107331,115],{"class":319},[97,107333,31806],{"class":103},[97,107335,775],{"class":319},[97,107337,106796],{"class":103},[24,107339,107340],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[87,107342,107343],{"className":30568,"code":106991,"language":30570,"meta":92,"style":92},[94,107344,107345],{"__ignoreMap":92},[97,107346,107347,107349,107351,107353,107355,107357,107359,107361,107363,107365,107367,107369,107371,107373],{"class":99,"line":100},[97,107348,106055],{"class":103},[97,107350,511],{"class":370},[97,107352,4634],{"class":103},[97,107354,115],{"class":319},[97,107356,106810],{"class":370},[97,107358,6709],{"class":319},[97,107360,106815],{"class":103},[97,107362,105444],{"class":370},[97,107364,6709],{"class":319},[97,107366,106822],{"class":103},[97,107368,775],{"class":319},[97,107370,62051],{"class":370},[97,107372,6709],{"class":319},[97,107374,106831],{"class":103},[24,107376,107377],{},"这行给电机输入一个正弦波。拆开看：",[138,107379,107380,107386,107392],{},[70,107381,107382,107385],{},[94,107383,107384],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[70,107387,107388,107391],{},[94,107389,107390],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[70,107393,107394,107397],{},[94,107395,107396],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[24,107399,107400],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[87,107402,107404],{"className":30568,"code":107403,"language":30570,"meta":92,"style":92},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[94,107405,107406],{"__ignoreMap":92},[97,107407,107408,107410,107412,107414,107416,107418],{"class":99,"line":100},[97,107409,30605],{"class":370},[97,107411,323],{"class":103},[97,107413,106859],{"class":118},[97,107415,105114],{"class":103},[97,107417,613],{"class":370},[97,107419,30687],{"class":103},[24,107421,107422,107423,107425],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[94,107424,101254],{}," 只有一个数。",[14,107427,102500],{"id":102499},[24,107429,107430],{},"输出类似:",[87,107432,107435],{"className":107433,"code":107434,"language":5378,"meta":92},[5376],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[94,107436,107434],{"__ignoreMap":92},[24,107438,107439,107440,107442],{},"这里 ",[94,107441,106310],{}," 是电机输入。",[24,107444,107445,107448,107449,107452],{},[94,107446,107447],{},"joint qpos"," 是关节角度，单位通常是弧度。",[94,107450,107451],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[24,107454,107455],{},"角度单位提示：",[87,107457,107460],{"className":107458,"code":107459,"language":5378,"meta":92},[5376],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[94,107461,107459],{"__ignoreMap":92},[24,107463,107464,107465,107467,107468,107470],{},"如果你看到 ",[94,107466,104214],{}," 是 ",[94,107469,35519],{},"，大约就是 28.6 度。",[14,107472,102532],{"id":102531},[138,107474,107475,107482,107485,107492,107495,107503,107511],{},[70,107476,102595,107477,102598,107479,28575],{},[94,107478,106495],{},[94,107480,107481],{},"gear=\"5\"",[70,107483,107484],{},"重新运行，观察关节运动是否更剧烈。",[70,107486,102595,107487,102598,107489,28575],{},[94,107488,106039],{},[94,107490,107491],{},"-0.2 0.2",[70,107493,107494],{},"重新运行，观察控制能力是否变弱。",[70,107496,107497,107498,107500,107501,28575],{},"去掉 actuator，确认 ",[94,107499,102342],{}," 变成 ",[94,107502,511],{},[70,107504,102595,107505,102598,107507,107510],{},[94,107506,106429],{},[94,107508,107509],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[70,107512,102595,107513,102598,107515,107518],{},[94,107514,106423],{},[94,107516,107517],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107520,102637],{"id":102636},[48,107522,107524],{"id":107523},"indexerror-index-0-is-out-of-bounds",[94,107525,107526],{},"IndexError: index 0 is out of bounds",[24,107528,107529,107530,107532],{},"原因是 ",[94,107531,106176],{},"，没有 actuator。",[48,107534,107535],{"id":107535},"关节几乎不动",[24,107537,107538],{},"可能原因:",[138,107540,107541,107546,107550,107556],{},[70,107542,107543,107545],{},[94,107544,107251],{}," 太小",[70,107547,107548,107545],{},[94,107549,106039],{},[70,107551,107552,107555],{},[94,107553,107554],{},"damping"," 太大",[70,107557,107558],{},"重力方向导致运动不明显",[48,107560,107561],{"id":107561},"模型编译失败",[24,107563,107564,107565,107567],{},"检查 actuator 引用的 ",[94,107566,106486],{}," 是否存在，joint 名称是否拼写一致。",[48,107569,107571,107573],{"id":107570},"datactrl0-写了但没有效果",[94,107572,106310],{}," 写了但没有效果",[24,107575,102759],{},[138,107577,107578,107583,107586,107591,107596],{},[70,107579,107580,107582],{},[94,107581,102342],{}," 是否大于 0。",[70,107584,107585],{},"motor 是否引用了正确 joint。",[70,107587,107588,107590],{},[94,107589,107251],{}," 是否太小。",[70,107592,107593,107595],{},[94,107594,106039],{}," 是否把输入限制得太小。",[70,107597,107598],{},"body 是否真的有可动 joint。",[48,107600,107601],{"id":107601},"控制输入超过范围会怎样",[24,107603,107604],{},"如果设置了：",[87,107606,107608],{"className":53251,"code":107607,"language":53253,"meta":92,"style":92},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[94,107609,107610],{"__ignoreMap":92},[97,107611,107612],{"class":99,"line":100},[97,107613,107607],{"class":103},[24,107615,107616],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[87,107618,107620],{"className":30568,"code":107619,"language":30570,"meta":92,"style":92},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[94,107621,107622,107642],{"__ignoreMap":92},[97,107623,107624,107627,107629,107632,107634,107636,107638,107640],{"class":99,"line":100},[97,107625,107626],{"class":103},"action ",[97,107628,115],{"class":319},[97,107630,107631],{"class":103}," np.clip(action, ",[97,107633,852],{"class":319},[97,107635,105444],{"class":370},[97,107637,12626],{"class":103},[97,107639,105444],{"class":370},[97,107641,329],{"class":103},[97,107643,107644,107646,107648,107650,107652],{"class":99,"line":195},[97,107645,106055],{"class":103},[97,107647,511],{"class":370},[97,107649,4634],{"class":103},[97,107651,115],{"class":319},[97,107653,107654],{"class":103}," action\n",[14,107656,102791],{"id":102790},[24,107658,107659],{},"这一章建立了控制任务的基本形式：",[87,107661,107664],{"className":107662,"code":107663,"language":5378,"meta":92},[5376],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[94,107665,107663],{"__ignoreMap":92},[24,107667,107668],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[231,107670,107671],{},"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":92,"searchDepth":195,"depth":195,"links":107673},[107674,107675,107676,107681,107685,107686,107687,107695],{"id":100830,"depth":195,"text":100831},{"id":100953,"depth":195,"text":100954},{"id":101228,"depth":195,"text":101229,"children":107677},[107678,107679,107680],{"id":106317,"depth":241,"text":106318},{"id":106367,"depth":241,"text":106368},{"id":106433,"depth":241,"text":106434},{"id":101436,"depth":195,"text":101437,"children":107682},[107683,107684],{"id":101756,"depth":241,"text":101756},{"id":101892,"depth":241,"text":101892},{"id":102499,"depth":195,"text":102500},{"id":102531,"depth":195,"text":102532},{"id":102636,"depth":195,"text":102637,"children":107688},[107689,107690,107691,107692,107694],{"id":107523,"depth":241,"text":107526},{"id":107535,"depth":241,"text":107535},{"id":107561,"depth":241,"text":107561},{"id":107570,"depth":241,"text":107693},"data.ctrl[0] 写了但没有效果",{"id":107601,"depth":241,"text":107601},{"id":102790,"depth":195,"text":102791},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106005,"description":92},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107702,"title":107703,"body":107704,"description":92,"extension":247,"meta":109613,"navigation":249,"path":109614,"seo":109615,"stem":109616,"__hash__":109617},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107705,"toc":109589},[107706,107709,107711,107714,107722,107725,107742,107745,107770,107773,107819,107821,107823,107878,107880,107899,107901,107944,107947,107964,107967,107983,107993,108000,108002,108005,108008,108042,108045,108093,108097,108100,108114,108123,108127,108130,108155,108158,108162,108175,108178,108184,108187,108202,108204,108207,108467,108469,108481,108484,108796,108798,108810,108812,108815,108830,108835,108838,108860,108863,108866,108900,108903,108907,108918,108921,108938,108941,108955,108962,108982,108989,109003,109006,109018,109033,109053,109056,109078,109081,109085,109100,109111,109126,109129,109159,109175,109204,109212,109236,109239,109257,109267,109279,109286,109295,109301,109310,109313,109315,109324,109327,109342,109344,109347,109358,109361,109372,109375,109393,109395,109412,109415,109443,109445,109449,109452,109482,109488,109491,109495,109503,109506,109508,109529,109532,109535,109551,109554,109570,109572,109575,109586],[10,107707,107703],{"id":107708},"_5viewer-可视化与-renderer-离屏渲染",[14,107710,100831],{"id":100830},[24,107712,107713],{},"本章掌握两类可视化方式:",[138,107715,107716,107719],{},[70,107717,107718],{},"交互式 viewer: 适合人工观察仿真",[70,107720,107721],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[24,107723,107724],{},"使用官方接口:",[87,107726,107728],{"className":30568,"code":107727,"language":30570,"meta":92,"style":92},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[94,107729,107730,107737],{"__ignoreMap":92},[97,107731,107732,107734],{"class":99,"line":100},[97,107733,30582],{"class":319},[97,107735,107736],{"class":103}," mujoco.viewer\n",[97,107738,107739],{"class":99,"line":195},[97,107740,107741],{"class":103},"mujoco.viewer.launch_passive(model, data)\n",[24,107743,107744],{},"以及:",[87,107746,107748],{"className":30568,"code":107747,"language":30570,"meta":92,"style":92},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[94,107749,107750,107760],{"__ignoreMap":92},[97,107751,107752,107755,107757],{"class":99,"line":100},[97,107753,107754],{"class":103},"renderer ",[97,107756,115],{"class":319},[97,107758,107759],{"class":103}," mujoco.Renderer(model)\n",[97,107761,107762,107765,107767],{"class":99,"line":195},[97,107763,107764],{"class":103},"image ",[97,107766,115],{"class":319},[97,107768,107769],{"class":103}," renderer.render()\n",[24,107771,107772],{},"新手建议先理解二者区别：",[457,107774,107775,107791],{},[460,107776,107777],{},[463,107778,107779,107782,107785,107788],{},[466,107780,107781],{"align":23925},"工具",[466,107783,107784],{"align":23925},"用途",[466,107786,107787],{"align":23925},"是否打开窗口",[466,107789,107790],{"align":23925},"常见场景",[504,107792,107793,107806],{},[463,107794,107795,107798,107801,107803],{},[509,107796,107797],{"align":23925},"Viewer",[509,107799,107800],{"align":23925},"人眼实时观察仿真",[509,107802,104849],{"align":23925},[509,107804,107805],{"align":23925},"调试模型、看控制效果",[463,107807,107808,107811,107814,107816],{},[509,107809,107810],{"align":23925},"Renderer",[509,107812,107813],{"align":23925},"生成图像数组",[509,107815,104862],{"align":23925},[509,107817,107818],{"align":23925},"保存图片、训练视觉策略、服务器批量采集",[14,107820,100954],{"id":100953},[24,107822,100957],{},[87,107824,107826],{"className":24011,"code":107825,"language":24013,"meta":92,"style":92},"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",[94,107827,107828,107840,107850,107858,107866],{"__ignoreMap":92},[97,107829,107830,107832,107834,107836,107838],{"class":99,"line":100},[97,107831,24766],{"class":111},[97,107833,26505],{"class":118},[97,107835,24023],{"class":118},[97,107837,26590],{"class":370},[97,107839,24868],{"class":370},[97,107841,107842,107844,107846,107848],{"class":99,"line":195},[97,107843,100992],{"class":118},[97,107845,100995],{"class":118},[97,107847,100998],{"class":118},[97,107849,24868],{"class":370},[97,107851,107852,107854,107856],{"class":99,"line":241},[97,107853,101005],{"class":118},[97,107855,101008],{"class":118},[97,107857,24868],{"class":370},[97,107859,107860,107862,107864],{"class":99,"line":1387},[97,107861,101015],{"class":118},[97,107863,101018],{"class":118},[97,107865,24868],{"class":370},[97,107867,107868,107870,107872,107874,107876],{"class":99,"line":1393},[97,107869,101025],{"class":118},[97,107871,101028],{"class":118},[97,107873,101031],{"class":118},[97,107875,101034],{"class":118},[97,107877,102700],{"class":118},[24,107879,103003],{},[87,107881,107883],{"className":24011,"code":107882,"language":24013,"meta":92,"style":92},"pip install \"mujoco>=2.3\" numpy pillow\n",[94,107884,107885],{"__ignoreMap":92},[97,107886,107887,107889,107891,107893,107896],{"class":99,"line":100},[97,107888,24020],{"class":111},[97,107890,24023],{"class":118},[97,107892,101114],{"class":118},[97,107894,107895],{"class":118}," numpy",[97,107897,107898],{"class":118}," pillow\n",[24,107900,103020],{},[87,107902,107904],{"className":24011,"code":107903,"language":24013,"meta":92,"style":92},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[94,107905,107906,107923,107932],{"__ignoreMap":92},[97,107907,107908,107910,107912,107914,107917,107919,107921],{"class":99,"line":100},[97,107909,30520],{"class":111},[97,107911,29366],{"class":118},[97,107913,25305],{"class":370},[97,107915,107916],{"class":118}," mujoco-render",[97,107918,101159],{"class":118},[97,107920,101162],{"class":370},[97,107922,101165],{"class":370},[97,107924,107925,107927,107929],{"class":99,"line":195},[97,107926,30520],{"class":111},[97,107928,101172],{"class":118},[97,107930,107931],{"class":118}," mujoco-render\n",[97,107933,107934,107936,107938,107940,107942],{"class":99,"line":241},[97,107935,24020],{"class":111},[97,107937,24023],{"class":118},[97,107939,101114],{"class":118},[97,107941,107895],{"class":118},[97,107943,107898],{"class":118},[24,107945,107946],{},"离屏渲染后端:",[87,107948,107950],{"className":24011,"code":107949,"language":24013,"meta":92,"style":92},"export MUJOCO_GL=egl\n",[94,107951,107952],{"__ignoreMap":92},[97,107953,107954,107956,107959,107961],{"class":99,"line":100},[97,107955,25232],{"class":319},[97,107957,107958],{"class":103}," MUJOCO_GL",[97,107960,115],{"class":319},[97,107962,107963],{"class":103},"egl\n",[24,107965,107966],{},"或:",[87,107968,107970],{"className":24011,"code":107969,"language":24013,"meta":92,"style":92},"export MUJOCO_GL=osmesa\n",[94,107971,107972],{"__ignoreMap":92},[97,107973,107974,107976,107978,107980],{"class":99,"line":100},[97,107975,25232],{"class":319},[97,107977,107958],{"class":103},[97,107979,115],{"class":319},[97,107981,107982],{"class":103},"osmesa\n",[24,107984,107985,107986,107989,107990,28575],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[94,107987,107988],{},"egl"," 失败，再尝试 ",[94,107991,107992],{},"osmesa",[24,107994,107995,107996,107999],{},"如果你在本机桌面环境运行，通常先不要设置 ",[94,107997,107998],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108001,101229],{"id":101228},[24,108003,108004],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[24,108006,108007],{},"典型 viewer 流程:",[87,108009,108011],{"className":30568,"code":108010,"language":30570,"meta":92,"style":92},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[94,108012,108013,108026,108033,108037],{"__ignoreMap":92},[97,108014,108015,108018,108021,108023],{"class":99,"line":100},[97,108016,108017],{"class":319},"with",[97,108019,108020],{"class":103}," mujoco.viewer.launch_passive(model, data) ",[97,108022,31573],{"class":319},[97,108024,108025],{"class":103}," viewer:\n",[97,108027,108028,108030],{"class":99,"line":195},[97,108029,2442],{"class":319},[97,108031,108032],{"class":103}," viewer.is_running():\n",[97,108034,108035],{"class":99,"line":241},[97,108036,101700],{"class":103},[97,108038,108039],{"class":99,"line":1387},[97,108040,108041],{"class":103},"        viewer.sync()\n",[24,108043,108044],{},"典型 renderer 流程:",[87,108046,108048],{"className":30568,"code":108047,"language":30570,"meta":92,"style":92},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[94,108049,108050,108076,108080,108085],{"__ignoreMap":92},[97,108051,108052,108054,108056,108059,108061,108063,108065,108067,108069,108071,108074],{"class":99,"line":100},[97,108053,107754],{"class":103},[97,108055,115],{"class":319},[97,108057,108058],{"class":103}," mujoco.Renderer(model, ",[97,108060,25171],{"class":5407},[97,108062,115],{"class":319},[97,108064,42532],{"class":370},[97,108066,12626],{"class":103},[97,108068,25167],{"class":5407},[97,108070,115],{"class":319},[97,108072,108073],{"class":370},"640",[97,108075,329],{"class":103},[97,108077,108078],{"class":99,"line":195},[97,108079,104689],{"class":103},[97,108081,108082],{"class":99,"line":241},[97,108083,108084],{"class":103},"renderer.update_scene(data)\n",[97,108086,108087,108089,108091],{"class":99,"line":1387},[97,108088,107764],{"class":103},[97,108090,115],{"class":319},[97,108092,107769],{"class":103},[48,108094,108096],{"id":108095},"viewer-的同步逻辑","viewer 的同步逻辑",[24,108098,108099],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[87,108101,108103],{"className":30568,"code":108102,"language":30570,"meta":92,"style":92},"mujoco.mj_step(model, data)\nviewer.sync()\n",[94,108104,108105,108109],{"__ignoreMap":92},[97,108106,108107],{"class":99,"line":100},[97,108108,104689],{"class":103},[97,108110,108111],{"class":99,"line":195},[97,108112,108113],{"class":103},"viewer.sync()\n",[24,108115,108116,108118,108119,108122],{},[94,108117,101399],{}," 负责算物理，",[94,108120,108121],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[48,108124,108126],{"id":108125},"为什么要-sleep","为什么要 sleep",[24,108128,108129],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[87,108131,108133],{"className":30568,"code":108132,"language":30570,"meta":92,"style":92},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[94,108134,108135],{"__ignoreMap":92},[97,108136,108137,108140,108142,108145,108147,108150,108152],{"class":99,"line":100},[97,108138,108139],{"class":103},"sleep_time ",[97,108141,115],{"class":319},[97,108143,108144],{"class":103}," model.opt.timestep ",[97,108146,852],{"class":319},[97,108148,108149],{"class":103}," (time.time() ",[97,108151,852],{"class":319},[97,108153,108154],{"class":103}," step_start)\n",[24,108156,108157],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[48,108159,108161],{"id":108160},"renderer-输出是什么","renderer 输出是什么",[87,108163,108165],{"className":30568,"code":108164,"language":30570,"meta":92,"style":92},"image = renderer.render()\n",[94,108166,108167],{"__ignoreMap":92},[97,108168,108169,108171,108173],{"class":99,"line":100},[97,108170,107764],{"class":103},[97,108172,115],{"class":319},[97,108174,107769],{"class":103},[24,108176,108177],{},"得到的是 NumPy 数组，形状通常是：",[87,108179,108182],{"className":108180,"code":108181,"language":5378,"meta":92},[5376],"(height, width, 3)\n",[94,108183,108181],{"__ignoreMap":92},[24,108185,108186],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[87,108188,108190],{"className":30568,"code":108189,"language":30570,"meta":92,"style":92},"Image.fromarray(image).save(\"render_output.png\")\n",[94,108191,108192],{"__ignoreMap":92},[97,108193,108194,108197,108200],{"class":99,"line":100},[97,108195,108196],{"class":103},"Image.fromarray(image).save(",[97,108198,108199],{"class":118},"\"render_output.png\"",[97,108201,329],{"class":103},[14,108203,101437],{"id":101436},[24,108205,108206],{},"交互式 Viewer:",[87,108208,108210],{"className":30568,"code":108209,"language":30570,"meta":92,"style":92},"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",[94,108211,108212,108218,108222,108228,108234,108238,108242,108250,108255,108259,108263,108267,108272,108277,108281,108285,108289,108294,108298,108302,108306,108310,108314,108318,108330,108342,108350,108354,108364,108384,108394,108399,108404,108408,108425,108438,108443,108447,108451,108463],{"__ignoreMap":92},[97,108213,108214,108216],{"class":99,"line":100},[97,108215,30582],{"class":319},[97,108217,32019],{"class":103},[97,108219,108220],{"class":99,"line":195},[97,108221,2591],{"emptyLinePlaceholder":249},[97,108223,108224,108226],{"class":99,"line":241},[97,108225,30582],{"class":319},[97,108227,101485],{"class":103},[97,108229,108230,108232],{"class":99,"line":1387},[97,108231,30582],{"class":319},[97,108233,107736],{"class":103},[97,108235,108236],{"class":99,"line":1393},[97,108237,2591],{"emptyLinePlaceholder":249},[97,108239,108240],{"class":99,"line":1407},[97,108241,2591],{"emptyLinePlaceholder":249},[97,108243,108244,108246,108248],{"class":99,"line":1413},[97,108245,101498],{"class":370},[97,108247,13755],{"class":319},[97,108249,101503],{"class":118},[97,108251,108252],{"class":99,"line":1504},[97,108253,108254],{"class":118},"\u003Cmujoco model=\"viewer_demo\">\n",[97,108256,108257],{"class":99,"line":1510},[97,108258,101513],{"class":118},[97,108260,108261],{"class":99,"line":1522},[97,108262,2591],{"emptyLinePlaceholder":249},[97,108264,108265],{"class":99,"line":1804},[97,108266,101522],{"class":118},[97,108268,108269],{"class":99,"line":1809},[97,108270,108271],{"class":118},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[97,108273,108274],{"class":99,"line":1815},[97,108275,108276],{"class":118},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[97,108278,108279],{"class":99,"line":1820},[97,108280,2591],{"emptyLinePlaceholder":249},[97,108282,108283],{"class":99,"line":1834},[97,108284,101536],{"class":118},[97,108286,108287],{"class":99,"line":1839},[97,108288,101541],{"class":118},[97,108290,108291],{"class":99,"line":1845},[97,108292,108293],{"class":118},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[97,108295,108296],{"class":99,"line":1866},[97,108297,101551],{"class":118},[97,108299,108300],{"class":99,"line":1871},[97,108301,101556],{"class":118},[97,108303,108304],{"class":99,"line":1885},[97,108305,101561],{"class":118},[97,108307,108308],{"class":99,"line":1890},[97,108309,95882],{"class":118},[97,108311,108312],{"class":99,"line":1919},[97,108313,2591],{"emptyLinePlaceholder":249},[97,108315,108316],{"class":99,"line":1924},[97,108317,2591],{"emptyLinePlaceholder":249},[97,108319,108320,108322,108324,108326,108328],{"class":99,"line":1941},[97,108321,32137],{"class":319},[97,108323,2164],{"class":111},[97,108325,101582],{"class":103},[97,108327,95870],{"class":370},[97,108329,3930],{"class":103},[97,108331,108332,108334,108336,108338,108340],{"class":99,"line":1946},[97,108333,101591],{"class":103},[97,108335,115],{"class":319},[97,108337,101596],{"class":103},[97,108339,101498],{"class":370},[97,108341,329],{"class":103},[97,108343,108344,108346,108348],{"class":99,"line":1951},[97,108345,101605],{"class":103},[97,108347,115],{"class":319},[97,108349,101610],{"class":103},[97,108351,108352],{"class":99,"line":1956},[97,108353,2591],{"emptyLinePlaceholder":249},[97,108355,108356,108358,108360,108362],{"class":99,"line":1970},[97,108357,34368],{"class":319},[97,108359,108020],{"class":103},[97,108361,31573],{"class":319},[97,108363,108025],{"class":103},[97,108365,108366,108369,108372,108374,108377,108379,108382],{"class":99,"line":1975},[97,108367,108368],{"class":319},"        while",[97,108370,108371],{"class":103}," viewer.is_running() ",[97,108373,30652],{"class":319},[97,108375,108376],{"class":103}," data.time ",[97,108378,104],{"class":319},[97,108380,108381],{"class":370}," 5.0",[97,108383,3930],{"class":103},[97,108385,108386,108389,108391],{"class":99,"line":2768},[97,108387,108388],{"class":103},"            step_start ",[97,108390,115],{"class":319},[97,108392,108393],{"class":103}," time.time()\n",[97,108395,108396],{"class":99,"line":2782},[97,108397,108398],{"class":103},"            mujoco.mj_step(model, data)\n",[97,108400,108401],{"class":99,"line":2790},[97,108402,108403],{"class":103},"            viewer.sync()\n",[97,108405,108406],{"class":99,"line":2795},[97,108407,2591],{"emptyLinePlaceholder":249},[97,108409,108410,108413,108415,108417,108419,108421,108423],{"class":99,"line":2801},[97,108411,108412],{"class":103},"            sleep_time ",[97,108414,115],{"class":319},[97,108416,108144],{"class":103},[97,108418,852],{"class":319},[97,108420,108149],{"class":103},[97,108422,852],{"class":319},[97,108424,108154],{"class":103},[97,108426,108427,108429,108432,108434,108436],{"class":99,"line":2807},[97,108428,4833],{"class":319},[97,108430,108431],{"class":103}," sleep_time ",[97,108433,1279],{"class":319},[97,108435,4284],{"class":370},[97,108437,3930],{"class":103},[97,108439,108440],{"class":99,"line":2812},[97,108441,108442],{"class":103},"                time.sleep(sleep_time)\n",[97,108444,108445],{"class":99,"line":8139},[97,108446,2591],{"emptyLinePlaceholder":249},[97,108448,108449],{"class":99,"line":8163},[97,108450,2591],{"emptyLinePlaceholder":249},[97,108452,108453,108455,108457,108459,108461],{"class":99,"line":8168},[97,108454,1723],{"class":319},[97,108456,31410],{"class":370},[97,108458,101743],{"class":319},[97,108460,101746],{"class":118},[97,108462,3930],{"class":103},[97,108464,108465],{"class":99,"line":8174},[97,108466,101753],{"class":103},[24,108468,103754],{},[87,108470,108472],{"className":24011,"code":108471,"language":24013,"meta":92,"style":92},"touch ch5_viewer.py\n",[94,108473,108474],{"__ignoreMap":92},[97,108475,108476,108478],{"class":99,"line":100},[97,108477,101467],{"class":111},[97,108479,108480],{"class":118}," ch5_viewer.py\n",[24,108482,108483],{},"离屏 Renderer 保存图片:",[87,108485,108487],{"className":30568,"code":108486,"language":30570,"meta":92,"style":92},"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",[94,108488,108489,108501,108505,108511,108521,108525,108529,108537,108542,108546,108550,108554,108558,108563,108567,108571,108575,108579,108583,108587,108591,108595,108599,108603,108607,108619,108631,108639,108664,108668,108684,108688,108692,108707,108716,108720,108734,108739,108744,108748,108760,108772,108776,108780,108792],{"__ignoreMap":92},[97,108490,108491,108493,108496,108498],{"class":99,"line":100},[97,108492,30927],{"class":319},[97,108494,108495],{"class":103}," pathlib ",[97,108497,30582],{"class":319},[97,108499,108500],{"class":103}," Path\n",[97,108502,108503],{"class":99,"line":195},[97,108504,2591],{"emptyLinePlaceholder":249},[97,108506,108507,108509],{"class":99,"line":241},[97,108508,30582],{"class":319},[97,108510,101485],{"class":103},[97,108512,108513,108515,108517,108519],{"class":99,"line":1387},[97,108514,30927],{"class":319},[97,108516,47453],{"class":370},[97,108518,47456],{"class":319},[97,108520,47459],{"class":103},[97,108522,108523],{"class":99,"line":1393},[97,108524,2591],{"emptyLinePlaceholder":249},[97,108526,108527],{"class":99,"line":1407},[97,108528,2591],{"emptyLinePlaceholder":249},[97,108530,108531,108533,108535],{"class":99,"line":1413},[97,108532,101498],{"class":370},[97,108534,13755],{"class":319},[97,108536,101503],{"class":118},[97,108538,108539],{"class":99,"line":1504},[97,108540,108541],{"class":118},"\u003Cmujoco model=\"renderer_demo\">\n",[97,108543,108544],{"class":99,"line":1510},[97,108545,101513],{"class":118},[97,108547,108548],{"class":99,"line":1522},[97,108549,2591],{"emptyLinePlaceholder":249},[97,108551,108552],{"class":99,"line":1804},[97,108553,101522],{"class":118},[97,108555,108556],{"class":99,"line":1809},[97,108557,108271],{"class":118},[97,108559,108560],{"class":99,"line":1815},[97,108561,108562],{"class":118},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[97,108564,108565],{"class":99,"line":1820},[97,108566,108276],{"class":118},[97,108568,108569],{"class":99,"line":1834},[97,108570,2591],{"emptyLinePlaceholder":249},[97,108572,108573],{"class":99,"line":1839},[97,108574,101536],{"class":118},[97,108576,108577],{"class":99,"line":1845},[97,108578,101541],{"class":118},[97,108580,108581],{"class":99,"line":1866},[97,108582,108293],{"class":118},[97,108584,108585],{"class":99,"line":1871},[97,108586,101551],{"class":118},[97,108588,108589],{"class":99,"line":1885},[97,108590,101556],{"class":118},[97,108592,108593],{"class":99,"line":1890},[97,108594,101561],{"class":118},[97,108596,108597],{"class":99,"line":1919},[97,108598,95882],{"class":118},[97,108600,108601],{"class":99,"line":1924},[97,108602,2591],{"emptyLinePlaceholder":249},[97,108604,108605],{"class":99,"line":1941},[97,108606,2591],{"emptyLinePlaceholder":249},[97,108608,108609,108611,108613,108615,108617],{"class":99,"line":1946},[97,108610,32137],{"class":319},[97,108612,2164],{"class":111},[97,108614,101582],{"class":103},[97,108616,95870],{"class":370},[97,108618,3930],{"class":103},[97,108620,108621,108623,108625,108627,108629],{"class":99,"line":1951},[97,108622,101591],{"class":103},[97,108624,115],{"class":319},[97,108626,101596],{"class":103},[97,108628,101498],{"class":370},[97,108630,329],{"class":103},[97,108632,108633,108635,108637],{"class":99,"line":1956},[97,108634,101605],{"class":103},[97,108636,115],{"class":319},[97,108638,101610],{"class":103},[97,108640,108641,108644,108646,108648,108650,108652,108654,108656,108658,108660,108662],{"class":99,"line":1970},[97,108642,108643],{"class":103},"    renderer ",[97,108645,115],{"class":319},[97,108647,108058],{"class":103},[97,108649,25171],{"class":5407},[97,108651,115],{"class":319},[97,108653,42532],{"class":370},[97,108655,12626],{"class":103},[97,108657,25167],{"class":5407},[97,108659,115],{"class":319},[97,108661,108073],{"class":370},[97,108663,329],{"class":103},[97,108665,108666],{"class":99,"line":1975},[97,108667,2591],{"emptyLinePlaceholder":249},[97,108669,108670,108672,108674,108676,108678,108680,108682],{"class":99,"line":2768},[97,108671,3392],{"class":319},[97,108673,101685],{"class":103},[97,108675,26233],{"class":319},[97,108677,32633],{"class":370},[97,108679,323],{"class":103},[97,108681,631],{"class":370},[97,108683,30976],{"class":103},[97,108685,108686],{"class":99,"line":2782},[97,108687,101700],{"class":103},[97,108689,108690],{"class":99,"line":2790},[97,108691,2591],{"emptyLinePlaceholder":249},[97,108693,108694,108697,108700,108702,108705],{"class":99,"line":2795},[97,108695,108696],{"class":103},"    renderer.update_scene(data, ",[97,108698,108699],{"class":5407},"camera",[97,108701,115],{"class":319},[97,108703,108704],{"class":118},"\"fixed_camera\"",[97,108706,329],{"class":103},[97,108708,108709,108712,108714],{"class":99,"line":2801},[97,108710,108711],{"class":103},"    image ",[97,108713,115],{"class":319},[97,108715,107769],{"class":103},[97,108717,108718],{"class":99,"line":2807},[97,108719,2591],{"emptyLinePlaceholder":249},[97,108721,108722,108725,108727,108730,108732],{"class":99,"line":2812},[97,108723,108724],{"class":103},"    output_path ",[97,108726,115],{"class":319},[97,108728,108729],{"class":103}," Path(",[97,108731,108199],{"class":118},[97,108733,329],{"class":103},[97,108735,108736],{"class":99,"line":8139},[97,108737,108738],{"class":103},"    Image.fromarray(image).save(output_path)\n",[97,108740,108741],{"class":99,"line":8163},[97,108742,108743],{"class":103},"    renderer.close()\n",[97,108745,108746],{"class":99,"line":8168},[97,108747,2591],{"emptyLinePlaceholder":249},[97,108749,108750,108752,108754,108757],{"class":99,"line":8174},[97,108751,31489],{"class":370},[97,108753,323],{"class":103},[97,108755,108756],{"class":118},"\"saved:\"",[97,108758,108759],{"class":103},", output_path.resolve())\n",[97,108761,108762,108764,108766,108769],{"class":99,"line":8201},[97,108763,31489],{"class":370},[97,108765,323],{"class":103},[97,108767,108768],{"class":118},"\"image shape:\"",[97,108770,108771],{"class":103},", image.shape)\n",[97,108773,108774],{"class":99,"line":8206},[97,108775,2591],{"emptyLinePlaceholder":249},[97,108777,108778],{"class":99,"line":8212},[97,108779,2591],{"emptyLinePlaceholder":249},[97,108781,108782,108784,108786,108788,108790],{"class":99,"line":8224},[97,108783,1723],{"class":319},[97,108785,31410],{"class":370},[97,108787,101743],{"class":319},[97,108789,101746],{"class":118},[97,108791,3930],{"class":103},[97,108793,108794],{"class":99,"line":8236},[97,108795,101753],{"class":103},[24,108797,103754],{},[87,108799,108801],{"className":24011,"code":108800,"language":24013,"meta":92,"style":92},"touch ch5_renderer.py\n",[94,108802,108803],{"__ignoreMap":92},[97,108804,108805,108807],{"class":99,"line":100},[97,108806,101467],{"class":111},[97,108808,108809],{"class":118}," ch5_renderer.py\n",[48,108811,101756],{"id":101756},[24,108813,108814],{},"viewer 上下文：",[87,108816,108818],{"className":30568,"code":108817,"language":30570,"meta":92,"style":92},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[94,108819,108820],{"__ignoreMap":92},[97,108821,108822,108824,108826,108828],{"class":99,"line":100},[97,108823,108017],{"class":319},[97,108825,108020],{"class":103},[97,108827,31573],{"class":319},[97,108829,108025],{"class":103},[24,108831,108832,108834],{},[94,108833,108017],{}," 语句会创建窗口，并在退出时自动清理资源。",[24,108836,108837],{},"窗口循环：",[87,108839,108841],{"className":30568,"code":108840,"language":30570,"meta":92,"style":92},"while viewer.is_running() and data.time \u003C 5.0:\n",[94,108842,108843],{"__ignoreMap":92},[97,108844,108845,108848,108850,108852,108854,108856,108858],{"class":99,"line":100},[97,108846,108847],{"class":319},"while",[97,108849,108371],{"class":103},[97,108851,30652],{"class":319},[97,108853,108376],{"class":103},[97,108855,104],{"class":319},[97,108857,108381],{"class":370},[97,108859,3930],{"class":103},[24,108861,108862],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[24,108864,108865],{},"固定相机：",[87,108867,108869],{"className":53251,"code":108868,"language":53253,"meta":92,"style":92},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[94,108870,108871],{"__ignoreMap":92},[97,108872,108873,108875,108877,108879,108881,108883,108885,108887,108890,108893,108895,108898],{"class":99,"line":100},[97,108874,104],{"class":103},[97,108876,108699],{"class":107},[97,108878,112],{"class":111},[97,108880,115],{"class":103},[97,108882,108704],{"class":118},[97,108884,101290],{"class":111},[97,108886,115],{"class":103},[97,108888,108889],{"class":118},"\"1.5 -2.0 1.2\"",[97,108891,108892],{"class":111}," xyaxes",[97,108894,115],{"class":103},[97,108896,108897],{"class":118},"\"1 0.75 0 0 0 1\"",[97,108899,101328],{"class":103},[24,108901,108902],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[48,108904,108906],{"id":108905},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[87,108908,108910],{"className":30568,"code":108909,"language":30570,"meta":92,"style":92},"import time\n",[94,108911,108912],{"__ignoreMap":92},[97,108913,108914,108916],{"class":99,"line":100},[97,108915,30582],{"class":319},[97,108917,32019],{"class":103},[24,108919,108920],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[87,108922,108924],{"className":30568,"code":108923,"language":30570,"meta":92,"style":92},"import mujoco\nimport mujoco.viewer\n",[94,108925,108926,108932],{"__ignoreMap":92},[97,108927,108928,108930],{"class":99,"line":100},[97,108929,30582],{"class":319},[97,108931,101485],{"class":103},[97,108933,108934,108936],{"class":99,"line":195},[97,108935,30582],{"class":319},[97,108937,107736],{"class":103},[24,108939,108940],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[87,108942,108943],{"className":30568,"code":108817,"language":30570,"meta":92,"style":92},[94,108944,108945],{"__ignoreMap":92},[97,108946,108947,108949,108951,108953],{"class":99,"line":100},[97,108948,108017],{"class":319},[97,108950,108020],{"class":103},[97,108952,31573],{"class":319},[97,108954,108025],{"class":103},[24,108956,108957,108958,108961],{},"打开一个 viewer 窗口。",[94,108959,108960],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[87,108963,108964],{"className":30568,"code":108840,"language":30570,"meta":92,"style":92},[94,108965,108966],{"__ignoreMap":92},[97,108967,108968,108970,108972,108974,108976,108978,108980],{"class":99,"line":100},[97,108969,108847],{"class":319},[97,108971,108371],{"class":103},[97,108973,30652],{"class":319},[97,108975,108376],{"class":103},[97,108977,104],{"class":319},[97,108979,108381],{"class":370},[97,108981,3930],{"class":103},[24,108983,108984,108985,108988],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[94,108986,108987],{},"viewer.is_running()"," 会变成 false，循环结束。",[87,108990,108992],{"className":30568,"code":108991,"language":30570,"meta":92,"style":92},"step_start = time.time()\n",[94,108993,108994],{"__ignoreMap":92},[97,108995,108996,108999,109001],{"class":99,"line":100},[97,108997,108998],{"class":103},"step_start ",[97,109000,115],{"class":319},[97,109002,108393],{"class":103},[24,109004,109005],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[87,109007,109008],{"className":30568,"code":108102,"language":30570,"meta":92,"style":92},[94,109009,109010,109014],{"__ignoreMap":92},[97,109011,109012],{"class":99,"line":100},[97,109013,104689],{"class":103},[97,109015,109016],{"class":99,"line":195},[97,109017,108113],{"class":103},[24,109019,109020,109022,109023,109025,109026,109028,109029,109032],{},[94,109021,101399],{}," 推进物理仿真。",[94,109024,108121],{}," 把最新的 ",[94,109027,33591],{}," 同步到窗口里显示。没有 ",[94,109030,109031],{},"sync()","，窗口可能看不到最新状态。",[87,109034,109035],{"className":30568,"code":108132,"language":30570,"meta":92,"style":92},[94,109036,109037],{"__ignoreMap":92},[97,109038,109039,109041,109043,109045,109047,109049,109051],{"class":99,"line":100},[97,109040,108139],{"class":103},[97,109042,115],{"class":319},[97,109044,108144],{"class":103},[97,109046,852],{"class":319},[97,109048,108149],{"class":103},[97,109050,852],{"class":319},[97,109052,108154],{"class":103},[24,109054,109055],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[87,109057,109059],{"className":30568,"code":109058,"language":30570,"meta":92,"style":92},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[94,109060,109061,109073],{"__ignoreMap":92},[97,109062,109063,109065,109067,109069,109071],{"class":99,"line":100},[97,109064,1723],{"class":319},[97,109066,108431],{"class":103},[97,109068,1279],{"class":319},[97,109070,4284],{"class":370},[97,109072,3930],{"class":103},[97,109074,109075],{"class":99,"line":195},[97,109076,109077],{"class":103},"    time.sleep(sleep_time)\n",[24,109079,109080],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[48,109082,109084],{"id":109083},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[87,109086,109088],{"className":30568,"code":109087,"language":30570,"meta":92,"style":92},"from pathlib import Path\n",[94,109089,109090],{"__ignoreMap":92},[97,109091,109092,109094,109096,109098],{"class":99,"line":100},[97,109093,30927],{"class":319},[97,109095,108495],{"class":103},[97,109097,30582],{"class":319},[97,109099,108500],{"class":103},[24,109101,109102,109103,109106,109107,109110],{},"导入 ",[94,109104,109105],{},"Path","，用来处理文件路径。相比直接写字符串，",[94,109108,109109],{},"Path(\"render_output.png\")"," 更清晰。",[87,109112,109114],{"className":30568,"code":109113,"language":30570,"meta":92,"style":92},"from PIL import Image\n",[94,109115,109116],{"__ignoreMap":92},[97,109117,109118,109120,109122,109124],{"class":99,"line":100},[97,109119,30927],{"class":319},[97,109121,47453],{"class":370},[97,109123,47456],{"class":319},[97,109125,47459],{"class":103},[24,109127,109128],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[87,109130,109131],{"className":53251,"code":108868,"language":53253,"meta":92,"style":92},[94,109132,109133],{"__ignoreMap":92},[97,109134,109135,109137,109139,109141,109143,109145,109147,109149,109151,109153,109155,109157],{"class":99,"line":100},[97,109136,104],{"class":103},[97,109138,108699],{"class":107},[97,109140,112],{"class":111},[97,109142,115],{"class":103},[97,109144,108704],{"class":118},[97,109146,101290],{"class":111},[97,109148,115],{"class":103},[97,109150,108889],{"class":118},[97,109152,108892],{"class":111},[97,109154,115],{"class":103},[97,109156,108897],{"class":118},[97,109158,101328],{"class":103},[24,109160,109161,109162,109164,109165,109167,109168,109171,109172,109174],{},"定义一个相机。",[94,109163,79994],{}," 是相机名字。",[94,109166,104330],{}," 是相机在世界里的位置。",[94,109169,109170],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[94,109173,104330],{}," 来调视角。",[87,109176,109178],{"className":30568,"code":109177,"language":30570,"meta":92,"style":92},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[94,109179,109180],{"__ignoreMap":92},[97,109181,109182,109184,109186,109188,109190,109192,109194,109196,109198,109200,109202],{"class":99,"line":100},[97,109183,107754],{"class":103},[97,109185,115],{"class":319},[97,109187,108058],{"class":103},[97,109189,25171],{"class":5407},[97,109191,115],{"class":319},[97,109193,42532],{"class":370},[97,109195,12626],{"class":103},[97,109197,25167],{"class":5407},[97,109199,115],{"class":319},[97,109201,108073],{"class":370},[97,109203,329],{"class":103},[24,109205,109206,109207,101202,109209,109211],{},"创建离屏渲染器。",[94,109208,25171],{},[94,109210,25167],{}," 决定输出图片大小。",[87,109213,109214],{"className":30568,"code":101860,"language":30570,"meta":92,"style":92},[94,109215,109216,109232],{"__ignoreMap":92},[97,109217,109218,109220,109222,109224,109226,109228,109230],{"class":99,"line":100},[97,109219,3216],{"class":319},[97,109221,101685],{"class":103},[97,109223,26233],{"class":319},[97,109225,32633],{"class":370},[97,109227,323],{"class":103},[97,109229,631],{"class":370},[97,109231,30976],{"class":103},[97,109233,109234],{"class":99,"line":195},[97,109235,101883],{"class":103},[24,109237,109238],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[87,109240,109242],{"className":30568,"code":109241,"language":30570,"meta":92,"style":92},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[94,109243,109244],{"__ignoreMap":92},[97,109245,109246,109249,109251,109253,109255],{"class":99,"line":100},[97,109247,109248],{"class":103},"renderer.update_scene(data, ",[97,109250,108699],{"class":5407},[97,109252,115],{"class":319},[97,109254,108704],{"class":118},[97,109256,329],{"class":103},[24,109258,109259,109260,109262,109263,109266],{},"告诉 renderer：用当前 ",[94,109261,33591],{}," 的状态更新画面，并使用名为 ",[94,109264,109265],{},"fixed_camera"," 的相机视角。",[87,109268,109269],{"className":30568,"code":108164,"language":30570,"meta":92,"style":92},[94,109270,109271],{"__ignoreMap":92},[97,109272,109273,109275,109277],{"class":99,"line":100},[97,109274,107764],{"class":103},[97,109276,115],{"class":319},[97,109278,107769],{"class":103},[24,109280,109281,109282,109285],{},"真正渲染出图像。",[94,109283,109284],{},"image"," 是一个 NumPy 数组，不是文件。",[87,109287,109289],{"className":30568,"code":109288,"language":30570,"meta":92,"style":92},"Image.fromarray(image).save(output_path)\n",[94,109290,109291],{"__ignoreMap":92},[97,109292,109293],{"class":99,"line":100},[97,109294,109288],{"class":103},[24,109296,109297,109298,28575],{},"把数组转换成图片，并保存到 ",[94,109299,109300],{},"render_output.png",[87,109302,109304],{"className":30568,"code":109303,"language":30570,"meta":92,"style":92},"renderer.close()\n",[94,109305,109306],{"__ignoreMap":92},[97,109307,109308],{"class":99,"line":100},[97,109309,109303],{"class":103},[24,109311,109312],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109314,102500],{"id":102499},[24,109316,109317,109318,109320,109321,28575],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[94,109319,109300],{},"，并输出图像数组形状，例如 ",[94,109322,109323],{},"(480, 640, 3)",[24,109325,109326],{},"如果图片里看不到方块，先检查：",[138,109328,109329,109332,109335],{},[70,109330,109331],{},"方块是否掉到相机视野外。",[70,109333,109334],{},"camera 位置是否合理。",[70,109336,109337,109338,109341],{},"是否在 ",[94,109339,109340],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109343,102532],{"id":102531},[24,109345,109346],{},"运行 viewer:",[87,109348,109350],{"className":24011,"code":109349,"language":24013,"meta":92,"style":92},"python ch5_viewer.py\n",[94,109351,109352],{"__ignoreMap":92},[97,109353,109354,109356],{"class":99,"line":100},[97,109355,30570],{"class":111},[97,109357,108480],{"class":118},[24,109359,109360],{},"运行 renderer:",[87,109362,109364],{"className":24011,"code":109363,"language":24013,"meta":92,"style":92},"python ch5_renderer.py\n",[94,109365,109366],{"__ignoreMap":92},[97,109367,109368,109370],{"class":99,"line":100},[97,109369,30570],{"class":111},[97,109371,108809],{"class":118},[24,109373,109374],{},"如果在服务器上运行:",[87,109376,109378],{"className":24011,"code":109377,"language":24013,"meta":92,"style":92},"MUJOCO_GL=egl python ch5_renderer.py\n",[94,109379,109380],{"__ignoreMap":92},[97,109381,109382,109384,109386,109388,109391],{"class":99,"line":100},[97,109383,107998],{"class":103},[97,109385,115],{"class":319},[97,109387,107988],{"class":118},[97,109389,109390],{"class":111}," python",[97,109392,108809],{"class":118},[24,109394,107966],{},[87,109396,109398],{"className":24011,"code":109397,"language":24013,"meta":92,"style":92},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[94,109399,109400],{"__ignoreMap":92},[97,109401,109402,109404,109406,109408,109410],{"class":99,"line":100},[97,109403,107998],{"class":103},[97,109405,115],{"class":319},[97,109407,107992],{"class":118},[97,109409,109390],{"class":111},[97,109411,108809],{"class":118},[24,109413,109414],{},"再做几个练习：",[138,109416,109417,109424,109427,109433],{},[70,109418,109419,109420,109423],{},"把 renderer 分辨率改成 ",[94,109421,109422],{},"height=240, width=320","，观察输出 shape。",[70,109425,109426],{},"把方块颜色改成蓝色，重新保存图片。",[70,109428,109429,109430,109432],{},"把相机 ",[94,109431,104330],{}," 改远一点，观察画面中物体是否变小。",[70,109434,109435,109436,102598,109439,109442],{},"把 viewer 示例中的 ",[94,109437,109438],{},"data.time \u003C 5.0",[94,109440,109441],{},"data.time \u003C 20.0","，观察更长时间。",[14,109444,102637],{"id":102636},[48,109446,109448],{"id":109447},"viewer-窗口打不开","viewer 窗口打不开",[24,109450,109451],{},"安装:",[87,109453,109455],{"className":24011,"code":109454,"language":24013,"meta":92,"style":92},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[94,109456,109457],{"__ignoreMap":92},[97,109458,109459,109461,109463,109465,109467,109469,109471,109473,109475,109477,109479],{"class":99,"line":100},[97,109460,24766],{"class":111},[97,109462,26505],{"class":118},[97,109464,24023],{"class":118},[97,109466,26590],{"class":370},[97,109468,102690],{"class":118},[97,109470,101018],{"class":118},[97,109472,102695],{"class":118},[97,109474,101031],{"class":118},[97,109476,101037],{"class":118},[97,109478,101028],{"class":118},[97,109480,109481],{"class":118}," libXinerama\n",[48,109483,109485],{"id":109484},"glfwerror",[94,109486,109487],{},"GLFWError",[24,109489,109490],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[48,109492,109494],{"id":109493},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[24,109496,109497,109498,82723,109500,109502],{},"尝试 ",[94,109499,101221],{},[94,109501,101224],{},"。可能存在版本差异。",[48,109504,109505],{"id":109505},"保存图片是黑的",[24,109507,102759],{},[138,109509,109510,109513,109516,109526],{},[70,109511,109512],{},"XML 里是否有 light。",[70,109514,109515],{},"相机是否对着模型。",[70,109517,109518,109519,109522,109523,28575],{},"是否先 ",[94,109520,109521],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[94,109524,109525],{},"renderer.render()",[70,109527,109528],{},"物体是否已经掉出视野。",[48,109530,109531],{"id":109531},"远程服务器没有显示器",[24,109533,109534],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[87,109536,109537],{"className":24011,"code":109377,"language":24013,"meta":92,"style":92},[94,109538,109539],{"__ignoreMap":92},[97,109540,109541,109543,109545,109547,109549],{"class":99,"line":100},[97,109542,107998],{"class":103},[97,109544,115],{"class":319},[97,109546,107988],{"class":118},[97,109548,109390],{"class":111},[97,109550,108809],{"class":118},[24,109552,109553],{},"如果 EGL 不可用，再尝试：",[87,109555,109556],{"className":24011,"code":109397,"language":24013,"meta":92,"style":92},[94,109557,109558],{"__ignoreMap":92},[97,109559,109560,109562,109564,109566,109568],{"class":99,"line":100},[97,109561,107998],{"class":103},[97,109563,115],{"class":319},[97,109565,107992],{"class":118},[97,109567,109390],{"class":111},[97,109569,108809],{"class":118},[14,109571,102791],{"id":102790},[24,109573,109574],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[138,109576,109577,109580,109583],{},[70,109578,109579],{},"先用 viewer 看模型和控制是否正常。",[70,109581,109582],{},"再用 renderer 保存图片或构造视觉观测。",[70,109584,109585],{},"最后把状态、动作、图像、奖励组织成训练数据。",[231,109587,109588],{},"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":92,"searchDepth":195,"depth":195,"links":109590},[109591,109592,109593,109598,109603,109604,109605,109612],{"id":100830,"depth":195,"text":100831},{"id":100953,"depth":195,"text":100954},{"id":101228,"depth":195,"text":101229,"children":109594},[109595,109596,109597],{"id":108095,"depth":241,"text":108096},{"id":108125,"depth":241,"text":108126},{"id":108160,"depth":241,"text":108161},{"id":101436,"depth":195,"text":101437,"children":109599},[109600,109601,109602],{"id":101756,"depth":241,"text":101756},{"id":108905,"depth":241,"text":108906},{"id":109083,"depth":241,"text":109084},{"id":102499,"depth":195,"text":102500},{"id":102531,"depth":195,"text":102532},{"id":102636,"depth":195,"text":102637,"children":109606},[109607,109608,109609,109610,109611],{"id":109447,"depth":241,"text":109448},{"id":109484,"depth":241,"text":109487},{"id":109493,"depth":241,"text":109494},{"id":109505,"depth":241,"text":109505},{"id":109531,"depth":241,"text":109531},{"id":102790,"depth":195,"text":102791},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107703,"description":92},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109619,"title":109620,"body":109621,"description":92,"extension":247,"meta":111532,"navigation":249,"path":111533,"seo":111534,"stem":111535,"__hash__":111536},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109622,"toc":111508},[109623,109626,109628,109631,109633,109652,109655,109661,109664,109666,109668,109692,109694,109708,109710,109751,109753,109764,109766,109769,109775,109778,109812,109815,109847,109850,109882,109886,109889,109929,109932,109938,109941,109947,109951,109954,109960,109963,109967,109970,110010,110012,110025,110028,110030,110612,110614,110626,110629,110640,110642,110645,110664,110676,110679,110700,110703,110706,110749,110752,110755,110775,110782,110784,110802,110817,110820,110826,110829,110835,110852,110859,110890,110901,110935,110946,110963,110972,110980,110985,110999,111002,111023,111029,111043,111048,111078,111088,111113,111121,111144,111147,111163,111166,111174,111180,111202,111215,111236,111245,111284,111295,111297,111300,111306,111309,111312,111318,111321,111341,111344,111346,111385,111387,111390,111398,111401,111404,111431,111434,111444,111450,111453,111459,111461,111467,111471,111474,111476,111479,111503,111506],[10,109624,109620],{"id":109625},"_6控制任务cartpole",[14,109627,100831],{"id":100830},[24,109629,109630],{},"本章搭建一个最小 Cartpole 控制任务。",[24,109632,104515],{},[138,109634,109635,109638,109640,109643,109646,109649],{},[70,109636,109637],{},"slide joint",[70,109639,106368],{},[70,109641,109642],{},"cart force actuator",[70,109644,109645],{},"状态观测",[70,109647,109648],{},"简单控制循环",[70,109650,109651],{},"reward 设计雏形",[24,109653,109654],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[87,109656,109659],{"className":109657,"code":109658,"language":5378,"meta":92},[5376],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[94,109660,109658],{"__ignoreMap":92},[24,109662,109663],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109665,100954],{"id":100953},[24,109667,100957],{},[87,109669,109670],{"className":24011,"code":104572,"language":24013,"meta":92,"style":92},[94,109671,109672],{"__ignoreMap":92},[97,109673,109674,109676,109678,109680,109682,109684,109686,109688,109690],{"class":99,"line":100},[97,109675,24766],{"class":111},[97,109677,26505],{"class":118},[97,109679,24023],{"class":118},[97,109681,26590],{"class":370},[97,109683,104587],{"class":118},[97,109685,100982],{"class":118},[97,109687,102685],{"class":118},[97,109689,100998],{"class":118},[97,109691,104596],{"class":118},[24,109693,103003],{},[87,109695,109696],{"className":24011,"code":101103,"language":24013,"meta":92,"style":92},[94,109697,109698],{"__ignoreMap":92},[97,109699,109700,109702,109704,109706],{"class":99,"line":100},[97,109701,24020],{"class":111},[97,109703,24023],{"class":118},[97,109705,101114],{"class":118},[97,109707,101117],{"class":118},[24,109709,103020],{},[87,109711,109713],{"className":24011,"code":109712,"language":24013,"meta":92,"style":92},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[94,109714,109715,109732,109741],{"__ignoreMap":92},[97,109716,109717,109719,109721,109723,109726,109728,109730],{"class":99,"line":100},[97,109718,30520],{"class":111},[97,109720,29366],{"class":118},[97,109722,25305],{"class":370},[97,109724,109725],{"class":118}," mujoco-cartpole",[97,109727,101159],{"class":118},[97,109729,101162],{"class":370},[97,109731,101165],{"class":370},[97,109733,109734,109736,109738],{"class":99,"line":195},[97,109735,30520],{"class":111},[97,109737,101172],{"class":118},[97,109739,109740],{"class":118}," mujoco-cartpole\n",[97,109742,109743,109745,109747,109749],{"class":99,"line":241},[97,109744,24020],{"class":111},[97,109746,24023],{"class":118},[97,109748,101114],{"class":118},[97,109750,101117],{"class":118},[24,109752,101188],{},[138,109754,109755,109758,109761],{},[70,109756,109757],{},"本章不依赖 Gymnasium。",[70,109759,109760],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[70,109762,109763],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109765,101229],{"id":101228},[24,109767,109768],{},"Cartpole 的模型结构:",[87,109770,109773],{"className":109771,"code":109772,"language":5378,"meta":92},[5376],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[94,109774,109772],{"__ignoreMap":92},[24,109776,109777],{},"小车通过 slide joint 左右移动:",[87,109779,109781],{"className":53251,"code":109780,"language":53253,"meta":92,"style":92},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[94,109782,109783],{"__ignoreMap":92},[97,109784,109785,109787,109789,109791,109793,109796,109798,109800,109803,109805,109807,109810],{"class":99,"line":100},[97,109786,104],{"class":103},[97,109788,103140],{"class":107},[97,109790,112],{"class":111},[97,109792,115],{"class":103},[97,109794,109795],{"class":118},"\"cart_x\"",[97,109797,54008],{"class":111},[97,109799,115],{"class":103},[97,109801,109802],{"class":118},"\"slide\"",[97,109804,106212],{"class":111},[97,109806,115],{"class":103},[97,109808,109809],{"class":118},"\"1 0 0\"",[97,109811,101328],{"class":103},[24,109813,109814],{},"杆子通过 hinge joint 旋转:",[87,109816,109818],{"className":53251,"code":109817,"language":53253,"meta":92,"style":92},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[94,109819,109820],{"__ignoreMap":92},[97,109821,109822,109824,109826,109828,109830,109833,109835,109837,109839,109841,109843,109845],{"class":99,"line":100},[97,109823,104],{"class":103},[97,109825,103140],{"class":107},[97,109827,112],{"class":111},[97,109829,115],{"class":103},[97,109831,109832],{"class":118},"\"pole_hinge\"",[97,109834,54008],{"class":111},[97,109836,115],{"class":103},[97,109838,106203],{"class":118},[97,109840,106212],{"class":111},[97,109842,115],{"class":103},[97,109844,106217],{"class":118},[97,109846,101328],{"class":103},[24,109848,109849],{},"控制力作用在小车 slide joint 上:",[87,109851,109853],{"className":53251,"code":109852,"language":53253,"meta":92,"style":92},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[94,109854,109855],{"__ignoreMap":92},[97,109856,109857,109859,109861,109863,109865,109868,109870,109872,109874,109876,109878,109880],{"class":99,"line":100},[97,109858,104],{"class":103},[97,109860,106258],{"class":107},[97,109862,112],{"class":111},[97,109864,115],{"class":103},[97,109866,109867],{"class":118},"\"cart_motor\"",[97,109869,106268],{"class":111},[97,109871,115],{"class":103},[97,109873,109795],{"class":118},[97,109875,106275],{"class":111},[97,109877,115],{"class":103},[97,109879,54500],{"class":118},[97,109881,101328],{"class":103},[48,109883,109885],{"id":109884},"cartpole-的状态是什么","Cartpole 的状态是什么",[24,109887,109888],{},"这个简化模型有两个关节：",[457,109890,109891,109902],{},[460,109892,109893],{},[463,109894,109895,109897,109899],{},[466,109896,102943],{"align":23925},[466,109898,23926],{"align":23925},[466,109900,109901],{"align":23925},"对应状态",[504,109903,109904,109917],{},[463,109905,109906,109911,109914],{},[509,109907,109908],{"align":23925},[94,109909,109910],{},"cart_x",[509,109912,109913],{"align":23925},"slide",[509,109915,109916],{"align":23925},"小车 x 位置",[463,109918,109919,109924,109926],{},[509,109920,109921],{"align":23925},[94,109922,109923],{},"pole_hinge",[509,109925,106024],{"align":23925},[509,109927,109928],{"align":23925},"杆子角度",[24,109930,109931],{},"所以：",[87,109933,109936],{"className":109934,"code":109935,"language":5378,"meta":92},[5376],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[94,109937,109935],{"__ignoreMap":92},[24,109939,109940],{},"把它们拼起来就是观测：",[87,109942,109945],{"className":109943,"code":109944,"language":5378,"meta":92},[5376],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[94,109946,109944],{"__ignoreMap":92},[48,109948,109950],{"id":109949},"action-是什么","action 是什么",[24,109952,109953],{},"本章只有一个 actuator：",[87,109955,109958],{"className":109956,"code":109957,"language":5378,"meta":92},[5376],"data.ctrl[0] = action\n",[94,109959,109957],{"__ignoreMap":92},[24,109961,109962],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[48,109964,109966],{"id":109965},"reward-是什么","reward 是什么",[24,109968,109969],{},"奖励函数：",[87,109971,109973],{"className":30568,"code":109972,"language":30570,"meta":92,"style":92},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[94,109974,109975],{"__ignoreMap":92},[97,109976,109977,109979,109982,109984,109986,109988,109991,109993,109996,109998,110000,110002,110005,110007],{"class":99,"line":100},[97,109978,17236],{"class":319},[97,109980,109981],{"class":370}," float",[97,109983,323],{"class":103},[97,109985,102587],{"class":370},[97,109987,52455],{"class":319},[97,109989,109990],{"class":370}," 0.1",[97,109992,6709],{"class":319},[97,109994,109995],{"class":103}," cart_x ",[97,109997,775],{"class":319},[97,109999,109995],{"class":103},[97,110001,852],{"class":319},[97,110003,110004],{"class":103}," pole_angle ",[97,110006,775],{"class":319},[97,110008,110009],{"class":103}," pole_angle)\n",[24,110011,106410],{},[138,110013,110014,110019,110022],{},[70,110015,110016,110017,28575],{},"基础奖励是 ",[94,110018,102587],{},[70,110020,110021],{},"小车离中心越远，扣分越多。",[70,110023,110024],{},"杆子角度越大，扣分越多。",[24,110026,110027],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110029,101437],{"id":101436},[87,110031,110033],{"className":30568,"code":110032,"language":30570,"meta":92,"style":92},"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",[94,110034,110035,110041,110051,110055,110059,110067,110072,110076,110080,110084,110089,110093,110098,110103,110108,110112,110117,110122,110127,110131,110135,110139,110143,110147,110152,110156,110160,110164,110168,110172,110182,110189,110193,110197,110211,110225,110238,110268,110272,110276,110288,110300,110308,110312,110325,110329,110333,110342,110346,110362,110372,110385,110398,110402,110425,110443,110447,110459,110463,110467,110477,110487,110491,110507,110548,110552,110572,110588,110592,110596,110608],{"__ignoreMap":92},[97,110036,110037,110039],{"class":99,"line":100},[97,110038,30582],{"class":319},[97,110040,101485],{"class":103},[97,110042,110043,110045,110047,110049],{"class":99,"line":195},[97,110044,30582],{"class":319},[97,110046,31570],{"class":103},[97,110048,31573],{"class":319},[97,110050,31576],{"class":103},[97,110052,110053],{"class":99,"line":241},[97,110054,2591],{"emptyLinePlaceholder":249},[97,110056,110057],{"class":99,"line":1387},[97,110058,2591],{"emptyLinePlaceholder":249},[97,110060,110061,110063,110065],{"class":99,"line":1393},[97,110062,101498],{"class":370},[97,110064,13755],{"class":319},[97,110066,101503],{"class":118},[97,110068,110069],{"class":99,"line":1407},[97,110070,110071],{"class":118},"\u003Cmujoco model=\"cartpole\">\n",[97,110073,110074],{"class":99,"line":1413},[97,110075,101513],{"class":118},[97,110077,110078],{"class":99,"line":1504},[97,110079,2591],{"emptyLinePlaceholder":249},[97,110081,110082],{"class":99,"line":1510},[97,110083,101522],{"class":118},[97,110085,110086],{"class":99,"line":1522},[97,110087,110088],{"class":118},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[97,110090,110091],{"class":99,"line":1804},[97,110092,2591],{"emptyLinePlaceholder":249},[97,110094,110095],{"class":99,"line":1809},[97,110096,110097],{"class":118},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[97,110099,110100],{"class":99,"line":1815},[97,110101,110102],{"class":118},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[97,110104,110105],{"class":99,"line":1820},[97,110106,110107],{"class":118},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[97,110109,110110],{"class":99,"line":1834},[97,110111,2591],{"emptyLinePlaceholder":249},[97,110113,110114],{"class":99,"line":1839},[97,110115,110116],{"class":118},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[97,110118,110119],{"class":99,"line":1845},[97,110120,110121],{"class":118},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[97,110123,110124],{"class":99,"line":1866},[97,110125,110126],{"class":118},"        \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",[97,110128,110129],{"class":99,"line":1871},[97,110130,106622],{"class":118},[97,110132,110133],{"class":99,"line":1885},[97,110134,101551],{"class":118},[97,110136,110137],{"class":99,"line":1890},[97,110138,101556],{"class":118},[97,110140,110141],{"class":99,"line":1919},[97,110142,2591],{"emptyLinePlaceholder":249},[97,110144,110145],{"class":99,"line":1924},[97,110146,106639],{"class":118},[97,110148,110149],{"class":99,"line":1941},[97,110150,110151],{"class":118},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[97,110153,110154],{"class":99,"line":1946},[97,110155,106649],{"class":118},[97,110157,110158],{"class":99,"line":1951},[97,110159,101561],{"class":118},[97,110161,110162],{"class":99,"line":1956},[97,110163,95882],{"class":118},[97,110165,110166],{"class":99,"line":1970},[97,110167,2591],{"emptyLinePlaceholder":249},[97,110169,110170],{"class":99,"line":1975},[97,110171,2591],{"emptyLinePlaceholder":249},[97,110173,110174,110176,110179],{"class":99,"line":2768},[97,110175,32137],{"class":319},[97,110177,110178],{"class":111}," get_observation",[97,110180,110181],{"class":103},"(data: mujoco.MjData) -> np.ndarray:\n",[97,110183,110184,110186],{"class":99,"line":2782},[97,110185,4281],{"class":319},[97,110187,110188],{"class":103}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[97,110190,110191],{"class":99,"line":2790},[97,110192,2591],{"emptyLinePlaceholder":249},[97,110194,110195],{"class":99,"line":2795},[97,110196,2591],{"emptyLinePlaceholder":249},[97,110198,110199,110201,110204,110207,110209],{"class":99,"line":2801},[97,110200,32137],{"class":319},[97,110202,110203],{"class":111}," compute_reward",[97,110205,110206],{"class":103},"(obs: np.ndarray) -> ",[97,110208,362],{"class":370},[97,110210,3930],{"class":103},[97,110212,110213,110216,110218,110221,110223],{"class":99,"line":2807},[97,110214,110215],{"class":103},"    cart_x ",[97,110217,115],{"class":319},[97,110219,110220],{"class":103}," obs[",[97,110222,511],{"class":370},[97,110224,33436],{"class":103},[97,110226,110227,110230,110232,110234,110236],{"class":99,"line":2812},[97,110228,110229],{"class":103},"    pole_angle ",[97,110231,115],{"class":319},[97,110233,110220],{"class":103},[97,110235,537],{"class":370},[97,110237,33436],{"class":103},[97,110239,110240,110242,110244,110246,110248,110250,110252,110254,110256,110258,110260,110262,110264,110266],{"class":99,"line":8139},[97,110241,4281],{"class":319},[97,110243,109981],{"class":370},[97,110245,323],{"class":103},[97,110247,102587],{"class":370},[97,110249,52455],{"class":319},[97,110251,109990],{"class":370},[97,110253,6709],{"class":319},[97,110255,109995],{"class":103},[97,110257,775],{"class":319},[97,110259,109995],{"class":103},[97,110261,852],{"class":319},[97,110263,110004],{"class":103},[97,110265,775],{"class":319},[97,110267,110009],{"class":103},[97,110269,110270],{"class":99,"line":8163},[97,110271,2591],{"emptyLinePlaceholder":249},[97,110273,110274],{"class":99,"line":8168},[97,110275,2591],{"emptyLinePlaceholder":249},[97,110277,110278,110280,110282,110284,110286],{"class":99,"line":8174},[97,110279,32137],{"class":319},[97,110281,2164],{"class":111},[97,110283,101582],{"class":103},[97,110285,95870],{"class":370},[97,110287,3930],{"class":103},[97,110289,110290,110292,110294,110296,110298],{"class":99,"line":8201},[97,110291,101591],{"class":103},[97,110293,115],{"class":319},[97,110295,101596],{"class":103},[97,110297,101498],{"class":370},[97,110299,329],{"class":103},[97,110301,110302,110304,110306],{"class":99,"line":8206},[97,110303,101605],{"class":103},[97,110305,115],{"class":319},[97,110307,101610],{"class":103},[97,110309,110310],{"class":99,"line":8212},[97,110311,2591],{"emptyLinePlaceholder":249},[97,110313,110314,110316,110318,110320,110322],{"class":99,"line":8224},[97,110315,105253],{"class":103},[97,110317,537],{"class":370},[97,110319,4634],{"class":103},[97,110321,115],{"class":319},[97,110323,110324],{"class":370}," 0.1\n",[97,110326,110327],{"class":99,"line":8236},[97,110328,105266],{"class":103},[97,110330,110331],{"class":99,"line":8248},[97,110332,2591],{"emptyLinePlaceholder":249},[97,110334,110335,110338,110340],{"class":99,"line":9907},[97,110336,110337],{"class":103},"    total_reward ",[97,110339,115],{"class":319},[97,110341,104945],{"class":370},[97,110343,110344],{"class":99,"line":9932},[97,110345,2591],{"emptyLinePlaceholder":249},[97,110347,110348,110350,110352,110354,110356,110358,110360],{"class":99,"line":9955},[97,110349,3392],{"class":319},[97,110351,31806],{"class":103},[97,110353,26233],{"class":319},[97,110355,32633],{"class":370},[97,110357,323],{"class":103},[97,110359,6601],{"class":370},[97,110361,30976],{"class":103},[97,110363,110364,110367,110369],{"class":99,"line":9979},[97,110365,110366],{"class":103},"        obs ",[97,110368,115],{"class":319},[97,110370,110371],{"class":103}," get_observation(data)\n",[97,110373,110374,110377,110379,110381,110383],{"class":99,"line":9984},[97,110375,110376],{"class":103},"        pole_angle ",[97,110378,115],{"class":319},[97,110380,110220],{"class":103},[97,110382,537],{"class":370},[97,110384,33436],{"class":103},[97,110386,110387,110390,110392,110394,110396],{"class":99,"line":9989},[97,110388,110389],{"class":103},"        pole_angular_velocity ",[97,110391,115],{"class":319},[97,110393,110220],{"class":103},[97,110395,392],{"class":370},[97,110397,33436],{"class":103},[97,110399,110400],{"class":99,"line":9994},[97,110401,2591],{"emptyLinePlaceholder":249},[97,110403,110404,110407,110409,110412,110414,110416,110418,110420,110422],{"class":99,"line":10003},[97,110405,110406],{"class":103},"        action ",[97,110408,115],{"class":319},[97,110410,110411],{"class":370}," 2.0",[97,110413,6709],{"class":319},[97,110415,110004],{"class":103},[97,110417,801],{"class":319},[97,110419,62051],{"class":370},[97,110421,6709],{"class":319},[97,110423,110424],{"class":103}," pole_angular_velocity\n",[97,110426,110427,110429,110431,110433,110435,110437,110439,110441],{"class":99,"line":10008},[97,110428,110406],{"class":103},[97,110430,115],{"class":319},[97,110432,107631],{"class":103},[97,110434,852],{"class":319},[97,110436,102587],{"class":370},[97,110438,12626],{"class":103},[97,110440,102587],{"class":370},[97,110442,329],{"class":103},[97,110444,110445],{"class":99,"line":10014},[97,110446,2591],{"emptyLinePlaceholder":249},[97,110448,110449,110451,110453,110455,110457],{"class":99,"line":10035},[97,110450,106801],{"class":103},[97,110452,511],{"class":370},[97,110454,4634],{"class":103},[97,110456,115],{"class":319},[97,110458,107654],{"class":103},[97,110460,110461],{"class":99,"line":10041},[97,110462,101700],{"class":103},[97,110464,110465],{"class":99,"line":10055},[97,110466,2591],{"emptyLinePlaceholder":249},[97,110468,110469,110472,110474],{"class":99,"line":10061},[97,110470,110471],{"class":103},"        reward ",[97,110473,115],{"class":319},[97,110475,110476],{"class":103}," compute_reward(get_observation(data))\n",[97,110478,110479,110482,110484],{"class":99,"line":10088},[97,110480,110481],{"class":103},"        total_reward ",[97,110483,9668],{"class":319},[97,110485,110486],{"class":103}," reward\n",[97,110488,110489],{"class":99,"line":10097},[97,110490,2591],{"emptyLinePlaceholder":249},[97,110492,110493,110495,110497,110499,110501,110503,110505],{"class":99,"line":10103},[97,110494,2688],{"class":319},[97,110496,31806],{"class":103},[97,110498,648],{"class":319},[97,110500,5945],{"class":370},[97,110502,101743],{"class":319},[97,110504,4284],{"class":370},[97,110506,3930],{"class":103},[97,110508,110509,110511,110513,110516,110519,110522,110525,110527,110530,110533,110535,110537,110539,110541,110544,110546],{"class":99,"line":10111},[97,110510,34840],{"class":370},[97,110512,323],{"class":103},[97,110514,110515],{"class":118},"\"step:\"",[97,110517,110518],{"class":103},", step, ",[97,110520,110521],{"class":118},"\"obs:\"",[97,110523,110524],{"class":103},", np.round(obs, ",[97,110526,392],{"class":370},[97,110528,110529],{"class":103},"), ",[97,110531,110532],{"class":118},"\"action:\"",[97,110534,12626],{"class":103},[97,110536,32208],{"class":370},[97,110538,323],{"class":103},[97,110540,362],{"class":370},[97,110542,110543],{"class":103},"(action), ",[97,110545,392],{"class":370},[97,110547,30687],{"class":103},[97,110549,110550],{"class":99,"line":10116},[97,110551,2591],{"emptyLinePlaceholder":249},[97,110553,110554,110556,110558,110561,110563,110565,110568,110570],{"class":99,"line":16794},[97,110555,31489],{"class":370},[97,110557,323],{"class":103},[97,110559,110560],{"class":118},"\"total_reward:\"",[97,110562,12626],{"class":103},[97,110564,32208],{"class":370},[97,110566,110567],{"class":103},"(total_reward, ",[97,110569,392],{"class":370},[97,110571,30687],{"class":103},[97,110573,110574,110576,110578,110581,110584,110586],{"class":99,"line":16800},[97,110575,31489],{"class":370},[97,110577,323],{"class":103},[97,110579,110580],{"class":118},"\"final obs:\"",[97,110582,110583],{"class":103},", np.round(get_observation(data), ",[97,110585,392],{"class":370},[97,110587,30687],{"class":103},[97,110589,110590],{"class":99,"line":16823},[97,110591,2591],{"emptyLinePlaceholder":249},[97,110593,110594],{"class":99,"line":16829},[97,110595,2591],{"emptyLinePlaceholder":249},[97,110597,110598,110600,110602,110604,110606],{"class":99,"line":16852},[97,110599,1723],{"class":319},[97,110601,31410],{"class":370},[97,110603,101743],{"class":319},[97,110605,101746],{"class":118},[97,110607,3930],{"class":103},[97,110609,110610],{"class":99,"line":16866},[97,110611,101753],{"class":103},[24,110613,103754],{},[87,110615,110617],{"className":24011,"code":110616,"language":24013,"meta":92,"style":92},"touch ch6_cartpole.py\n",[94,110618,110619],{"__ignoreMap":92},[97,110620,110621,110623],{"class":99,"line":100},[97,110622,101467],{"class":111},[97,110624,110625],{"class":118}," ch6_cartpole.py\n",[24,110627,110628],{},"运行：",[87,110630,110632],{"className":24011,"code":110631,"language":24013,"meta":92,"style":92},"python ch6_cartpole.py\n",[94,110633,110634],{"__ignoreMap":92},[97,110635,110636,110638],{"class":99,"line":100},[97,110637,30570],{"class":111},[97,110639,110625],{"class":118},[48,110641,101756],{"id":101756},[24,110643,110644],{},"构造观测：",[87,110646,110648],{"className":30568,"code":110647,"language":30570,"meta":92,"style":92},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[94,110649,110650,110658],{"__ignoreMap":92},[97,110651,110652,110654,110656],{"class":99,"line":100},[97,110653,32137],{"class":319},[97,110655,110178],{"class":111},[97,110657,110181],{"class":103},[97,110659,110660,110662],{"class":99,"line":195},[97,110661,4281],{"class":319},[97,110663,110188],{"class":103},[24,110665,110666,110669,110670,110672,110673,110675],{},[94,110667,110668],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[94,110671,104214],{}," 2 维，",[94,110674,104544],{}," 2 维，所以 obs 是 4 维。",[24,110677,110678],{},"设置初始角度：",[87,110680,110682],{"className":30568,"code":110681,"language":30570,"meta":92,"style":92},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[94,110683,110684,110696],{"__ignoreMap":92},[97,110685,110686,110688,110690,110692,110694],{"class":99,"line":100},[97,110687,104883],{"class":103},[97,110689,537],{"class":370},[97,110691,4634],{"class":103},[97,110693,115],{"class":319},[97,110695,110324],{"class":370},[97,110697,110698],{"class":99,"line":195},[97,110699,104727],{"class":103},[24,110701,110702],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[24,110704,110705],{},"简单反馈控制：",[87,110707,110709],{"className":30568,"code":110708,"language":30570,"meta":92,"style":92},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[94,110710,110711,110731],{"__ignoreMap":92},[97,110712,110713,110715,110717,110719,110721,110723,110725,110727,110729],{"class":99,"line":100},[97,110714,107626],{"class":103},[97,110716,115],{"class":319},[97,110718,110411],{"class":370},[97,110720,6709],{"class":319},[97,110722,110004],{"class":103},[97,110724,801],{"class":319},[97,110726,62051],{"class":370},[97,110728,6709],{"class":319},[97,110730,110424],{"class":103},[97,110732,110733,110735,110737,110739,110741,110743,110745,110747],{"class":99,"line":195},[97,110734,107626],{"class":103},[97,110736,115],{"class":319},[97,110738,107631],{"class":103},[97,110740,852],{"class":319},[97,110742,102587],{"class":370},[97,110744,12626],{"class":103},[97,110746,102587],{"class":370},[97,110748,329],{"class":103},[24,110750,110751],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[24,110753,110754],{},"限制动作：",[87,110756,110758],{"className":30568,"code":110757,"language":30570,"meta":92,"style":92},"np.clip(action, -1.0, 1.0)\n",[94,110759,110760],{"__ignoreMap":92},[97,110761,110762,110765,110767,110769,110771,110773],{"class":99,"line":100},[97,110763,110764],{"class":103},"np.clip(action, ",[97,110766,852],{"class":319},[97,110768,102587],{"class":370},[97,110770,12626],{"class":103},[97,110772,102587],{"class":370},[97,110774,329],{"class":103},[24,110776,110777,110778,110781],{},"因为 XML 里 ",[94,110779,110780],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[48,110783,101892],{"id":101892},[87,110785,110786],{"className":30568,"code":110647,"language":30570,"meta":92,"style":92},[94,110787,110788,110796],{"__ignoreMap":92},[97,110789,110790,110792,110794],{"class":99,"line":100},[97,110791,32137],{"class":319},[97,110793,110178],{"class":111},[97,110795,110181],{"class":103},[97,110797,110798,110800],{"class":99,"line":195},[97,110799,4281],{"class":319},[97,110801,110188],{"class":103},[24,110803,110804,110805,110808,110809,110812,110813,110816],{},"这段定义了一个函数，用来获取当前观测。",[94,110806,110807],{},"data.qpos.copy()"," 是位置数组副本，",[94,110810,110811],{},"data.qvel.copy()"," 是速度数组副本。",[94,110814,110815],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[24,110818,110819],{},"在本章模型里：",[87,110821,110824],{"className":110822,"code":110823,"language":5378,"meta":92},[5376],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[94,110825,110823],{"__ignoreMap":92},[24,110827,110828],{},"所以返回的 obs 是：",[87,110830,110833],{"className":110831,"code":110832,"language":5378,"meta":92},[5376],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[94,110834,110832],{"__ignoreMap":92},[87,110836,110838],{"className":30568,"code":110837,"language":30570,"meta":92,"style":92},"def compute_reward(obs: np.ndarray) -> float:\n",[94,110839,110840],{"__ignoreMap":92},[97,110841,110842,110844,110846,110848,110850],{"class":99,"line":100},[97,110843,32137],{"class":319},[97,110845,110203],{"class":111},[97,110847,110206],{"class":103},[97,110849,362],{"class":370},[97,110851,3930],{"class":103},[24,110853,110854,110855,110858],{},"这行定义奖励函数。输入是观测 ",[94,110856,110857],{},"obs","，输出是一个浮点数奖励。",[87,110860,110862],{"className":30568,"code":110861,"language":30570,"meta":92,"style":92},"cart_x = obs[0]\npole_angle = obs[1]\n",[94,110863,110864,110877],{"__ignoreMap":92},[97,110865,110866,110869,110871,110873,110875],{"class":99,"line":100},[97,110867,110868],{"class":103},"cart_x ",[97,110870,115],{"class":319},[97,110872,110220],{"class":103},[97,110874,511],{"class":370},[97,110876,33436],{"class":103},[97,110878,110879,110882,110884,110886,110888],{"class":99,"line":195},[97,110880,110881],{"class":103},"pole_angle ",[97,110883,115],{"class":319},[97,110885,110220],{"class":103},[97,110887,537],{"class":370},[97,110889,33436],{"class":103},[24,110891,110892,110893,110896,110897,110900],{},"数组索引从 0 开始。",[94,110894,110895],{},"obs[0]"," 是第一个元素，也就是小车位置。",[94,110898,110899],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[87,110902,110903],{"className":30568,"code":109972,"language":30570,"meta":92,"style":92},[94,110904,110905],{"__ignoreMap":92},[97,110906,110907,110909,110911,110913,110915,110917,110919,110921,110923,110925,110927,110929,110931,110933],{"class":99,"line":100},[97,110908,17236],{"class":319},[97,110910,109981],{"class":370},[97,110912,323],{"class":103},[97,110914,102587],{"class":370},[97,110916,52455],{"class":319},[97,110918,109990],{"class":370},[97,110920,6709],{"class":319},[97,110922,109995],{"class":103},[97,110924,775],{"class":319},[97,110926,109995],{"class":103},[97,110928,852],{"class":319},[97,110930,110004],{"class":103},[97,110932,775],{"class":319},[97,110934,110009],{"class":103},[24,110936,110937,110938,110941,110942,110945],{},"这行计算奖励。",[94,110939,110940],{},"cart_x * cart_x"," 是小车位置的平方，",[94,110943,110944],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[87,110947,110949],{"className":30568,"code":110948,"language":30570,"meta":92,"style":92},"data.qpos[1] = 0.1\n",[94,110950,110951],{"__ignoreMap":92},[97,110952,110953,110955,110957,110959,110961],{"class":99,"line":100},[97,110954,104883],{"class":103},[97,110956,537],{"class":370},[97,110958,4634],{"class":103},[97,110960,115],{"class":319},[97,110962,110324],{"class":370},[24,110964,110965,110966,110968,110969,110971],{},"手动设置杆子的初始角度。因为 ",[94,110967,105640],{}," 是小车位置，",[94,110970,105643],{}," 是杆子角度，所以这里改的是杆子。",[87,110973,110974],{"className":30568,"code":104727,"language":30570,"meta":92,"style":92},[94,110975,110976],{"__ignoreMap":92},[97,110977,110978],{"class":99,"line":100},[97,110979,104727],{"class":103},[24,110981,105686,110982,110984],{},[94,110983,104214],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[87,110986,110988],{"className":30568,"code":110987,"language":30570,"meta":92,"style":92},"total_reward = 0.0\n",[94,110989,110990],{"__ignoreMap":92},[97,110991,110992,110995,110997],{"class":99,"line":100},[97,110993,110994],{"class":103},"total_reward ",[97,110996,115],{"class":319},[97,110998,104945],{"class":370},[24,111000,111001],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[87,111003,111005],{"className":30568,"code":111004,"language":30570,"meta":92,"style":92},"for step in range(1000):\n",[94,111006,111007],{"__ignoreMap":92},[97,111008,111009,111011,111013,111015,111017,111019,111021],{"class":99,"line":100},[97,111010,3216],{"class":319},[97,111012,31806],{"class":103},[97,111014,26233],{"class":319},[97,111016,32633],{"class":370},[97,111018,323],{"class":103},[97,111020,6601],{"class":370},[97,111022,30976],{"class":103},[24,111024,111025,111026,111028],{},"循环 1000 步。",[94,111027,107318],{}," 是当前步数，从 0 到 999。",[87,111030,111032],{"className":30568,"code":111031,"language":30570,"meta":92,"style":92},"obs = get_observation(data)\n",[94,111033,111034],{"__ignoreMap":92},[97,111035,111036,111039,111041],{"class":99,"line":100},[97,111037,111038],{"class":103},"obs ",[97,111040,115],{"class":319},[97,111042,110371],{"class":103},[24,111044,111045,111046,28575],{},"读取当前状态，保存到 ",[94,111047,110857],{},[87,111049,111051],{"className":30568,"code":111050,"language":30570,"meta":92,"style":92},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[94,111052,111053,111065],{"__ignoreMap":92},[97,111054,111055,111057,111059,111061,111063],{"class":99,"line":100},[97,111056,110881],{"class":103},[97,111058,115],{"class":319},[97,111060,110220],{"class":103},[97,111062,537],{"class":370},[97,111064,33436],{"class":103},[97,111066,111067,111070,111072,111074,111076],{"class":99,"line":195},[97,111068,111069],{"class":103},"pole_angular_velocity ",[97,111071,115],{"class":319},[97,111073,110220],{"class":103},[97,111075,392],{"class":370},[97,111077,33436],{"class":103},[24,111079,111080,111081,111084,111085,28575],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[94,111082,111083],{},"obs[3]","？因为 obs 的顺序是 ",[94,111086,111087],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[87,111089,111091],{"className":30568,"code":111090,"language":30570,"meta":92,"style":92},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[94,111092,111093],{"__ignoreMap":92},[97,111094,111095,111097,111099,111101,111103,111105,111107,111109,111111],{"class":99,"line":100},[97,111096,107626],{"class":103},[97,111098,115],{"class":319},[97,111100,110411],{"class":370},[97,111102,6709],{"class":319},[97,111104,110004],{"class":103},[97,111106,801],{"class":319},[97,111108,62051],{"class":370},[97,111110,6709],{"class":319},[97,111112,110424],{"class":103},[24,111114,111115,111116,101202,111118,111120],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[94,111117,105444],{},[94,111119,35519],{}," 是人为设置的系数，不是固定公式。",[87,111122,111124],{"className":30568,"code":111123,"language":30570,"meta":92,"style":92},"action = np.clip(action, -1.0, 1.0)\n",[94,111125,111126],{"__ignoreMap":92},[97,111127,111128,111130,111132,111134,111136,111138,111140,111142],{"class":99,"line":100},[97,111129,107626],{"class":103},[97,111131,115],{"class":319},[97,111133,107631],{"class":103},[97,111135,852],{"class":319},[97,111137,102587],{"class":370},[97,111139,12626],{"class":103},[97,111141,102587],{"class":370},[97,111143,329],{"class":103},[24,111145,111146],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[87,111148,111149],{"className":30568,"code":109957,"language":30570,"meta":92,"style":92},[94,111150,111151],{"__ignoreMap":92},[97,111152,111153,111155,111157,111159,111161],{"class":99,"line":100},[97,111154,106055],{"class":103},[97,111156,511],{"class":370},[97,111158,4634],{"class":103},[97,111160,115],{"class":319},[97,111162,107654],{"class":103},[24,111164,111165],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[87,111167,111168],{"className":30568,"code":104689,"language":30570,"meta":92,"style":92},[94,111169,111170],{"__ignoreMap":92},[97,111171,111172],{"class":99,"line":100},[97,111173,104689],{"class":103},[24,111175,111176,111177,111179],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[94,111178,106310],{}," 计算小车和杆子的下一刻状态。",[87,111181,111183],{"className":30568,"code":111182,"language":30570,"meta":92,"style":92},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[94,111184,111185,111194],{"__ignoreMap":92},[97,111186,111187,111190,111192],{"class":99,"line":100},[97,111188,111189],{"class":103},"reward ",[97,111191,115],{"class":319},[97,111193,110476],{"class":103},[97,111195,111196,111198,111200],{"class":99,"line":195},[97,111197,110994],{"class":103},[97,111199,9668],{"class":319},[97,111201,110486],{"class":103},[24,111203,111204,111205,111207,111208,111211,111212,28575],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[94,111206,9668],{}," 是简写，",[94,111209,111210],{},"total_reward += reward"," 等价于 ",[94,111213,111214],{},"total_reward = total_reward + reward",[87,111216,111218],{"className":30568,"code":111217,"language":30570,"meta":92,"style":92},"if step % 100 == 0:\n",[94,111219,111220],{"__ignoreMap":92},[97,111221,111222,111224,111226,111228,111230,111232,111234],{"class":99,"line":100},[97,111223,1723],{"class":319},[97,111225,31806],{"class":103},[97,111227,648],{"class":319},[97,111229,5945],{"class":370},[97,111231,101743],{"class":319},[97,111233,4284],{"class":370},[97,111235,3930],{"class":103},[24,111237,111238,111240,111241,111244],{},[94,111239,648],{}," 是取余数。",[94,111242,111243],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[87,111246,111248],{"className":30568,"code":111247,"language":30570,"meta":92,"style":92},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[94,111249,111250],{"__ignoreMap":92},[97,111251,111252,111254,111256,111258,111260,111262,111264,111266,111268,111270,111272,111274,111276,111278,111280,111282],{"class":99,"line":100},[97,111253,30605],{"class":370},[97,111255,323],{"class":103},[97,111257,110515],{"class":118},[97,111259,110518],{"class":103},[97,111261,110521],{"class":118},[97,111263,110524],{"class":103},[97,111265,392],{"class":370},[97,111267,110529],{"class":103},[97,111269,110532],{"class":118},[97,111271,12626],{"class":103},[97,111273,32208],{"class":370},[97,111275,323],{"class":103},[97,111277,362],{"class":370},[97,111279,110543],{"class":103},[97,111281,392],{"class":370},[97,111283,30687],{"class":103},[24,111285,111286,111287,111290,111291,111294],{},"打印当前步数、观测和动作。",[94,111288,111289],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[94,111292,111293],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111296,102500],{"id":102499},[24,111298,111299],{},"观测向量:",[87,111301,111304],{"className":111302,"code":111303,"language":5378,"meta":92},[5376],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[94,111305,111303],{"__ignoreMap":92},[24,111307,111308],{},"控制器是教学用的简单线性反馈，不保证最优。",[24,111310,111311],{},"每隔 100 步会打印一次：",[87,111313,111316],{"className":111314,"code":111315,"language":5378,"meta":92},[5376],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[94,111317,111315],{"__ignoreMap":92},[24,111319,111320],{},"重点观察：",[138,111322,111323,111329,111334],{},[70,111324,111325,111328],{},[94,111326,111327],{},"pole_angle"," 是否越来越大。",[70,111330,111331,111333],{},[94,111332,109910],{}," 是否跑得太远。",[70,111335,111336,111337,82723,111339,28575],{},"action 是否经常被 clip 到 ",[94,111338,104099],{},[94,111340,537],{},[24,111342,111343],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111345,102532],{"id":102531},[138,111347,111348,111354,111357,111363,111373,111379,111382],{},[70,111349,111350,111351,28575],{},"把初始角度改为 ",[94,111352,111353],{},"data.qpos[1] = 0.3",[70,111355,111356],{},"重新运行，观察控制是否变差。",[70,111358,111359,111360,111362],{},"把 actuator ",[94,111361,107251],{}," 改小。",[70,111364,111365,111366,111369,111370,28575],{},"打印 ",[94,111367,111368],{},"model.nq, model.nv, model.nu","，应为 ",[94,111371,111372],{},"2 2 1",[70,111374,111375,111376,111378],{},"把 reward 里的 ",[94,111377,110944],{}," 系数改大，观察总奖励变化。",[70,111380,111381],{},"把控制器改成反号，观察杆子是否更容易倒。",[70,111383,111384],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111386,102637],{"id":102636},[48,111388,111389],{"id":111389},"杆子方向和预期不一致",[24,111391,102580,111392,111394,111395,111397],{},[94,111393,106423],{}," 和 capsule 的 ",[94,111396,103360],{},"，必要时用 viewer 可视化确认。",[48,111399,111400],{"id":111400},"控制器越控越倒",[24,111402,111403],{},"说明反馈符号可能反了，尝试:",[87,111405,111407],{"className":30568,"code":111406,"language":30570,"meta":92,"style":92},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[94,111408,111409],{"__ignoreMap":92},[97,111410,111411,111413,111415,111417,111419,111421,111423,111425,111427,111429],{"class":99,"line":100},[97,111412,107626],{"class":103},[97,111414,115],{"class":319},[97,111416,52455],{"class":319},[97,111418,105444],{"class":370},[97,111420,6709],{"class":319},[97,111422,110004],{"class":103},[97,111424,852],{"class":319},[97,111426,62051],{"class":370},[97,111428,6709],{"class":319},[97,111430,110424],{"class":103},[48,111432,111433],{"id":111433},"小车飞走",[24,111435,111436,111437,111439,111440,111443],{},"降低 ",[94,111438,107251],{}," 或缩小 ",[94,111441,111442],{},"action"," 的 clip 范围。",[48,111445,111447,111449],{"id":111446},"obs3-为什么是杆子角速度",[94,111448,111083],{}," 为什么是杆子角速度",[24,111451,111452],{},"因为这个模型里：",[87,111454,111457],{"className":111455,"code":111456,"language":5378,"meta":92},[5376],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[94,111458,111456],{"__ignoreMap":92},[24,111460,109931],{},[87,111462,111465],{"className":111463,"code":111464,"language":5378,"meta":92},[5376],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[94,111466,111464],{"__ignoreMap":92},[48,111468,111470],{"id":111469},"reward-变成负数是否错误","reward 变成负数是否错误",[24,111472,111473],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111475,102791],{"id":102790},[24,111477,111478],{},"一个控制任务通常包含：",[138,111480,111481,111484,111492,111497,111500],{},[70,111482,111483],{},"模型：Cartpole 的 body、joint、actuator。",[70,111485,111486,111487,532,111489,111491],{},"观测：从 ",[94,111488,104214],{},[94,111490,104544],{}," 里取状态。",[70,111493,111494,111495,28575],{},"动作：写入 ",[94,111496,101260],{},[70,111498,111499],{},"奖励：根据任务目标打分。",[70,111501,111502],{},"循环：obs -> action -> step -> reward。",[24,111504,111505],{},"这就是后面 Gymnasium 环境的基本骨架。",[231,111507,104470],{},{"title":92,"searchDepth":195,"depth":195,"links":111509},[111510,111511,111512,111517,111521,111522,111523,111531],{"id":100830,"depth":195,"text":100831},{"id":100953,"depth":195,"text":100954},{"id":101228,"depth":195,"text":101229,"children":111513},[111514,111515,111516],{"id":109884,"depth":241,"text":109885},{"id":109949,"depth":241,"text":109950},{"id":109965,"depth":241,"text":109966},{"id":101436,"depth":195,"text":101437,"children":111518},[111519,111520],{"id":101756,"depth":241,"text":101756},{"id":101892,"depth":241,"text":101892},{"id":102499,"depth":195,"text":102500},{"id":102531,"depth":195,"text":102532},{"id":102636,"depth":195,"text":102637,"children":111524},[111525,111526,111527,111528,111530],{"id":111389,"depth":241,"text":111389},{"id":111400,"depth":241,"text":111400},{"id":111433,"depth":241,"text":111433},{"id":111446,"depth":241,"text":111529},"obs[3] 为什么是杆子角速度",{"id":111469,"depth":241,"text":111470},{"id":102790,"depth":195,"text":102791},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109620,"description":92},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111538,"title":111539,"body":111540,"description":92,"extension":247,"meta":113554,"navigation":249,"path":113555,"seo":113556,"stem":113557,"__hash__":113558},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111541,"toc":113530},[111542,111545,111547,111550,111552,111569,111572,111575,111581,111584,111586,111588,111612,111614,111628,111630,111671,111673,111691,111693,111696,111702,111705,111733,111737,111743,111768,111771,111802,111809,111812,111815,111821,111824,111830,111833,111839,111843,111846,111871,111874,111876,112636,112638,112650,112652,112663,112665,112668,112685,112688,112690,112701,112704,112706,112752,112755,112768,112771,112853,112856,112858,112874,112884,112897,112900,112939,112949,112960,112970,112983,112986,113015,113018,113028,113031,113037,113054,113065,113067,113073,113090,113101,113122,113125,113137,113140,113161,113164,113172,113180,113197,113200,113269,113276,113284,113287,113300,113307,113309,113312,113318,113321,113324,113330,113336,113338,113378,113380,113386,113395,113398,113400,113420,113423,113426,113432,113436,113438,113465,113468,113471,113498,113504,113507,113510,113512,113515,113518,113524,113527],[10,111543,111539],{"id":111544},"_7控制任务reacher-机械臂到达目标",[14,111546,100831],{"id":100830},[24,111548,111549],{},"本章搭建一个二维两关节 reacher 任务。",[24,111551,104515],{},[138,111553,111554,111557,111560,111563,111566],{},[70,111555,111556],{},"两个 hinge joint",[70,111558,111559],{},"两个 motor actuator",[70,111561,111562],{},"site 作为末端点和目标点",[70,111564,111565],{},"根据末端和目标距离设计 reward",[70,111567,111568],{},"构造机械臂任务的基本形式",[24,111570,111571],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[24,111573,111574],{},"Reacher 任务可以理解为：",[87,111576,111579],{"className":111577,"code":111578,"language":5378,"meta":92},[5376],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[94,111580,111578],{"__ignoreMap":92},[24,111582,111583],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111585,100954],{"id":100953},[24,111587,100957],{},[87,111589,111590],{"className":24011,"code":104572,"language":24013,"meta":92,"style":92},[94,111591,111592],{"__ignoreMap":92},[97,111593,111594,111596,111598,111600,111602,111604,111606,111608,111610],{"class":99,"line":100},[97,111595,24766],{"class":111},[97,111597,26505],{"class":118},[97,111599,24023],{"class":118},[97,111601,26590],{"class":370},[97,111603,104587],{"class":118},[97,111605,100982],{"class":118},[97,111607,102685],{"class":118},[97,111609,100998],{"class":118},[97,111611,104596],{"class":118},[24,111613,103003],{},[87,111615,111616],{"className":24011,"code":101103,"language":24013,"meta":92,"style":92},[94,111617,111618],{"__ignoreMap":92},[97,111619,111620,111622,111624,111626],{"class":99,"line":100},[97,111621,24020],{"class":111},[97,111623,24023],{"class":118},[97,111625,101114],{"class":118},[97,111627,101117],{"class":118},[24,111629,103020],{},[87,111631,111633],{"className":24011,"code":111632,"language":24013,"meta":92,"style":92},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[94,111634,111635,111652,111661],{"__ignoreMap":92},[97,111636,111637,111639,111641,111643,111646,111648,111650],{"class":99,"line":100},[97,111638,30520],{"class":111},[97,111640,29366],{"class":118},[97,111642,25305],{"class":370},[97,111644,111645],{"class":118}," mujoco-reacher",[97,111647,101159],{"class":118},[97,111649,101162],{"class":370},[97,111651,101165],{"class":370},[97,111653,111654,111656,111658],{"class":99,"line":195},[97,111655,30520],{"class":111},[97,111657,101172],{"class":118},[97,111659,111660],{"class":118}," mujoco-reacher\n",[97,111662,111663,111665,111667,111669],{"class":99,"line":241},[97,111664,24020],{"class":111},[97,111666,24023],{"class":118},[97,111668,101114],{"class":118},[97,111670,101117],{"class":118},[24,111672,101188],{},[138,111674,111675,111678,111681],{},[70,111676,111677],{},"本章使用低维状态，不使用图像输入。",[70,111679,111680],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[70,111682,111683,111684,532,111686,532,111688,111690],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[94,111685,104214],{},[94,111687,104544],{},[94,111689,103864],{}," 的方法一致。",[14,111692,101229],{"id":101228},[24,111694,111695],{},"Reacher 任务核心:",[87,111697,111700],{"className":111698,"code":111699,"language":5378,"meta":92},[5376],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[94,111701,111699],{"__ignoreMap":92},[24,111703,111704],{},"读取 site 世界坐标:",[87,111706,111708],{"className":30568,"code":111707,"language":30570,"meta":92,"style":92},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[94,111709,111710,111723],{"__ignoreMap":92},[97,111711,111712,111714,111716,111718,111721],{"class":99,"line":100},[97,111713,103818],{"class":103},[97,111715,115],{"class":319},[97,111717,103589],{"class":103},[97,111719,111720],{"class":118},"\"tip\"",[97,111722,329],{"class":103},[97,111724,111725,111728,111730],{"class":99,"line":195},[97,111726,111727],{"class":103},"tip_pos ",[97,111729,115],{"class":319},[97,111731,111732],{"class":103}," data.site_xpos[site_id]\n",[48,111734,111736],{"id":111735},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[24,111738,111739,111740,111742],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[94,111741,104214],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[87,111744,111746],{"className":30568,"code":111745,"language":30570,"meta":92,"style":92},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[94,111747,111748,111758],{"__ignoreMap":92},[97,111749,111750,111753,111755],{"class":99,"line":100},[97,111751,111752],{"class":103},"tip ",[97,111754,115],{"class":319},[97,111756,111757],{"class":103}," data.site_xpos[tip_site_id]\n",[97,111759,111760,111763,111765],{"class":99,"line":195},[97,111761,111762],{"class":103},"target ",[97,111764,115],{"class":319},[97,111766,111767],{"class":103}," data.site_xpos[target_site_id]\n",[24,111769,111770],{},"这样 reward 就很容易写：",[87,111772,111774],{"className":30568,"code":111773,"language":30570,"meta":92,"style":92},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[94,111775,111776,111791],{"__ignoreMap":92},[97,111777,111778,111781,111783,111786,111788],{"class":99,"line":100},[97,111779,111780],{"class":103},"dist ",[97,111782,115],{"class":319},[97,111784,111785],{"class":103}," np.linalg.norm(tip ",[97,111787,852],{"class":319},[97,111789,111790],{"class":103}," target)\n",[97,111792,111793,111795,111797,111799],{"class":99,"line":195},[97,111794,111189],{"class":103},[97,111796,115],{"class":319},[97,111798,52455],{"class":319},[97,111800,111801],{"class":103},"dist\n",[24,111803,111804,111805,111808],{},"距离越小，",[94,111806,111807],{},"-dist"," 越接近 0，奖励越高。",[48,111810,111811],{"id":111811},"两关节机械臂的状态",[24,111813,111814],{},"这个模型有两个 hinge joint：",[87,111816,111819],{"className":111817,"code":111818,"language":5378,"meta":92},[5376],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[94,111820,111818],{"__ignoreMap":92},[24,111822,111823],{},"再加上末端和目标位置：",[87,111825,111828],{"className":111826,"code":111827,"language":5378,"meta":92},[5376],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[94,111829,111827],{"__ignoreMap":92},[24,111831,111832],{},"总维度：",[87,111834,111837],{"className":111835,"code":111836,"language":5378,"meta":92},[5376],"2 + 2 + 3 + 3 = 10\n",[94,111838,111836],{"__ignoreMap":92},[48,111840,111842],{"id":111841},"为什么-gravity-是-0","为什么 gravity 是 0",[24,111844,111845],{},"本章把重力设为：",[87,111847,111849],{"className":53251,"code":111848,"language":53253,"meta":92,"style":92},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[94,111850,111851],{"__ignoreMap":92},[97,111852,111853,111855,111857,111859,111861,111863,111865,111867,111869],{"class":99,"line":100},[97,111854,104],{"class":103},[97,111856,69350],{"class":107},[97,111858,101378],{"class":111},[97,111860,115],{"class":103},[97,111862,101383],{"class":118},[97,111864,101386],{"class":111},[97,111866,115],{"class":103},[97,111868,103955],{"class":118},[97,111870,101328],{"class":103},[24,111872,111873],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111875,101437],{"id":101436},[87,111877,111879],{"className":30568,"code":111878,"language":30570,"meta":92,"style":92},"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",[94,111880,111881,111887,111897,111901,111905,111913,111918,111923,111927,111931,111936,111941,111945,111950,111955,111960,111964,111969,111974,111979,111984,111988,111992,111996,112000,112004,112009,112014,112018,112022,112026,112030,112034,112049,112058,112070,112093,112100,112104,112108,112118,112132,112146,112153,112157,112161,112175,112187,112199,112212,112227,112244,112248,112252,112264,112276,112284,112292,112296,112312,112317,112330,112343,112358,112362,112397,112429,112433,112437,112446,112450,112466,112476,112487,112503,112519,112535,112551,112555,112573,112593,112612,112616,112620,112632],{"__ignoreMap":92},[97,111882,111883,111885],{"class":99,"line":100},[97,111884,30582],{"class":319},[97,111886,101485],{"class":103},[97,111888,111889,111891,111893,111895],{"class":99,"line":195},[97,111890,30582],{"class":319},[97,111892,31570],{"class":103},[97,111894,31573],{"class":319},[97,111896,31576],{"class":103},[97,111898,111899],{"class":99,"line":241},[97,111900,2591],{"emptyLinePlaceholder":249},[97,111902,111903],{"class":99,"line":1387},[97,111904,2591],{"emptyLinePlaceholder":249},[97,111906,111907,111909,111911],{"class":99,"line":1393},[97,111908,101498],{"class":370},[97,111910,13755],{"class":319},[97,111912,101503],{"class":118},[97,111914,111915],{"class":99,"line":1407},[97,111916,111917],{"class":118},"\u003Cmujoco model=\"two_link_reacher\">\n",[97,111919,111920],{"class":99,"line":1413},[97,111921,111922],{"class":118},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[97,111924,111925],{"class":99,"line":1504},[97,111926,2591],{"emptyLinePlaceholder":249},[97,111928,111929],{"class":99,"line":1510},[97,111930,101522],{"class":118},[97,111932,111933],{"class":99,"line":1522},[97,111934,111935],{"class":118},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[97,111937,111938],{"class":99,"line":1804},[97,111939,111940],{"class":118},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[97,111942,111943],{"class":99,"line":1809},[97,111944,2591],{"emptyLinePlaceholder":249},[97,111946,111947],{"class":99,"line":1815},[97,111948,111949],{"class":118},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[97,111951,111952],{"class":99,"line":1820},[97,111953,111954],{"class":118},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[97,111956,111957],{"class":99,"line":1834},[97,111958,111959],{"class":118},"      \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",[97,111961,111962],{"class":99,"line":1839},[97,111963,2591],{"emptyLinePlaceholder":249},[97,111965,111966],{"class":99,"line":1845},[97,111967,111968],{"class":118},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[97,111970,111971],{"class":99,"line":1866},[97,111972,111973],{"class":118},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[97,111975,111976],{"class":99,"line":1871},[97,111977,111978],{"class":118},"        \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",[97,111980,111981],{"class":99,"line":1885},[97,111982,111983],{"class":118},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[97,111985,111986],{"class":99,"line":1890},[97,111987,106622],{"class":118},[97,111989,111990],{"class":99,"line":1919},[97,111991,101551],{"class":118},[97,111993,111994],{"class":99,"line":1924},[97,111995,101556],{"class":118},[97,111997,111998],{"class":99,"line":1941},[97,111999,2591],{"emptyLinePlaceholder":249},[97,112001,112002],{"class":99,"line":1946},[97,112003,106639],{"class":118},[97,112005,112006],{"class":99,"line":1951},[97,112007,112008],{"class":118},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[97,112010,112011],{"class":99,"line":1956},[97,112012,112013],{"class":118},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[97,112015,112016],{"class":99,"line":1970},[97,112017,106649],{"class":118},[97,112019,112020],{"class":99,"line":1975},[97,112021,101561],{"class":118},[97,112023,112024],{"class":99,"line":2768},[97,112025,95882],{"class":118},[97,112027,112028],{"class":99,"line":2782},[97,112029,2591],{"emptyLinePlaceholder":249},[97,112031,112032],{"class":99,"line":2790},[97,112033,2591],{"emptyLinePlaceholder":249},[97,112035,112036,112038,112041,112044,112046],{"class":99,"line":2795},[97,112037,32137],{"class":319},[97,112039,112040],{"class":111}," site_position",[97,112042,112043],{"class":103},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[97,112045,1492],{"class":370},[97,112047,112048],{"class":103},") -> np.ndarray:\n",[97,112050,112051,112053,112055],{"class":99,"line":2801},[97,112052,103584],{"class":103},[97,112054,115],{"class":319},[97,112056,112057],{"class":103}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[97,112059,112060,112062,112064,112066,112068],{"class":99,"line":2807},[97,112061,3292],{"class":319},[97,112063,103633],{"class":103},[97,112065,104],{"class":319},[97,112067,4284],{"class":370},[97,112069,3930],{"class":103},[97,112071,112072,112074,112076,112078,112080,112083,112085,112087,112089,112091],{"class":99,"line":2812},[97,112073,103616],{"class":319},[97,112075,103619],{"class":370},[97,112077,323],{"class":103},[97,112079,374],{"class":319},[97,112081,112082],{"class":118},"\"site not found: ",[97,112084,1216],{"class":370},[97,112086,79994],{"class":103},[97,112088,1265],{"class":370},[97,112090,571],{"class":118},[97,112092,329],{"class":103},[97,112094,112095,112097],{"class":99,"line":8139},[97,112096,4281],{"class":319},[97,112098,112099],{"class":103}," data.site_xpos[site_id].copy()\n",[97,112101,112102],{"class":99,"line":8163},[97,112103,2591],{"emptyLinePlaceholder":249},[97,112105,112106],{"class":99,"line":8168},[97,112107,2591],{"emptyLinePlaceholder":249},[97,112109,112110,112112,112115],{"class":99,"line":8174},[97,112111,32137],{"class":319},[97,112113,112114],{"class":111}," get_obs",[97,112116,112117],{"class":103},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[97,112119,112120,112123,112125,112128,112130],{"class":99,"line":8201},[97,112121,112122],{"class":103},"    tip ",[97,112124,115],{"class":319},[97,112126,112127],{"class":103}," site_position(model, data, ",[97,112129,111720],{"class":118},[97,112131,329],{"class":103},[97,112133,112134,112137,112139,112141,112144],{"class":99,"line":8206},[97,112135,112136],{"class":103},"    target ",[97,112138,115],{"class":319},[97,112140,112127],{"class":103},[97,112142,112143],{"class":118},"\"target\"",[97,112145,329],{"class":103},[97,112147,112148,112150],{"class":99,"line":8212},[97,112149,4281],{"class":319},[97,112151,112152],{"class":103}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[97,112154,112155],{"class":99,"line":8224},[97,112156,2591],{"emptyLinePlaceholder":249},[97,112158,112159],{"class":99,"line":8236},[97,112160,2591],{"emptyLinePlaceholder":249},[97,112162,112163,112165,112168,112171,112173],{"class":99,"line":8248},[97,112164,32137],{"class":319},[97,112166,112167],{"class":111}," reward",[97,112169,112170],{"class":103},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[97,112172,362],{"class":370},[97,112174,3930],{"class":103},[97,112176,112177,112179,112181,112183,112185],{"class":99,"line":9907},[97,112178,112122],{"class":103},[97,112180,115],{"class":319},[97,112182,112127],{"class":103},[97,112184,111720],{"class":118},[97,112186,329],{"class":103},[97,112188,112189,112191,112193,112195,112197],{"class":99,"line":9932},[97,112190,112136],{"class":103},[97,112192,115],{"class":319},[97,112194,112127],{"class":103},[97,112196,112143],{"class":118},[97,112198,329],{"class":103},[97,112200,112201,112204,112206,112208,112210],{"class":99,"line":9955},[97,112202,112203],{"class":103},"    dist ",[97,112205,115],{"class":319},[97,112207,111785],{"class":103},[97,112209,852],{"class":319},[97,112211,111790],{"class":103},[97,112213,112214,112217,112219,112222,112224],{"class":99,"line":9979},[97,112215,112216],{"class":103},"    control_cost ",[97,112218,115],{"class":319},[97,112220,112221],{"class":370}," 0.01",[97,112223,6709],{"class":319},[97,112225,112226],{"class":103}," np.sum(np.square(data.ctrl))\n",[97,112228,112229,112231,112233,112235,112237,112239,112241],{"class":99,"line":9984},[97,112230,4281],{"class":319},[97,112232,109981],{"class":370},[97,112234,323],{"class":103},[97,112236,852],{"class":319},[97,112238,111780],{"class":103},[97,112240,852],{"class":319},[97,112242,112243],{"class":103}," control_cost)\n",[97,112245,112246],{"class":99,"line":9989},[97,112247,2591],{"emptyLinePlaceholder":249},[97,112249,112250],{"class":99,"line":9994},[97,112251,2591],{"emptyLinePlaceholder":249},[97,112253,112254,112256,112258,112260,112262],{"class":99,"line":10003},[97,112255,32137],{"class":319},[97,112257,2164],{"class":111},[97,112259,101582],{"class":103},[97,112261,95870],{"class":370},[97,112263,3930],{"class":103},[97,112265,112266,112268,112270,112272,112274],{"class":99,"line":10008},[97,112267,101591],{"class":103},[97,112269,115],{"class":319},[97,112271,101596],{"class":103},[97,112273,101498],{"class":370},[97,112275,329],{"class":103},[97,112277,112278,112280,112282],{"class":99,"line":10014},[97,112279,101605],{"class":103},[97,112281,115],{"class":319},[97,112283,101610],{"class":103},[97,112285,112286,112288,112290],{"class":99,"line":10035},[97,112287,110337],{"class":103},[97,112289,115],{"class":319},[97,112291,104945],{"class":370},[97,112293,112294],{"class":99,"line":10041},[97,112295,2591],{"emptyLinePlaceholder":249},[97,112297,112298,112300,112302,112304,112306,112308,112310],{"class":99,"line":10055},[97,112299,3392],{"class":319},[97,112301,31806],{"class":103},[97,112303,26233],{"class":319},[97,112305,32633],{"class":370},[97,112307,323],{"class":103},[97,112309,65258],{"class":370},[97,112311,30976],{"class":103},[97,112313,112314],{"class":99,"line":10061},[97,112315,112316],{"class":103},"        mujoco.mj_forward(model, data)\n",[97,112318,112319,112322,112324,112326,112328],{"class":99,"line":10088},[97,112320,112321],{"class":103},"        tip ",[97,112323,115],{"class":319},[97,112325,112127],{"class":103},[97,112327,111720],{"class":118},[97,112329,329],{"class":103},[97,112331,112332,112335,112337,112339,112341],{"class":99,"line":10097},[97,112333,112334],{"class":103},"        target ",[97,112336,115],{"class":319},[97,112338,112127],{"class":103},[97,112340,112143],{"class":118},[97,112342,329],{"class":103},[97,112344,112345,112348,112350,112353,112355],{"class":99,"line":10103},[97,112346,112347],{"class":103},"        error ",[97,112349,115],{"class":319},[97,112351,112352],{"class":103}," target ",[97,112354,852],{"class":319},[97,112356,112357],{"class":103}," tip\n",[97,112359,112360],{"class":99,"line":10111},[97,112361,2591],{"emptyLinePlaceholder":249},[97,112363,112364,112366,112368,112370,112372,112375,112377,112379,112382,112384,112387,112389,112391,112393,112395],{"class":99,"line":10116},[97,112365,106801],{"class":103},[97,112367,511],{"class":370},[97,112369,4634],{"class":103},[97,112371,115],{"class":319},[97,112373,112374],{"class":103}," np.clip(",[97,112376,105444],{"class":370},[97,112378,6709],{"class":319},[97,112380,112381],{"class":103}," error[",[97,112383,398],{"class":370},[97,112385,112386],{"class":103},"], ",[97,112388,852],{"class":319},[97,112390,102587],{"class":370},[97,112392,12626],{"class":103},[97,112394,102587],{"class":370},[97,112396,329],{"class":103},[97,112398,112399,112401,112403,112405,112407,112409,112411,112413,112415,112417,112419,112421,112423,112425,112427],{"class":99,"line":16794},[97,112400,106801],{"class":103},[97,112402,537],{"class":370},[97,112404,4634],{"class":103},[97,112406,115],{"class":319},[97,112408,112374],{"class":103},[97,112410,105444],{"class":370},[97,112412,6709],{"class":319},[97,112414,112381],{"class":103},[97,112416,511],{"class":370},[97,112418,112386],{"class":103},[97,112420,852],{"class":319},[97,112422,102587],{"class":370},[97,112424,12626],{"class":103},[97,112426,102587],{"class":370},[97,112428,329],{"class":103},[97,112430,112431],{"class":99,"line":16800},[97,112432,2591],{"emptyLinePlaceholder":249},[97,112434,112435],{"class":99,"line":16823},[97,112436,101700],{"class":103},[97,112438,112439,112441,112443],{"class":99,"line":16829},[97,112440,110481],{"class":103},[97,112442,9668],{"class":319},[97,112444,112445],{"class":103}," reward(model, data)\n",[97,112447,112448],{"class":99,"line":16852},[97,112449,2591],{"emptyLinePlaceholder":249},[97,112451,112452,112454,112456,112458,112460,112462,112464],{"class":99,"line":16866},[97,112453,2688],{"class":319},[97,112455,31806],{"class":103},[97,112457,648],{"class":319},[97,112459,5945],{"class":370},[97,112461,101743],{"class":319},[97,112463,4284],{"class":370},[97,112465,3930],{"class":103},[97,112467,112468,112471,112473],{"class":99,"line":16886},[97,112469,112470],{"class":103},"            obs ",[97,112472,115],{"class":319},[97,112474,112475],{"class":103}," get_obs(model, data)\n",[97,112477,112478,112480,112482,112484],{"class":99,"line":16892},[97,112479,34840],{"class":370},[97,112481,323],{"class":103},[97,112483,110515],{"class":118},[97,112485,112486],{"class":103},", step)\n",[97,112488,112489,112491,112493,112496,112499,112501],{"class":99,"line":16903},[97,112490,34840],{"class":370},[97,112492,323],{"class":103},[97,112494,112495],{"class":118},"\"  tip:\"",[97,112497,112498],{"class":103},", np.round(tip, ",[97,112500,392],{"class":370},[97,112502,30687],{"class":103},[97,112504,112505,112507,112509,112512,112515,112517],{"class":99,"line":16926},[97,112506,34840],{"class":370},[97,112508,323],{"class":103},[97,112510,112511],{"class":118},"\"  target:\"",[97,112513,112514],{"class":103},", np.round(target, ",[97,112516,392],{"class":370},[97,112518,30687],{"class":103},[97,112520,112521,112523,112525,112528,112531,112533],{"class":99,"line":16948},[97,112522,34840],{"class":370},[97,112524,323],{"class":103},[97,112526,112527],{"class":118},"\"  ctrl:\"",[97,112529,112530],{"class":103},", np.round(data.ctrl.copy(), ",[97,112532,392],{"class":370},[97,112534,30687],{"class":103},[97,112536,112537,112539,112541,112544,112547,112549],{"class":99,"line":16953},[97,112538,34840],{"class":370},[97,112540,323],{"class":103},[97,112542,112543],{"class":118},"\"  obs_dim:\"",[97,112545,112546],{"class":103},", obs.shape[",[97,112548,511],{"class":370},[97,112550,4848],{"class":103},[97,112552,112553],{"class":99,"line":16959},[97,112554,2591],{"emptyLinePlaceholder":249},[97,112556,112557,112559,112561,112563,112565,112567,112569,112571],{"class":99,"line":16973},[97,112558,31489],{"class":370},[97,112560,323],{"class":103},[97,112562,110560],{"class":118},[97,112564,12626],{"class":103},[97,112566,32208],{"class":370},[97,112568,110567],{"class":103},[97,112570,392],{"class":370},[97,112572,30687],{"class":103},[97,112574,112575,112577,112579,112582,112585,112587,112589,112591],{"class":99,"line":16986},[97,112576,31489],{"class":370},[97,112578,323],{"class":103},[97,112580,112581],{"class":118},"\"final tip:\"",[97,112583,112584],{"class":103},", np.round(site_position(model, data, ",[97,112586,111720],{"class":118},[97,112588,110529],{"class":103},[97,112590,392],{"class":370},[97,112592,30687],{"class":103},[97,112594,112595,112597,112599,112602,112604,112606,112608,112610],{"class":99,"line":16991},[97,112596,31489],{"class":370},[97,112598,323],{"class":103},[97,112600,112601],{"class":118},"\"target:\"",[97,112603,112584],{"class":103},[97,112605,112143],{"class":118},[97,112607,110529],{"class":103},[97,112609,392],{"class":370},[97,112611,30687],{"class":103},[97,112613,112614],{"class":99,"line":17005},[97,112615,2591],{"emptyLinePlaceholder":249},[97,112617,112618],{"class":99,"line":17010},[97,112619,2591],{"emptyLinePlaceholder":249},[97,112621,112622,112624,112626,112628,112630],{"class":99,"line":17016},[97,112623,1723],{"class":319},[97,112625,31410],{"class":370},[97,112627,101743],{"class":319},[97,112629,101746],{"class":118},[97,112631,3930],{"class":103},[97,112633,112634],{"class":99,"line":17021},[97,112635,101753],{"class":103},[24,112637,103754],{},[87,112639,112641],{"className":24011,"code":112640,"language":24013,"meta":92,"style":92},"touch ch7_reacher.py\n",[94,112642,112643],{"__ignoreMap":92},[97,112644,112645,112647],{"class":99,"line":100},[97,112646,101467],{"class":111},[97,112648,112649],{"class":118}," ch7_reacher.py\n",[24,112651,110628],{},[87,112653,112655],{"className":24011,"code":112654,"language":24013,"meta":92,"style":92},"python ch7_reacher.py\n",[94,112656,112657],{"__ignoreMap":92},[97,112658,112659,112661],{"class":99,"line":100},[97,112660,30570],{"class":111},[97,112662,112649],{"class":118},[48,112664,101756],{"id":101756},[24,112666,112667],{},"读取 site 坐标：",[87,112669,112671],{"className":30568,"code":112670,"language":30570,"meta":92,"style":92},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[94,112672,112673],{"__ignoreMap":92},[97,112674,112675,112677,112679,112681,112683],{"class":99,"line":100},[97,112676,32137],{"class":319},[97,112678,112040],{"class":111},[97,112680,112043],{"class":103},[97,112682,1492],{"class":370},[97,112684,112048],{"class":103},[24,112686,112687],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[24,112689,110644],{},[87,112691,112693],{"className":30568,"code":112692,"language":30570,"meta":92,"style":92},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[94,112694,112695],{"__ignoreMap":92},[97,112696,112697,112699],{"class":99,"line":100},[97,112698,17236],{"class":319},[97,112700,112152],{"class":103},[24,112702,112703],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[24,112705,109969],{},[87,112707,112709],{"className":30568,"code":112708,"language":30570,"meta":92,"style":92},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[94,112710,112711,112723,112736],{"__ignoreMap":92},[97,112712,112713,112715,112717,112719,112721],{"class":99,"line":100},[97,112714,111780],{"class":103},[97,112716,115],{"class":319},[97,112718,111785],{"class":103},[97,112720,852],{"class":319},[97,112722,111790],{"class":103},[97,112724,112725,112728,112730,112732,112734],{"class":99,"line":195},[97,112726,112727],{"class":103},"control_cost ",[97,112729,115],{"class":319},[97,112731,112221],{"class":370},[97,112733,6709],{"class":319},[97,112735,112226],{"class":103},[97,112737,112738,112740,112742,112744,112746,112748,112750],{"class":99,"line":241},[97,112739,17236],{"class":319},[97,112741,109981],{"class":370},[97,112743,323],{"class":103},[97,112745,852],{"class":319},[97,112747,111780],{"class":103},[97,112749,852],{"class":319},[97,112751,112243],{"class":103},[24,112753,112754],{},"奖励由两部分组成：",[138,112756,112757,112762],{},[70,112758,112759,112761],{},[94,112760,111807],{},"：末端离目标越远，奖励越低。",[70,112763,112764,112767],{},[94,112765,112766],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[24,112769,112770],{},"简单控制器：",[87,112772,112774],{"className":30568,"code":112773,"language":30570,"meta":92,"style":92},"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",[94,112775,112776,112789,112821],{"__ignoreMap":92},[97,112777,112778,112781,112783,112785,112787],{"class":99,"line":100},[97,112779,112780],{"class":103},"error ",[97,112782,115],{"class":319},[97,112784,112352],{"class":103},[97,112786,852],{"class":319},[97,112788,112357],{"class":103},[97,112790,112791,112793,112795,112797,112799,112801,112803,112805,112807,112809,112811,112813,112815,112817,112819],{"class":99,"line":195},[97,112792,106055],{"class":103},[97,112794,511],{"class":370},[97,112796,4634],{"class":103},[97,112798,115],{"class":319},[97,112800,112374],{"class":103},[97,112802,105444],{"class":370},[97,112804,6709],{"class":319},[97,112806,112381],{"class":103},[97,112808,398],{"class":370},[97,112810,112386],{"class":103},[97,112812,852],{"class":319},[97,112814,102587],{"class":370},[97,112816,12626],{"class":103},[97,112818,102587],{"class":370},[97,112820,329],{"class":103},[97,112822,112823,112825,112827,112829,112831,112833,112835,112837,112839,112841,112843,112845,112847,112849,112851],{"class":99,"line":241},[97,112824,106055],{"class":103},[97,112826,537],{"class":370},[97,112828,4634],{"class":103},[97,112830,115],{"class":319},[97,112832,112374],{"class":103},[97,112834,105444],{"class":370},[97,112836,6709],{"class":319},[97,112838,112381],{"class":103},[97,112840,511],{"class":370},[97,112842,112386],{"class":103},[97,112844,852],{"class":319},[97,112846,102587],{"class":370},[97,112848,12626],{"class":103},[97,112850,102587],{"class":370},[97,112852,329],{"class":103},[24,112854,112855],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[48,112857,101892],{"id":101892},[87,112859,112860],{"className":30568,"code":112670,"language":30570,"meta":92,"style":92},[94,112861,112862],{"__ignoreMap":92},[97,112863,112864,112866,112868,112870,112872],{"class":99,"line":100},[97,112865,32137],{"class":319},[97,112867,112040],{"class":111},[97,112869,112043],{"class":103},[97,112871,1492],{"class":370},[97,112873,112048],{"class":103},[24,112875,112876,112877,112879,112880,82723,112882,28575],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[94,112878,79994],{}," 是 site 的名字，比如 ",[94,112881,111720],{},[94,112883,112143],{},[87,112885,112887],{"className":30568,"code":112886,"language":30570,"meta":92,"style":92},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[94,112888,112889],{"__ignoreMap":92},[97,112890,112891,112893,112895],{"class":99,"line":100},[97,112892,103818],{"class":103},[97,112894,115],{"class":319},[97,112896,112057],{"class":103},[24,112898,112899],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[87,112901,112903],{"className":30568,"code":112902,"language":30570,"meta":92,"style":92},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[94,112904,112905,112917],{"__ignoreMap":92},[97,112906,112907,112909,112911,112913,112915],{"class":99,"line":100},[97,112908,1723],{"class":319},[97,112910,103633],{"class":103},[97,112912,104],{"class":319},[97,112914,4284],{"class":370},[97,112916,3930],{"class":103},[97,112918,112919,112921,112923,112925,112927,112929,112931,112933,112935,112937],{"class":99,"line":195},[97,112920,104079],{"class":319},[97,112922,103619],{"class":370},[97,112924,323],{"class":103},[97,112926,374],{"class":319},[97,112928,112082],{"class":118},[97,112930,1216],{"class":370},[97,112932,79994],{"class":103},[97,112934,1265],{"class":370},[97,112936,571],{"class":118},[97,112938,329],{"class":103},[24,112940,112941,112942,112945,112946,112948],{},"如果 site 没找到，就主动报错。",[94,112943,112944],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[94,112947,79994],{}," 的值放进字符串里。",[87,112950,112952],{"className":30568,"code":112951,"language":30570,"meta":92,"style":92},"return data.site_xpos[site_id].copy()\n",[94,112953,112954],{"__ignoreMap":92},[97,112955,112956,112958],{"class":99,"line":100},[97,112957,17236],{"class":319},[97,112959,112099],{"class":103},[24,112961,112962,112963,112965,112966,112969],{},"返回这个 site 的世界坐标。",[94,112964,103864],{}," 里的每一行都是一个 site 的 ",[94,112967,112968],{},"(x, y, z)"," 坐标。",[87,112971,112973],{"className":30568,"code":112972,"language":30570,"meta":92,"style":92},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[94,112974,112975],{"__ignoreMap":92},[97,112976,112977,112979,112981],{"class":99,"line":100},[97,112978,32137],{"class":319},[97,112980,112114],{"class":111},[97,112982,112117],{"class":103},[24,112984,112985],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[87,112987,112989],{"className":30568,"code":112988,"language":30570,"meta":92,"style":92},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[94,112990,112991,113003],{"__ignoreMap":92},[97,112992,112993,112995,112997,112999,113001],{"class":99,"line":100},[97,112994,111752],{"class":103},[97,112996,115],{"class":319},[97,112998,112127],{"class":103},[97,113000,111720],{"class":118},[97,113002,329],{"class":103},[97,113004,113005,113007,113009,113011,113013],{"class":99,"line":195},[97,113006,111762],{"class":103},[97,113008,115],{"class":319},[97,113010,112127],{"class":103},[97,113012,112143],{"class":118},[97,113014,329],{"class":103},[24,113016,113017],{},"分别读取末端点和目标点的世界坐标。",[87,113019,113020],{"className":30568,"code":112692,"language":30570,"meta":92,"style":92},[94,113021,113022],{"__ignoreMap":92},[97,113023,113024,113026],{"class":99,"line":100},[97,113025,17236],{"class":319},[97,113027,112152],{"class":103},[24,113029,113030],{},"把四部分拼成一个观测数组：",[87,113032,113035],{"className":113033,"code":113034,"language":5378,"meta":92},[5376],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[94,113036,113034],{"__ignoreMap":92},[87,113038,113040],{"className":30568,"code":113039,"language":30570,"meta":92,"style":92},"dist = np.linalg.norm(tip - target)\n",[94,113041,113042],{"__ignoreMap":92},[97,113043,113044,113046,113048,113050,113052],{"class":99,"line":100},[97,113045,111780],{"class":103},[97,113047,115],{"class":319},[97,113049,111785],{"class":103},[97,113051,852],{"class":319},[97,113053,111790],{"class":103},[24,113055,113056,113057,113060,113061,113064],{},"计算 tip 到 target 的距离。",[94,113058,113059],{},"tip - target"," 得到一个三维向量，",[94,113062,113063],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[24,113066,14824],{},[87,113068,113071],{"className":113069,"code":113070,"language":5378,"meta":92},[5376],"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",[94,113072,113070],{"__ignoreMap":92},[87,113074,113076],{"className":30568,"code":113075,"language":30570,"meta":92,"style":92},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[94,113077,113078],{"__ignoreMap":92},[97,113079,113080,113082,113084,113086,113088],{"class":99,"line":100},[97,113081,112727],{"class":103},[97,113083,115],{"class":319},[97,113085,112221],{"class":370},[97,113087,6709],{"class":319},[97,113089,112226],{"class":103},[24,113091,113092,113093,113096,113097,113100],{},"计算动作惩罚。",[94,113094,113095],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[94,113098,113099],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[87,113102,113104],{"className":30568,"code":113103,"language":30570,"meta":92,"style":92},"return float(-dist - control_cost)\n",[94,113105,113106],{"__ignoreMap":92},[97,113107,113108,113110,113112,113114,113116,113118,113120],{"class":99,"line":100},[97,113109,17236],{"class":319},[97,113111,109981],{"class":370},[97,113113,323],{"class":103},[97,113115,852],{"class":319},[97,113117,111780],{"class":103},[97,113119,852],{"class":319},[97,113121,112243],{"class":103},[24,113123,113124],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[87,113126,113127],{"className":30568,"code":110987,"language":30570,"meta":92,"style":92},[94,113128,113129],{"__ignoreMap":92},[97,113130,113131,113133,113135],{"class":99,"line":100},[97,113132,110994],{"class":103},[97,113134,115],{"class":319},[97,113136,104945],{"class":370},[24,113138,113139],{},"累计奖励变量，记录整个运行过程的总分。",[87,113141,113143],{"className":30568,"code":113142,"language":30570,"meta":92,"style":92},"for step in range(500):\n",[94,113144,113145],{"__ignoreMap":92},[97,113146,113147,113149,113151,113153,113155,113157,113159],{"class":99,"line":100},[97,113148,3216],{"class":319},[97,113150,31806],{"class":103},[97,113152,26233],{"class":319},[97,113154,32633],{"class":370},[97,113156,323],{"class":103},[97,113158,65258],{"class":370},[97,113160,30976],{"class":103},[24,113162,113163],{},"运行 500 个控制步。",[87,113165,113166],{"className":30568,"code":104727,"language":30570,"meta":92,"style":92},[94,113167,113168],{"__ignoreMap":92},[97,113169,113170],{"class":99,"line":100},[97,113171,104727],{"class":103},[24,113173,113174,113175,101202,113177,113179],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[94,113176,103415],{},[94,113178,103418],{}," 是当前状态下的坐标。",[87,113181,113183],{"className":30568,"code":113182,"language":30570,"meta":92,"style":92},"error = target - tip\n",[94,113184,113185],{"__ignoreMap":92},[97,113186,113187,113189,113191,113193,113195],{"class":99,"line":100},[97,113188,112780],{"class":103},[97,113190,115],{"class":319},[97,113192,112352],{"class":103},[97,113194,852],{"class":319},[97,113196,112357],{"class":103},[24,113198,113199],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[87,113201,113203],{"className":30568,"code":113202,"language":30570,"meta":92,"style":92},"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",[94,113204,113205,113237],{"__ignoreMap":92},[97,113206,113207,113209,113211,113213,113215,113217,113219,113221,113223,113225,113227,113229,113231,113233,113235],{"class":99,"line":100},[97,113208,106055],{"class":103},[97,113210,511],{"class":370},[97,113212,4634],{"class":103},[97,113214,115],{"class":319},[97,113216,112374],{"class":103},[97,113218,105444],{"class":370},[97,113220,6709],{"class":319},[97,113222,112381],{"class":103},[97,113224,398],{"class":370},[97,113226,112386],{"class":103},[97,113228,852],{"class":319},[97,113230,102587],{"class":370},[97,113232,12626],{"class":103},[97,113234,102587],{"class":370},[97,113236,329],{"class":103},[97,113238,113239,113241,113243,113245,113247,113249,113251,113253,113255,113257,113259,113261,113263,113265,113267],{"class":99,"line":195},[97,113240,106055],{"class":103},[97,113242,537],{"class":370},[97,113244,4634],{"class":103},[97,113246,115],{"class":319},[97,113248,112374],{"class":103},[97,113250,105444],{"class":370},[97,113252,6709],{"class":319},[97,113254,112381],{"class":103},[97,113256,511],{"class":370},[97,113258,112386],{"class":103},[97,113260,852],{"class":319},[97,113262,102587],{"class":370},[97,113264,12626],{"class":103},[97,113266,102587],{"class":370},[97,113268,329],{"class":103},[24,113270,113271,113272,113275],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[94,113273,113274],{},"error -> ctrl -> step"," 的流程。",[87,113277,113278],{"className":30568,"code":104689,"language":30570,"meta":92,"style":92},[94,113279,113280],{"__ignoreMap":92},[97,113281,113282],{"class":99,"line":100},[97,113283,104689],{"class":103},[24,113285,113286],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[87,113288,113290],{"className":30568,"code":113289,"language":30570,"meta":92,"style":92},"obs = get_obs(model, data)\n",[94,113291,113292],{"__ignoreMap":92},[97,113293,113294,113296,113298],{"class":99,"line":100},[97,113295,111038],{"class":103},[97,113297,115],{"class":319},[97,113299,112475],{"class":103},[24,113301,113302,113303,113306],{},"读取最新观测。后面打印 ",[94,113304,113305],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113308,102500],{"id":102499},[24,113310,113311],{},"观测维度为:",[87,113313,113316],{"className":113314,"code":113315,"language":5378,"meta":92},[5376],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[94,113317,113315],{"__ignoreMap":92},[24,113319,113320],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[24,113322,113323],{},"程序每 100 步打印：",[87,113325,113328],{"className":113326,"code":113327,"language":5378,"meta":92},[5376],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[94,113329,113327],{"__ignoreMap":92},[24,113331,113332,113333,113335],{},"如果控制有效，你应该看到最终 ",[94,113334,103415],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113337,102532],{"id":102531},[138,113339,113340,113343,113346,113352,113358,113365,113375],{},[70,113341,113342],{},"修改目标点位置。",[70,113344,113345],{},"重新运行，观察最终 tip 是否变化。",[70,113347,113348,113349,113351],{},"把 gravity 改成 ",[94,113350,102773],{},"，观察控制是否变差。",[70,113353,111365,113354,111369,113356,28575],{},[94,113355,102342],{},[94,113357,398],{},[70,113359,102595,113360,102598,113362,113364],{},[94,113361,110780],{},[94,113363,107491],{},"，观察机械臂是否更难移动。",[70,113366,102595,113367,82714,113369,102598,113371,113374],{},[94,113368,103418],{},[94,113370,104330],{},[94,113372,113373],{},"0.2 0 0.6","，观察 reward 和 final tip。",[70,113376,113377],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113379,102637],{"id":102636},[48,113381,113383],{"id":113382},"site-not-found",[94,113384,113385],{},"site not found",[24,113387,113388,113389,101202,113392,28575],{},"检查 XML 中是否有 ",[94,113390,113391],{},"site name=\"tip\"",[94,113393,113394],{},"site name=\"target\"",[48,113396,113397],{"id":113397},"机械臂完全不动",[24,113399,102707],{},[138,113401,113402,113407,113410,113415],{},[70,113403,113404,113406],{},[94,113405,102342],{}," 是否为 2",[70,113408,113409],{},"actuator 是否引用正确 joint",[70,113411,113412,113414],{},[94,113413,101260],{}," 是否被赋值",[70,113416,113417,113418],{},"是否执行了 ",[94,113419,100869],{},[48,113421,113422],{"id":113422},"控制效果不好",[24,113424,113425],{},"正常。本章重点不是控制器最优，而是任务结构:",[87,113427,113430],{"className":113428,"code":113429,"language":5378,"meta":92},[5376],"obs → action → mj_step → reward → next_obs\n",[94,113431,113429],{"__ignoreMap":92},[48,113433,113435],{"id":113434},"tip-坐标不变化","tip 坐标不变化",[24,113437,102759],{},[138,113439,113440,113445,113453,113462],{},[70,113441,113442,113443,28575],{},"是否每步调用了 ",[94,113444,100869],{},[70,113446,113447,113448,101202,113450,28575],{},"是否写入了 ",[94,113449,106310],{},[94,113451,113452],{},"data.ctrl[1]",[70,113454,113455,113456,532,113459,28575],{},"actuator 是否正确引用 ",[94,113457,113458],{},"joint1",[94,113460,113461],{},"joint2",[70,113463,113464],{},"控制输入是否太小。",[48,113466,113467],{"id":113467},"目标点不会动",[24,113469,113470],{},"本章的 target 是固定 site：",[87,113472,113474],{"className":53251,"code":113473,"language":53253,"meta":92,"style":92},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[94,113475,113476],{"__ignoreMap":92},[97,113477,113478,113480,113482,113484,113486,113488,113490,113492,113495],{"class":99,"line":100},[97,113479,104],{"class":103},[97,113481,103394],{"class":107},[97,113483,112],{"class":111},[97,113485,115],{"class":103},[97,113487,112143],{"class":118},[97,113489,101290],{"class":111},[97,113491,115],{"class":103},[97,113493,113494],{"class":118},"\"0.5 0 0.4\"",[97,113496,113497],{"class":103}," ...\u002F>\n",[24,113499,113500,113501,113503],{},"它直接挂在 ",[94,113502,102025],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[48,113505,113506],{"id":113506},"机械臂不像真实机械臂",[24,113508,113509],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113511,102791],{"id":102790},[24,113513,113514],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[24,113516,113517],{},"核心公式：",[87,113519,113522],{"className":113520,"code":113521,"language":5378,"meta":92},[5376],"distance = ||tip - target||\nreward = -distance - action_cost\n",[94,113523,113521],{"__ignoreMap":92},[24,113525,113526],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[231,113528,113529],{},"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":92,"searchDepth":195,"depth":195,"links":113531},[113532,113533,113534,113539,113543,113544,113545,113553],{"id":100830,"depth":195,"text":100831},{"id":100953,"depth":195,"text":100954},{"id":101228,"depth":195,"text":101229,"children":113535},[113536,113537,113538],{"id":111735,"depth":241,"text":111736},{"id":111811,"depth":241,"text":111811},{"id":111841,"depth":241,"text":111842},{"id":101436,"depth":195,"text":101437,"children":113540},[113541,113542],{"id":101756,"depth":241,"text":101756},{"id":101892,"depth":241,"text":101892},{"id":102499,"depth":195,"text":102500},{"id":102531,"depth":195,"text":102532},{"id":102636,"depth":195,"text":102637,"children":113546},[113547,113548,113549,113550,113551,113552],{"id":113382,"depth":241,"text":113385},{"id":113397,"depth":241,"text":113397},{"id":113422,"depth":241,"text":113422},{"id":113434,"depth":241,"text":113435},{"id":113467,"depth":241,"text":113467},{"id":113506,"depth":241,"text":113506},{"id":102790,"depth":195,"text":102791},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111539,"description":92},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113560,"title":113561,"body":113562,"description":92,"extension":247,"meta":117024,"navigation":249,"path":117025,"seo":117026,"stem":117027,"__hash__":117028},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113563,"toc":116995},[113564,113567,113569,113572,113575,113600,113603,113609,113612,113618,113620,113622,113646,113648,113666,113668,113711,113713,113740,113742,113745,113797,113800,113806,113815,113818,113856,113859,113898,113901,113909,113916,113919,113925,113927,113981,113988,114033,114036,114040,114056,114066,114068,115329,115331,115343,115345,115356,115358,115361,115382,115385,115388,115421,115427,115430,115463,115466,115469,115510,115515,115529,115532,115545,115550,115573,115575,115590,115600,115615,115622,115642,115657,115675,115678,115695,115703,115719,115725,115757,115770,115802,115812,115847,115861,115907,115921,115963,115974,115987,115993,116026,116029,116056,116066,116106,116116,116133,116140,116158,116161,116202,116215,116230,116233,116256,116259,116271,116274,116293,116298,116319,116322,116337,116340,116374,116386,116401,116404,116429,116432,116451,116454,116486,116489,116513,116519,116549,116556,116569,116572,116574,116576,116582,116585,116588,116600,116603,116605,116659,116661,116665,116671,116680,116683,116690,116692,116715,116718,116722,116724,116742,116748,116750,116783,116786,116792,116796,116799,116819,116824,116828,116835,116855,116860,116864,116867,116887,116890,116976,116980,116983,116989,116992],[10,113565,113561],{"id":113566},"_8gymnasium-风格强化学习接口基础",[14,113568,100831],{"id":100830},[24,113570,113571],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[24,113573,113574],{},"你将实现:",[87,113576,113578],{"className":30568,"code":113577,"language":30570,"meta":92,"style":92},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[94,113579,113580,113590],{"__ignoreMap":92},[97,113581,113582,113585,113587],{"class":99,"line":100},[97,113583,113584],{"class":103},"obs, info ",[97,113586,115],{"class":319},[97,113588,113589],{"class":103}," env.reset()\n",[97,113591,113592,113595,113597],{"class":99,"line":195},[97,113593,113594],{"class":103},"obs, reward, terminated, truncated, info ",[97,113596,115],{"class":319},[97,113598,113599],{"class":103}," env.step(action)\n",[24,113601,113602],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[24,113604,113605,113606,113608],{},"前面章节的代码都是“脚本式”的：在 ",[94,113607,102479],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[24,113610,113611],{},"可以先记住 Gymnasium 环境的核心交互：",[87,113613,113616],{"className":113614,"code":113615,"language":5378,"meta":92},[5376],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[94,113617,113615],{"__ignoreMap":92},[14,113619,100954],{"id":100953},[24,113621,100957],{},[87,113623,113624],{"className":24011,"code":104572,"language":24013,"meta":92,"style":92},[94,113625,113626],{"__ignoreMap":92},[97,113627,113628,113630,113632,113634,113636,113638,113640,113642,113644],{"class":99,"line":100},[97,113629,24766],{"class":111},[97,113631,26505],{"class":118},[97,113633,24023],{"class":118},[97,113635,26590],{"class":370},[97,113637,104587],{"class":118},[97,113639,100982],{"class":118},[97,113641,102685],{"class":118},[97,113643,100998],{"class":118},[97,113645,104596],{"class":118},[24,113647,103003],{},[87,113649,113651],{"className":24011,"code":113650,"language":24013,"meta":92,"style":92},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[94,113652,113653],{"__ignoreMap":92},[97,113654,113655,113657,113659,113661,113663],{"class":99,"line":100},[97,113656,24020],{"class":111},[97,113658,24023],{"class":118},[97,113660,101114],{"class":118},[97,113662,107895],{"class":118},[97,113664,113665],{"class":118}," gymnasium\n",[24,113667,103020],{},[87,113669,113671],{"className":24011,"code":113670,"language":24013,"meta":92,"style":92},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[94,113672,113673,113690,113699],{"__ignoreMap":92},[97,113674,113675,113677,113679,113681,113684,113686,113688],{"class":99,"line":100},[97,113676,30520],{"class":111},[97,113678,29366],{"class":118},[97,113680,25305],{"class":370},[97,113682,113683],{"class":118}," mujoco-gym-api",[97,113685,101159],{"class":118},[97,113687,101162],{"class":370},[97,113689,101165],{"class":370},[97,113691,113692,113694,113696],{"class":99,"line":195},[97,113693,30520],{"class":111},[97,113695,101172],{"class":118},[97,113697,113698],{"class":118}," mujoco-gym-api\n",[97,113700,113701,113703,113705,113707,113709],{"class":99,"line":241},[97,113702,24020],{"class":111},[97,113704,24023],{"class":118},[97,113706,101114],{"class":118},[97,113708,107895],{"class":118},[97,113710,113665],{"class":118},[24,113712,101188],{},[138,113714,113715,113725,113728,113734],{},[70,113716,113717,113718,113721,113722,28575],{},"本章使用 ",[94,113719,113720],{},"gymnasium","，不是旧版 ",[94,113723,113724],{},"gym",[70,113726,113727],{},"Gymnasium API 与旧 Gym API 有差异。",[70,113729,113730,113731,28575],{},"旧 Gym 常见返回值是 4 个: ",[94,113732,113733],{},"obs, reward, done, info",[70,113735,113736,113737,28575],{},"Gymnasium 返回值是 5 个: ",[94,113738,113739],{},"obs, reward, terminated, truncated, info",[14,113741,101229],{"id":101228},[24,113743,113744],{},"强化学习环境接口包含:",[457,113746,113747,113756],{},[460,113748,113749],{},[463,113750,113751,113754],{},[466,113752,113753],{"align":23925},"方法",[466,113755,102880],{"align":23925},[504,113757,113758,113768,113778,113788],{},[463,113759,113760,113765],{},[509,113761,113762],{"align":23925},[94,113763,113764],{},"reset()",[509,113766,113767],{"align":23925},"重置环境",[463,113769,113770,113775],{},[509,113771,113772],{"align":23925},[94,113773,113774],{},"step(action)",[509,113776,113777],{"align":23925},"执行动作",[463,113779,113780,113785],{},[509,113781,113782],{"align":23925},[94,113783,113784],{},"observation_space",[509,113786,113787],{"align":23925},"观测空间",[463,113789,113790,113795],{},[509,113791,113792],{"align":23925},[94,113793,113794],{},"action_space",[509,113796,23843],{"align":23925},[24,113798,113799],{},"一个最小环境需要完成:",[87,113801,113804],{"className":113802,"code":113803,"language":5378,"meta":92},[5376],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[94,113805,113803],{"__ignoreMap":92},[48,113807,113809,101202,113812,104822],{"id":113808},"terminated-和-truncated-的区别",[94,113810,113811],{},"terminated",[94,113813,113814],{},"truncated",[24,113816,113817],{},"Gymnasium 把“结束”拆成两个概念：",[457,113819,113820,113830],{},[460,113821,113822],{},[463,113823,113824,113826,113828],{},[466,113825,104758],{"align":23925},[466,113827,100884],{"align":23925},[466,113829,21377],{"align":23925},[504,113831,113832,113844],{},[463,113833,113834,113838,113841],{},[509,113835,113836],{"align":23925},[94,113837,113811],{},[509,113839,113840],{"align":23925},"任务自然结束",[509,113842,113843],{"align":23925},"机械臂到达目标、机器人摔倒",[463,113845,113846,113850,113853],{},[509,113847,113848],{"align":23925},[94,113849,113814],{},[509,113851,113852],{"align":23925},"因外部限制截断",[509,113854,113855],{"align":23925},"达到最大步数、时间限制",[24,113857,113858],{},"本章中：",[87,113860,113862],{"className":30568,"code":113861,"language":30570,"meta":92,"style":92},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[94,113863,113864,113879],{"__ignoreMap":92},[97,113865,113866,113869,113871,113874,113876],{"class":99,"line":100},[97,113867,113868],{"class":103},"terminated ",[97,113870,115],{"class":319},[97,113872,113873],{"class":103}," dist ",[97,113875,104],{"class":319},[97,113877,113878],{"class":370}," 0.05\n",[97,113880,113881,113884,113886,113888,113891,113893,113895],{"class":99,"line":195},[97,113882,113883],{"class":103},"truncated ",[97,113885,115],{"class":319},[97,113887,39063],{"class":370},[97,113889,113890],{"class":103},".steps ",[97,113892,1902],{"class":319},[97,113894,39063],{"class":370},[97,113896,113897],{"class":103},".max_steps\n",[24,113899,113900],{},"也就是：",[138,113902,113903,113906],{},[70,113904,113905],{},"末端距离目标小于 0.05，任务成功结束。",[70,113907,113908],{},"步数超过上限，episode 被截断。",[48,113910,113912,101202,113914],{"id":113911},"observation_space-和-action_space",[94,113913,113784],{},[94,113915,113794],{},[24,113917,113918],{},"这两个对象告诉算法：",[87,113920,113923],{"className":113921,"code":113922,"language":5378,"meta":92},[5376],"观测长什么样\n动作允许多大\n",[94,113924,113922],{"__ignoreMap":92},[24,113926,14824],{},[87,113928,113930],{"className":30568,"code":113929,"language":30570,"meta":92,"style":92},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[94,113931,113932],{"__ignoreMap":92},[97,113933,113934,113936,113939,113941,113944,113947,113950,113952,113954,113957,113959,113961,113963,113965,113967,113969,113971,113974,113976,113978],{"class":99,"line":100},[97,113935,31013],{"class":370},[97,113937,113938],{"class":103},".action_space ",[97,113940,115],{"class":319},[97,113942,113943],{"class":103}," spaces.Box(",[97,113945,113946],{"class":5407},"low",[97,113948,113949],{"class":319},"=-",[97,113951,102587],{"class":370},[97,113953,12626],{"class":103},[97,113955,113956],{"class":5407},"high",[97,113958,115],{"class":319},[97,113960,102587],{"class":370},[97,113962,12626],{"class":103},[97,113964,96147],{"class":5407},[97,113966,115],{"class":319},[97,113968,323],{"class":103},[97,113970,398],{"class":370},[97,113972,113973],{"class":103},",), ",[97,113975,93684],{"class":5407},[97,113977,115],{"class":319},[97,113979,113980],{"class":103},"np.float32)\n",[24,113982,113983,113984,113987],{},"表示动作是 2 维数组，每个值都在 ",[94,113985,113986],{},"[-1, 1]"," 范围内。",[87,113989,113991],{"className":30568,"code":113990,"language":30570,"meta":92,"style":92},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[94,113992,113993],{"__ignoreMap":92},[97,113994,113995,113997,114000,114002,114004,114006,114008,114011,114013,114015,114017,114019,114021,114023,114025,114027,114029,114031],{"class":99,"line":100},[97,113996,31013],{"class":370},[97,113998,113999],{"class":103},".observation_space ",[97,114001,115],{"class":319},[97,114003,113943],{"class":103},[97,114005,113946],{"class":5407},[97,114007,113949],{"class":319},[97,114009,114010],{"class":103},"np.inf, ",[97,114012,113956],{"class":5407},[97,114014,115],{"class":319},[97,114016,114010],{"class":103},[97,114018,96147],{"class":5407},[97,114020,115],{"class":319},[97,114022,323],{"class":103},[97,114024,766],{"class":370},[97,114026,113973],{"class":103},[97,114028,93684],{"class":5407},[97,114030,115],{"class":319},[97,114032,113980],{"class":103},[24,114034,114035],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[48,114037,114039],{"id":114038},"frame_skip-是什么","frame_skip 是什么",[87,114041,114043],{"className":30568,"code":114042,"language":30570,"meta":92,"style":92},"self.frame_skip = 5\n",[94,114044,114045],{"__ignoreMap":92},[97,114046,114047,114049,114052,114054],{"class":99,"line":100},[97,114048,31013],{"class":370},[97,114050,114051],{"class":103},".frame_skip ",[97,114053,115],{"class":319},[97,114055,54611],{"class":370},[24,114057,114058,114059,114062,114063,114065],{},"表示外部调用一次 ",[94,114060,114061],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[94,114064,101399],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114067,101437],{"id":101436},[87,114069,114071],{"className":30568,"code":114070,"language":30570,"meta":92,"style":92},"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",[94,114072,114073,114085,114091,114101,114112,114116,114120,114128,114133,114137,114141,114145,114149,114153,114157,114161,114166,114170,114174,114178,114183,114187,114191,114195,114199,114203,114207,114211,114215,114219,114223,114227,114231,114235,114253,114268,114272,114285,114295,114310,114327,114331,114352,114371,114396,114410,114414,114424,114436,114446,114450,114492,114530,114534,114544,114560,114575,114594,114601,114605,114618,114633,114648,114661,114680,114696,114700,114741,114756,114771,114775,114814,114825,114838,114842,114852,114861,114865,114875,114890,114908,114912,114923,114940,114953,114957,114967,114971,114982,114993,114997,115011,115025,115041,115045,115058,115075,115090,115097,115101,115105,115117,115127,115145,115157,115169,115173,115181,115197,115206,115215,115223,115265,115278,115283,115287,115305,115309,115313,115325],{"__ignoreMap":92},[97,114074,114075,114077,114080,114082],{"class":99,"line":100},[97,114076,30582],{"class":319},[97,114078,114079],{"class":103}," gymnasium ",[97,114081,31573],{"class":319},[97,114083,114084],{"class":103}," gym\n",[97,114086,114087,114089],{"class":99,"line":195},[97,114088,30582],{"class":319},[97,114090,101485],{"class":103},[97,114092,114093,114095,114097,114099],{"class":99,"line":241},[97,114094,30582],{"class":319},[97,114096,31570],{"class":103},[97,114098,31573],{"class":319},[97,114100,31576],{"class":103},[97,114102,114103,114105,114107,114109],{"class":99,"line":1387},[97,114104,30927],{"class":319},[97,114106,114079],{"class":103},[97,114108,30582],{"class":319},[97,114110,114111],{"class":103}," spaces\n",[97,114113,114114],{"class":99,"line":1393},[97,114115,2591],{"emptyLinePlaceholder":249},[97,114117,114118],{"class":99,"line":1407},[97,114119,2591],{"emptyLinePlaceholder":249},[97,114121,114122,114124,114126],{"class":99,"line":1413},[97,114123,101498],{"class":370},[97,114125,13755],{"class":319},[97,114127,101503],{"class":118},[97,114129,114130],{"class":99,"line":1504},[97,114131,114132],{"class":118},"\u003Cmujoco model=\"gym_reacher\">\n",[97,114134,114135],{"class":99,"line":1510},[97,114136,111922],{"class":118},[97,114138,114139],{"class":99,"line":1522},[97,114140,2591],{"emptyLinePlaceholder":249},[97,114142,114143],{"class":99,"line":1804},[97,114144,101522],{"class":118},[97,114146,114147],{"class":99,"line":1809},[97,114148,111940],{"class":118},[97,114150,114151],{"class":99,"line":1815},[97,114152,2591],{"emptyLinePlaceholder":249},[97,114154,114155],{"class":99,"line":1820},[97,114156,111949],{"class":118},[97,114158,114159],{"class":99,"line":1834},[97,114160,111954],{"class":118},[97,114162,114163],{"class":99,"line":1839},[97,114164,114165],{"class":118},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[97,114167,114168],{"class":99,"line":1845},[97,114169,2591],{"emptyLinePlaceholder":249},[97,114171,114172],{"class":99,"line":1866},[97,114173,111968],{"class":118},[97,114175,114176],{"class":99,"line":1871},[97,114177,111973],{"class":118},[97,114179,114180],{"class":99,"line":1885},[97,114181,114182],{"class":118},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[97,114184,114185],{"class":99,"line":1890},[97,114186,111983],{"class":118},[97,114188,114189],{"class":99,"line":1919},[97,114190,106622],{"class":118},[97,114192,114193],{"class":99,"line":1924},[97,114194,101551],{"class":118},[97,114196,114197],{"class":99,"line":1941},[97,114198,101556],{"class":118},[97,114200,114201],{"class":99,"line":1946},[97,114202,2591],{"emptyLinePlaceholder":249},[97,114204,114205],{"class":99,"line":1951},[97,114206,106639],{"class":118},[97,114208,114209],{"class":99,"line":1956},[97,114210,112008],{"class":118},[97,114212,114213],{"class":99,"line":1970},[97,114214,112013],{"class":118},[97,114216,114217],{"class":99,"line":1975},[97,114218,106649],{"class":118},[97,114220,114221],{"class":99,"line":2768},[97,114222,101561],{"class":118},[97,114224,114225],{"class":99,"line":2782},[97,114226,95882],{"class":118},[97,114228,114229],{"class":99,"line":2790},[97,114230,2591],{"emptyLinePlaceholder":249},[97,114232,114233],{"class":99,"line":2795},[97,114234,2591],{"emptyLinePlaceholder":249},[97,114236,114237,114239,114242,114244,114246,114248,114251],{"class":99,"line":2801},[97,114238,14885],{"class":319},[97,114240,114241],{"class":111}," ReacherEnv",[97,114243,323],{"class":103},[97,114245,113724],{"class":111},[97,114247,878],{"class":103},[97,114249,114250],{"class":111},"Env",[97,114252,30976],{"class":103},[97,114254,114255,114258,114260,114262,114265],{"class":99,"line":2807},[97,114256,114257],{"class":103},"    metadata ",[97,114259,115],{"class":319},[97,114261,4639],{"class":103},[97,114263,114264],{"class":118},"\"render_modes\"",[97,114266,114267],{"class":103},": []}\n",[97,114269,114270],{"class":99,"line":2812},[97,114271,2591],{"emptyLinePlaceholder":249},[97,114273,114274,114276,114278,114281,114283],{"class":99,"line":8139},[97,114275,30991],{"class":319},[97,114277,30994],{"class":370},[97,114279,114280],{"class":103},"(self) -> ",[97,114282,95870],{"class":370},[97,114284,3930],{"class":103},[97,114286,114287,114289,114291,114293],{"class":99,"line":8163},[97,114288,31007],{"class":370},[97,114290,17451],{"class":103},[97,114292,31019],{"class":370},[97,114294,2167],{"class":103},[97,114296,114297,114299,114302,114304,114306,114308],{"class":99,"line":8168},[97,114298,31035],{"class":370},[97,114300,114301],{"class":103},".model ",[97,114303,115],{"class":319},[97,114305,101596],{"class":103},[97,114307,101498],{"class":370},[97,114309,329],{"class":103},[97,114311,114312,114314,114317,114319,114322,114324],{"class":99,"line":8174},[97,114313,31035],{"class":370},[97,114315,114316],{"class":103},".data ",[97,114318,115],{"class":319},[97,114320,114321],{"class":103}," mujoco.MjData(",[97,114323,31013],{"class":370},[97,114325,114326],{"class":103},".model)\n",[97,114328,114329],{"class":99,"line":8201},[97,114330,2591],{"emptyLinePlaceholder":249},[97,114332,114333,114335,114338,114340,114343,114345,114348,114350],{"class":99,"line":8206},[97,114334,31035],{"class":370},[97,114336,114337],{"class":103},".tip_site_id ",[97,114339,115],{"class":319},[97,114341,114342],{"class":103}," mujoco.mj_name2id(",[97,114344,31013],{"class":370},[97,114346,114347],{"class":103},".model, mujoco.mjtObj.mjOBJ_SITE, ",[97,114349,111720],{"class":118},[97,114351,329],{"class":103},[97,114353,114354,114356,114359,114361,114363,114365,114367,114369],{"class":99,"line":8212},[97,114355,31035],{"class":370},[97,114357,114358],{"class":103},".target_site_id ",[97,114360,115],{"class":319},[97,114362,114342],{"class":103},[97,114364,31013],{"class":370},[97,114366,114347],{"class":103},[97,114368,112143],{"class":118},[97,114370,329],{"class":103},[97,114372,114373,114375,114377,114379,114381,114383,114386,114388,114390,114392,114394],{"class":99,"line":8224},[97,114374,2688],{"class":319},[97,114376,39063],{"class":370},[97,114378,114337],{"class":103},[97,114380,104],{"class":319},[97,114382,4284],{"class":370},[97,114384,114385],{"class":319}," or",[97,114387,39063],{"class":370},[97,114389,114358],{"class":103},[97,114391,104],{"class":319},[97,114393,4284],{"class":370},[97,114395,3930],{"class":103},[97,114397,114398,114401,114403,114405,114408],{"class":99,"line":8236},[97,114399,114400],{"class":319},"            raise",[97,114402,103619],{"class":370},[97,114404,323],{"class":103},[97,114406,114407],{"class":118},"\"required sites not found\"",[97,114409,329],{"class":103},[97,114411,114412],{"class":99,"line":8248},[97,114413,2591],{"emptyLinePlaceholder":249},[97,114415,114416,114418,114420,114422],{"class":99,"line":9907},[97,114417,31035],{"class":370},[97,114419,114051],{"class":103},[97,114421,115],{"class":319},[97,114423,54611],{"class":370},[97,114425,114426,114428,114431,114433],{"class":99,"line":9932},[97,114427,31035],{"class":370},[97,114429,114430],{"class":103},".max_steps ",[97,114432,115],{"class":319},[97,114434,114435],{"class":370}," 200\n",[97,114437,114438,114440,114442,114444],{"class":99,"line":9955},[97,114439,31035],{"class":370},[97,114441,113890],{"class":103},[97,114443,115],{"class":319},[97,114445,47523],{"class":370},[97,114447,114448],{"class":99,"line":9979},[97,114449,2591],{"emptyLinePlaceholder":249},[97,114451,114452,114454,114456,114458,114460,114462,114464,114466,114468,114470,114472,114474,114476,114478,114480,114482,114484,114486,114488,114490],{"class":99,"line":9984},[97,114453,31035],{"class":370},[97,114455,113938],{"class":103},[97,114457,115],{"class":319},[97,114459,113943],{"class":103},[97,114461,113946],{"class":5407},[97,114463,113949],{"class":319},[97,114465,102587],{"class":370},[97,114467,12626],{"class":103},[97,114469,113956],{"class":5407},[97,114471,115],{"class":319},[97,114473,102587],{"class":370},[97,114475,12626],{"class":103},[97,114477,96147],{"class":5407},[97,114479,115],{"class":319},[97,114481,323],{"class":103},[97,114483,398],{"class":370},[97,114485,113973],{"class":103},[97,114487,93684],{"class":5407},[97,114489,115],{"class":319},[97,114491,113980],{"class":103},[97,114493,114494,114496,114498,114500,114502,114504,114506,114508,114510,114512,114514,114516,114518,114520,114522,114524,114526,114528],{"class":99,"line":9989},[97,114495,31035],{"class":370},[97,114497,113999],{"class":103},[97,114499,115],{"class":319},[97,114501,113943],{"class":103},[97,114503,113946],{"class":5407},[97,114505,113949],{"class":319},[97,114507,114010],{"class":103},[97,114509,113956],{"class":5407},[97,114511,115],{"class":319},[97,114513,114010],{"class":103},[97,114515,96147],{"class":5407},[97,114517,115],{"class":319},[97,114519,323],{"class":103},[97,114521,766],{"class":370},[97,114523,113973],{"class":103},[97,114525,93684],{"class":5407},[97,114527,115],{"class":319},[97,114529,113980],{"class":103},[97,114531,114532],{"class":99,"line":9994},[97,114533,2591],{"emptyLinePlaceholder":249},[97,114535,114536,114538,114541],{"class":99,"line":10003},[97,114537,30991],{"class":319},[97,114539,114540],{"class":111}," _get_obs",[97,114542,114543],{"class":103},"(self) -> np.ndarray:\n",[97,114545,114546,114548,114550,114552,114555,114557],{"class":99,"line":10008},[97,114547,112321],{"class":103},[97,114549,115],{"class":319},[97,114551,39063],{"class":370},[97,114553,114554],{"class":103},".data.site_xpos[",[97,114556,31013],{"class":370},[97,114558,114559],{"class":103},".tip_site_id].copy()\n",[97,114561,114562,114564,114566,114568,114570,114572],{"class":99,"line":10014},[97,114563,112334],{"class":103},[97,114565,115],{"class":319},[97,114567,39063],{"class":370},[97,114569,114554],{"class":103},[97,114571,31013],{"class":370},[97,114573,114574],{"class":103},".target_site_id].copy()\n",[97,114576,114577,114579,114581,114584,114586,114589,114591],{"class":99,"line":10035},[97,114578,110366],{"class":103},[97,114580,115],{"class":319},[97,114582,114583],{"class":103}," np.concatenate([",[97,114585,31013],{"class":370},[97,114587,114588],{"class":103},".data.qpos.copy(), ",[97,114590,31013],{"class":370},[97,114592,114593],{"class":103},".data.qvel.copy(), tip, target])\n",[97,114595,114596,114598],{"class":99,"line":10041},[97,114597,14943],{"class":319},[97,114599,114600],{"class":103}," obs.astype(np.float32)\n",[97,114602,114603],{"class":99,"line":10055},[97,114604,2591],{"emptyLinePlaceholder":249},[97,114606,114607,114609,114612,114614,114616],{"class":99,"line":10061},[97,114608,30991],{"class":319},[97,114610,114611],{"class":111}," _get_reward",[97,114613,114280],{"class":103},[97,114615,362],{"class":370},[97,114617,3930],{"class":103},[97,114619,114620,114622,114624,114626,114628,114630],{"class":99,"line":10088},[97,114621,112321],{"class":103},[97,114623,115],{"class":319},[97,114625,39063],{"class":370},[97,114627,114554],{"class":103},[97,114629,31013],{"class":370},[97,114631,114632],{"class":103},".tip_site_id]\n",[97,114634,114635,114637,114639,114641,114643,114645],{"class":99,"line":10097},[97,114636,112334],{"class":103},[97,114638,115],{"class":319},[97,114640,39063],{"class":370},[97,114642,114554],{"class":103},[97,114644,31013],{"class":370},[97,114646,114647],{"class":103},".target_site_id]\n",[97,114649,114650,114653,114655,114657,114659],{"class":99,"line":10103},[97,114651,114652],{"class":103},"        dist ",[97,114654,115],{"class":319},[97,114656,111785],{"class":103},[97,114658,852],{"class":319},[97,114660,111790],{"class":103},[97,114662,114663,114666,114668,114670,114672,114675,114677],{"class":99,"line":10111},[97,114664,114665],{"class":103},"        control_cost ",[97,114667,115],{"class":319},[97,114669,112221],{"class":370},[97,114671,6709],{"class":319},[97,114673,114674],{"class":103}," np.sum(np.square(",[97,114676,31013],{"class":370},[97,114678,114679],{"class":103},".data.ctrl))\n",[97,114681,114682,114684,114686,114688,114690,114692,114694],{"class":99,"line":10116},[97,114683,14943],{"class":319},[97,114685,109981],{"class":370},[97,114687,323],{"class":103},[97,114689,852],{"class":319},[97,114691,111780],{"class":103},[97,114693,852],{"class":319},[97,114695,112243],{"class":103},[97,114697,114698],{"class":99,"line":16794},[97,114699,2591],{"emptyLinePlaceholder":249},[97,114701,114702,114704,114707,114710,114712,114715,114717,114719,114721,114723,114725,114728,114731,114733,114735,114737,114739],{"class":99,"line":16800},[97,114703,30991],{"class":319},[97,114705,114706],{"class":111}," reset",[97,114708,114709],{"class":103},"(self, ",[97,114711,775],{"class":319},[97,114713,114714],{"class":103},", seed: ",[97,114716,326],{"class":370},[97,114718,25299],{"class":319},[97,114720,39123],{"class":370},[97,114722,13755],{"class":319},[97,114724,39123],{"class":370},[97,114726,114727],{"class":103},", options: ",[97,114729,114730],{"class":370},"dict",[97,114732,25299],{"class":319},[97,114734,39123],{"class":370},[97,114736,13755],{"class":319},[97,114738,39123],{"class":370},[97,114740,30976],{"class":103},[97,114742,114743,114745,114748,114751,114753],{"class":99,"line":16823},[97,114744,31007],{"class":370},[97,114746,114747],{"class":103},"().reset(",[97,114749,114750],{"class":5407},"seed",[97,114752,115],{"class":319},[97,114754,114755],{"class":103},"seed)\n",[97,114757,114758,114761,114763,114766,114768],{"class":99,"line":16829},[97,114759,114760],{"class":103},"        mujoco.mj_resetData(",[97,114762,31013],{"class":370},[97,114764,114765],{"class":103},".model, ",[97,114767,31013],{"class":370},[97,114769,114770],{"class":103},".data)\n",[97,114772,114773],{"class":99,"line":16852},[97,114774,2591],{"emptyLinePlaceholder":249},[97,114776,114777,114779,114782,114784,114786,114789,114791,114793,114795,114797,114799,114801,114803,114805,114807,114809,114811],{"class":99,"line":16866},[97,114778,31035],{"class":370},[97,114780,114781],{"class":103},".data.qpos[:] ",[97,114783,115],{"class":319},[97,114785,39063],{"class":370},[97,114787,114788],{"class":103},".np_random.uniform(",[97,114790,113946],{"class":5407},[97,114792,113949],{"class":319},[97,114794,86394],{"class":370},[97,114796,12626],{"class":103},[97,114798,113956],{"class":5407},[97,114800,115],{"class":319},[97,114802,86394],{"class":370},[97,114804,12626],{"class":103},[97,114806,31686],{"class":5407},[97,114808,115],{"class":319},[97,114810,31013],{"class":370},[97,114812,114813],{"class":103},".model.nq)\n",[97,114815,114816,114818,114821,114823],{"class":99,"line":16886},[97,114817,31035],{"class":370},[97,114819,114820],{"class":103},".data.qvel[:] ",[97,114822,115],{"class":319},[97,114824,104945],{"class":370},[97,114826,114827,114830,114832,114834,114836],{"class":99,"line":16892},[97,114828,114829],{"class":103},"        mujoco.mj_forward(",[97,114831,31013],{"class":370},[97,114833,114765],{"class":103},[97,114835,31013],{"class":370},[97,114837,114770],{"class":103},[97,114839,114840],{"class":99,"line":16903},[97,114841,2591],{"emptyLinePlaceholder":249},[97,114843,114844,114846,114848,114850],{"class":99,"line":16926},[97,114845,31035],{"class":370},[97,114847,113890],{"class":103},[97,114849,115],{"class":319},[97,114851,47523],{"class":370},[97,114853,114854,114856,114858],{"class":99,"line":16948},[97,114855,14943],{"class":319},[97,114857,39063],{"class":370},[97,114859,114860],{"class":103},"._get_obs(), {}\n",[97,114862,114863],{"class":99,"line":16953},[97,114864,2591],{"emptyLinePlaceholder":249},[97,114866,114867,114869,114872],{"class":99,"line":16959},[97,114868,30991],{"class":319},[97,114870,114871],{"class":111}," step",[97,114873,114874],{"class":103},"(self, action):\n",[97,114876,114877,114879,114881,114884,114886,114888],{"class":99,"line":16973},[97,114878,110406],{"class":103},[97,114880,115],{"class":319},[97,114882,114883],{"class":103}," np.asarray(action, ",[97,114885,93684],{"class":5407},[97,114887,115],{"class":319},[97,114889,113980],{"class":103},[97,114891,114892,114894,114896,114898,114900,114903,114905],{"class":99,"line":16986},[97,114893,110406],{"class":103},[97,114895,115],{"class":319},[97,114897,107631],{"class":103},[97,114899,31013],{"class":370},[97,114901,114902],{"class":103},".action_space.low, ",[97,114904,31013],{"class":370},[97,114906,114907],{"class":103},".action_space.high)\n",[97,114909,114910],{"class":99,"line":16991},[97,114911,2591],{"emptyLinePlaceholder":249},[97,114913,114914,114916,114919,114921],{"class":99,"line":17005},[97,114915,31035],{"class":370},[97,114917,114918],{"class":103},".data.ctrl[:] ",[97,114920,115],{"class":319},[97,114922,107654],{"class":103},[97,114924,114925,114927,114929,114931,114933,114935,114937],{"class":99,"line":17010},[97,114926,3594],{"class":319},[97,114928,101685],{"class":103},[97,114930,26233],{"class":319},[97,114932,32633],{"class":370},[97,114934,323],{"class":103},[97,114936,31013],{"class":370},[97,114938,114939],{"class":103},".frame_skip):\n",[97,114941,114942,114945,114947,114949,114951],{"class":99,"line":17016},[97,114943,114944],{"class":103},"            mujoco.mj_step(",[97,114946,31013],{"class":370},[97,114948,114765],{"class":103},[97,114950,31013],{"class":370},[97,114952,114770],{"class":103},[97,114954,114955],{"class":99,"line":17021},[97,114956,2591],{"emptyLinePlaceholder":249},[97,114958,114959,114961,114963,114965],{"class":99,"line":17035},[97,114960,31035],{"class":370},[97,114962,113890],{"class":103},[97,114964,9668],{"class":319},[97,114966,55883],{"class":370},[97,114968,114969],{"class":99,"line":17040},[97,114970,2591],{"emptyLinePlaceholder":249},[97,114972,114973,114975,114977,114979],{"class":99,"line":17045},[97,114974,110366],{"class":103},[97,114976,115],{"class":319},[97,114978,39063],{"class":370},[97,114980,114981],{"class":103},"._get_obs()\n",[97,114983,114984,114986,114988,114990],{"class":99,"line":17059},[97,114985,110471],{"class":103},[97,114987,115],{"class":319},[97,114989,39063],{"class":370},[97,114991,114992],{"class":103},"._get_reward()\n",[97,114994,114995],{"class":99,"line":17071},[97,114996,2591],{"emptyLinePlaceholder":249},[97,114998,114999,115001,115003,115005,115007,115009],{"class":99,"line":17076},[97,115000,112321],{"class":103},[97,115002,115],{"class":319},[97,115004,39063],{"class":370},[97,115006,114554],{"class":103},[97,115008,31013],{"class":370},[97,115010,114632],{"class":103},[97,115012,115013,115015,115017,115019,115021,115023],{"class":99,"line":17089},[97,115014,112334],{"class":103},[97,115016,115],{"class":319},[97,115018,39063],{"class":370},[97,115020,114554],{"class":103},[97,115022,31013],{"class":370},[97,115024,114647],{"class":103},[97,115026,115027,115029,115031,115033,115036,115038],{"class":99,"line":17094},[97,115028,114652],{"class":103},[97,115030,115],{"class":319},[97,115032,109981],{"class":370},[97,115034,115035],{"class":103},"(np.linalg.norm(tip ",[97,115037,852],{"class":319},[97,115039,115040],{"class":103}," target))\n",[97,115042,115043],{"class":99,"line":17099},[97,115044,2591],{"emptyLinePlaceholder":249},[97,115046,115047,115050,115052,115054,115056],{"class":99,"line":17104},[97,115048,115049],{"class":103},"        terminated ",[97,115051,115],{"class":319},[97,115053,113873],{"class":103},[97,115055,104],{"class":319},[97,115057,113878],{"class":370},[97,115059,115060,115063,115065,115067,115069,115071,115073],{"class":99,"line":17117},[97,115061,115062],{"class":103},"        truncated ",[97,115064,115],{"class":319},[97,115066,39063],{"class":370},[97,115068,113890],{"class":103},[97,115070,1902],{"class":319},[97,115072,39063],{"class":370},[97,115074,113897],{"class":103},[97,115076,115077,115080,115082,115084,115087],{"class":99,"line":17122},[97,115078,115079],{"class":103},"        info ",[97,115081,115],{"class":319},[97,115083,4639],{"class":103},[97,115085,115086],{"class":118},"\"distance\"",[97,115088,115089],{"class":103},": dist}\n",[97,115091,115092,115094],{"class":99,"line":32823},[97,115093,14943],{"class":319},[97,115095,115096],{"class":103}," obs, reward, terminated, truncated, info\n",[97,115098,115099],{"class":99,"line":32829},[97,115100,2591],{"emptyLinePlaceholder":249},[97,115102,115103],{"class":99,"line":32835},[97,115104,2591],{"emptyLinePlaceholder":249},[97,115106,115107,115109,115111,115113,115115],{"class":99,"line":32841},[97,115108,32137],{"class":319},[97,115110,2164],{"class":111},[97,115112,101582],{"class":103},[97,115114,95870],{"class":370},[97,115116,3930],{"class":103},[97,115118,115119,115122,115124],{"class":99,"line":32847},[97,115120,115121],{"class":103},"    env ",[97,115123,115],{"class":319},[97,115125,115126],{"class":103}," ReacherEnv()\n",[97,115128,115129,115132,115134,115137,115139,115141,115143],{"class":99,"line":32858},[97,115130,115131],{"class":103},"    obs, info ",[97,115133,115],{"class":319},[97,115135,115136],{"class":103}," env.reset(",[97,115138,114750],{"class":5407},[97,115140,115],{"class":319},[97,115142,511],{"class":370},[97,115144,329],{"class":103},[97,115146,115147,115149,115151,115154],{"class":99,"line":32864},[97,115148,31489],{"class":370},[97,115150,323],{"class":103},[97,115152,115153],{"class":118},"\"initial obs shape:\"",[97,115155,115156],{"class":103},", obs.shape)\n",[97,115158,115159,115161,115163,115166],{"class":99,"line":32884},[97,115160,31489],{"class":370},[97,115162,323],{"class":103},[97,115164,115165],{"class":118},"\"initial info:\"",[97,115167,115168],{"class":103},", info)\n",[97,115170,115171],{"class":99,"line":32890},[97,115172,2591],{"emptyLinePlaceholder":249},[97,115174,115175,115177,115179],{"class":99,"line":32901},[97,115176,110337],{"class":103},[97,115178,115],{"class":319},[97,115180,104945],{"class":370},[97,115182,115183,115185,115187,115189,115191,115193,115195],{"class":99,"line":32907},[97,115184,3392],{"class":319},[97,115186,31806],{"class":103},[97,115188,26233],{"class":319},[97,115190,32633],{"class":370},[97,115192,323],{"class":103},[97,115194,1020],{"class":370},[97,115196,30976],{"class":103},[97,115198,115199,115201,115203],{"class":99,"line":32913},[97,115200,110406],{"class":103},[97,115202,115],{"class":319},[97,115204,115205],{"class":103}," env.action_space.sample()\n",[97,115207,115208,115211,115213],{"class":99,"line":32919},[97,115209,115210],{"class":103},"        obs, reward, terminated, truncated, info ",[97,115212,115],{"class":319},[97,115214,113599],{"class":103},[97,115216,115217,115219,115221],{"class":99,"line":32925},[97,115218,110481],{"class":103},[97,115220,9668],{"class":319},[97,115222,110486],{"class":103},[97,115224,115225,115227,115229,115231,115233,115236,115238,115240,115243,115245,115247,115250,115252,115254,115257,115259,115261,115263],{"class":99,"line":32931},[97,115226,32641],{"class":370},[97,115228,323],{"class":103},[97,115230,110515],{"class":118},[97,115232,110518],{"class":103},[97,115234,115235],{"class":118},"\"reward:\"",[97,115237,12626],{"class":103},[97,115239,32208],{"class":370},[97,115241,115242],{"class":103},"(reward, ",[97,115244,392],{"class":370},[97,115246,110529],{"class":103},[97,115248,115249],{"class":118},"\"distance:\"",[97,115251,12626],{"class":103},[97,115253,32208],{"class":370},[97,115255,115256],{"class":103},"(info[",[97,115258,115086],{"class":118},[97,115260,112386],{"class":103},[97,115262,392],{"class":370},[97,115264,30687],{"class":103},[97,115266,115267,115269,115272,115275],{"class":99,"line":32937},[97,115268,2688],{"class":319},[97,115270,115271],{"class":103}," terminated ",[97,115273,115274],{"class":319},"or",[97,115276,115277],{"class":103}," truncated:\n",[97,115279,115280],{"class":99,"line":32943},[97,115281,115282],{"class":319},"            break\n",[97,115284,115285],{"class":99,"line":32963},[97,115286,2591],{"emptyLinePlaceholder":249},[97,115288,115289,115291,115293,115295,115297,115299,115301,115303],{"class":99,"line":32969},[97,115290,31489],{"class":370},[97,115292,323],{"class":103},[97,115294,110560],{"class":118},[97,115296,12626],{"class":103},[97,115298,32208],{"class":370},[97,115300,110567],{"class":103},[97,115302,392],{"class":370},[97,115304,30687],{"class":103},[97,115306,115307],{"class":99,"line":32985},[97,115308,2591],{"emptyLinePlaceholder":249},[97,115310,115311],{"class":99,"line":32991},[97,115312,2591],{"emptyLinePlaceholder":249},[97,115314,115315,115317,115319,115321,115323],{"class":99,"line":33005},[97,115316,1723],{"class":319},[97,115318,31410],{"class":370},[97,115320,101743],{"class":319},[97,115322,101746],{"class":118},[97,115324,3930],{"class":103},[97,115326,115327],{"class":99,"line":33011},[97,115328,101753],{"class":103},[24,115330,103754],{},[87,115332,115334],{"className":24011,"code":115333,"language":24013,"meta":92,"style":92},"touch ch8_gym_env.py\n",[94,115335,115336],{"__ignoreMap":92},[97,115337,115338,115340],{"class":99,"line":100},[97,115339,101467],{"class":111},[97,115341,115342],{"class":118}," ch8_gym_env.py\n",[24,115344,110628],{},[87,115346,115348],{"className":24011,"code":115347,"language":24013,"meta":92,"style":92},"python ch8_gym_env.py\n",[94,115349,115350],{"__ignoreMap":92},[97,115351,115352,115354],{"class":99,"line":100},[97,115353,30570],{"class":111},[97,115355,115342],{"class":118},[48,115357,101756],{"id":101756},[24,115359,115360],{},"继承 Gymnasium 环境：",[87,115362,115364],{"className":30568,"code":115363,"language":30570,"meta":92,"style":92},"class ReacherEnv(gym.Env):\n",[94,115365,115366],{"__ignoreMap":92},[97,115367,115368,115370,115372,115374,115376,115378,115380],{"class":99,"line":100},[97,115369,14885],{"class":319},[97,115371,114241],{"class":111},[97,115373,323],{"class":103},[97,115375,113724],{"class":111},[97,115377,878],{"class":103},[97,115379,114250],{"class":111},[97,115381,30976],{"class":103},[24,115383,115384],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[24,115386,115387],{},"初始化模型：",[87,115389,115391],{"className":30568,"code":115390,"language":30570,"meta":92,"style":92},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[94,115392,115393,115407],{"__ignoreMap":92},[97,115394,115395,115397,115399,115401,115403,115405],{"class":99,"line":100},[97,115396,31013],{"class":370},[97,115398,114301],{"class":103},[97,115400,115],{"class":319},[97,115402,101596],{"class":103},[97,115404,101498],{"class":370},[97,115406,329],{"class":103},[97,115408,115409,115411,115413,115415,115417,115419],{"class":99,"line":195},[97,115410,31013],{"class":370},[97,115412,114316],{"class":103},[97,115414,115],{"class":319},[97,115416,114321],{"class":103},[97,115418,31013],{"class":370},[97,115420,114326],{"class":103},[24,115422,115423,115424,115426],{},"这和前面章节一样，只是现在放到了类的 ",[94,115425,31019],{}," 里。",[24,115428,115429],{},"缓存 site ID：",[87,115431,115433],{"className":30568,"code":115432,"language":30570,"meta":92,"style":92},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[94,115434,115435,115449],{"__ignoreMap":92},[97,115436,115437,115439,115441,115443,115445,115447],{"class":99,"line":100},[97,115438,31013],{"class":370},[97,115440,114337],{"class":103},[97,115442,115],{"class":319},[97,115444,114342],{"class":103},[97,115446,89738],{"class":370},[97,115448,329],{"class":103},[97,115450,115451,115453,115455,115457,115459,115461],{"class":99,"line":195},[97,115452,31013],{"class":370},[97,115454,114358],{"class":103},[97,115456,115],{"class":319},[97,115458,114342],{"class":103},[97,115460,89738],{"class":370},[97,115462,329],{"class":103},[24,115464,115465],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[24,115467,115468],{},"reset：",[87,115470,115472],{"className":30568,"code":115471,"language":30570,"meta":92,"style":92},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[94,115473,115474],{"__ignoreMap":92},[97,115475,115476,115478,115480,115482,115484,115486,115488,115490,115492,115494,115496,115498,115500,115502,115504,115506,115508],{"class":99,"line":100},[97,115477,32137],{"class":319},[97,115479,114706],{"class":111},[97,115481,114709],{"class":103},[97,115483,775],{"class":319},[97,115485,114714],{"class":103},[97,115487,326],{"class":370},[97,115489,25299],{"class":319},[97,115491,39123],{"class":370},[97,115493,13755],{"class":319},[97,115495,39123],{"class":370},[97,115497,114727],{"class":103},[97,115499,114730],{"class":370},[97,115501,25299],{"class":319},[97,115503,39123],{"class":370},[97,115505,13755],{"class":319},[97,115507,39123],{"class":370},[97,115509,30976],{"class":103},[24,115511,115512,115514],{},[94,115513,70240],{}," 做四件事：",[138,115516,115517,115520,115523,115526],{},[70,115518,115519],{},"设置随机种子。",[70,115521,115522],{},"重置 MuJoCo data。",[70,115524,115525],{},"随机初始化关节角。",[70,115527,115528],{},"返回初始观测和 info。",[24,115530,115531],{},"step：",[87,115533,115535],{"className":30568,"code":115534,"language":30570,"meta":92,"style":92},"def step(self, action):\n",[94,115536,115537],{"__ignoreMap":92},[97,115538,115539,115541,115543],{"class":99,"line":100},[97,115540,32137],{"class":319},[97,115542,114871],{"class":111},[97,115544,114874],{"class":103},[24,115546,115547,115549],{},[94,115548,107318],{}," 做六件事：",[138,115551,115552,115555,115561,115564,115567,115570],{},[70,115553,115554],{},"检查并裁剪 action。",[70,115556,115557,115558,28575],{},"写入 ",[94,115559,115560],{},"self.data.ctrl",[70,115562,115563],{},"连续推进若干个 MuJoCo 物理步。",[70,115565,115566],{},"计算新观测。",[70,115568,115569],{},"计算奖励和结束条件。",[70,115571,115572],{},"返回 Gymnasium 标准五元组。",[48,115574,101892],{"id":101892},[87,115576,115578],{"className":30568,"code":115577,"language":30570,"meta":92,"style":92},"import gymnasium as gym\n",[94,115579,115580],{"__ignoreMap":92},[97,115581,115582,115584,115586,115588],{"class":99,"line":100},[97,115583,30582],{"class":319},[97,115585,114079],{"class":103},[97,115587,31573],{"class":319},[97,115589,114084],{"class":103},[24,115591,115592,115593,115595,115596,115599],{},"导入 Gymnasium，并起别名 ",[94,115594,113724],{},"。后面写 ",[94,115597,115598],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[87,115601,115603],{"className":30568,"code":115602,"language":30570,"meta":92,"style":92},"from gymnasium import spaces\n",[94,115604,115605],{"__ignoreMap":92},[97,115606,115607,115609,115611,115613],{"class":99,"line":100},[97,115608,30927],{"class":319},[97,115610,114079],{"class":103},[97,115612,30582],{"class":319},[97,115614,114111],{"class":103},[24,115616,115617,115618,115621],{},"导入空间定义工具。",[94,115619,115620],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[87,115623,115624],{"className":30568,"code":115363,"language":30570,"meta":92,"style":92},[94,115625,115626],{"__ignoreMap":92},[97,115627,115628,115630,115632,115634,115636,115638,115640],{"class":99,"line":100},[97,115629,14885],{"class":319},[97,115631,114241],{"class":111},[97,115633,323],{"class":103},[97,115635,113724],{"class":111},[97,115637,878],{"class":103},[97,115639,114250],{"class":111},[97,115641,30976],{"class":103},[24,115643,115644,115645,115648,115649,115651,115652,101202,115654,115656],{},"定义一个类，名字叫 ",[94,115646,115647],{},"ReacherEnv","。括号里的 ",[94,115650,115598],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[94,115653,70240],{},[94,115655,107318],{}," 这两个核心方法。",[87,115658,115660],{"className":30568,"code":115659,"language":30570,"meta":92,"style":92},"metadata = {\"render_modes\": []}\n",[94,115661,115662],{"__ignoreMap":92},[97,115663,115664,115667,115669,115671,115673],{"class":99,"line":100},[97,115665,115666],{"class":103},"metadata ",[97,115668,115],{"class":319},[97,115670,4639],{"class":103},[97,115672,114264],{"class":118},[97,115674,114267],{"class":103},[24,115676,115677],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[87,115679,115681],{"className":30568,"code":115680,"language":30570,"meta":92,"style":92},"def __init__(self) -> None:\n",[94,115682,115683],{"__ignoreMap":92},[97,115684,115685,115687,115689,115691,115693],{"class":99,"line":100},[97,115686,32137],{"class":319},[97,115688,30994],{"class":370},[97,115690,114280],{"class":103},[97,115692,95870],{"class":370},[97,115694,3930],{"class":103},[24,115696,115697,115699,115700,28575],{},[94,115698,31019],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[94,115701,115702],{},"env = ReacherEnv()",[87,115704,115706],{"className":30568,"code":115705,"language":30570,"meta":92,"style":92},"super().__init__()\n",[94,115707,115708],{"__ignoreMap":92},[97,115709,115710,115713,115715,115717],{"class":99,"line":100},[97,115711,115712],{"class":370},"super",[97,115714,17451],{"class":103},[97,115716,31019],{"class":370},[97,115718,2167],{"class":103},[24,115720,115721,115722,115724],{},"调用父类 ",[94,115723,115598],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[87,115726,115727],{"className":30568,"code":115390,"language":30570,"meta":92,"style":92},[94,115728,115729,115743],{"__ignoreMap":92},[97,115730,115731,115733,115735,115737,115739,115741],{"class":99,"line":100},[97,115732,31013],{"class":370},[97,115734,114301],{"class":103},[97,115736,115],{"class":319},[97,115738,101596],{"class":103},[97,115740,101498],{"class":370},[97,115742,329],{"class":103},[97,115744,115745,115747,115749,115751,115753,115755],{"class":99,"line":195},[97,115746,31013],{"class":370},[97,115748,114316],{"class":103},[97,115750,115],{"class":319},[97,115752,114321],{"class":103},[97,115754,31013],{"class":370},[97,115756,114326],{"class":103},[24,115758,115759,115760,115762,115763,101202,115766,115769],{},"把 MuJoCo 模型和状态保存到 ",[94,115761,31013],{}," 上。",[94,115764,115765],{},"self.model",[94,115767,115768],{},"self.data"," 表示这个环境对象自己的模型和状态。",[87,115771,115772],{"className":30568,"code":115432,"language":30570,"meta":92,"style":92},[94,115773,115774,115788],{"__ignoreMap":92},[97,115775,115776,115778,115780,115782,115784,115786],{"class":99,"line":100},[97,115777,31013],{"class":370},[97,115779,114337],{"class":103},[97,115781,115],{"class":319},[97,115783,114342],{"class":103},[97,115785,89738],{"class":370},[97,115787,329],{"class":103},[97,115789,115790,115792,115794,115796,115798,115800],{"class":99,"line":195},[97,115791,31013],{"class":370},[97,115793,114358],{"class":103},[97,115795,115],{"class":319},[97,115797,114342],{"class":103},[97,115799,89738],{"class":370},[97,115801,329],{"class":103},[24,115803,115804,115805,101202,115808,115811],{},"提前查好 tip 和 target 的 site ID。这样 ",[94,115806,115807],{},"_get_obs",[94,115809,115810],{},"_get_reward"," 里就不用每次按名字查找。",[87,115813,115815],{"className":30568,"code":115814,"language":30570,"meta":92,"style":92},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[94,115816,115817,115827,115837],{"__ignoreMap":92},[97,115818,115819,115821,115823,115825],{"class":99,"line":100},[97,115820,31013],{"class":370},[97,115822,114051],{"class":103},[97,115824,115],{"class":319},[97,115826,54611],{"class":370},[97,115828,115829,115831,115833,115835],{"class":99,"line":195},[97,115830,31013],{"class":370},[97,115832,114430],{"class":103},[97,115834,115],{"class":319},[97,115836,114435],{"class":370},[97,115838,115839,115841,115843,115845],{"class":99,"line":241},[97,115840,31013],{"class":370},[97,115842,113890],{"class":103},[97,115844,115],{"class":319},[97,115846,47523],{"class":370},[24,115848,115849,115852,115853,115856,115857,115860],{},[94,115850,115851],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[94,115854,115855],{},"max_steps"," 是一个 episode 最多运行多少步。",[94,115858,115859],{},"steps"," 记录当前 episode 已经走了多少步。",[87,115862,115863],{"className":30568,"code":113929,"language":30570,"meta":92,"style":92},[94,115864,115865],{"__ignoreMap":92},[97,115866,115867,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905],{"class":99,"line":100},[97,115868,31013],{"class":370},[97,115870,113938],{"class":103},[97,115872,115],{"class":319},[97,115874,113943],{"class":103},[97,115876,113946],{"class":5407},[97,115878,113949],{"class":319},[97,115880,102587],{"class":370},[97,115882,12626],{"class":103},[97,115884,113956],{"class":5407},[97,115886,115],{"class":319},[97,115888,102587],{"class":370},[97,115890,12626],{"class":103},[97,115892,96147],{"class":5407},[97,115894,115],{"class":319},[97,115896,323],{"class":103},[97,115898,398],{"class":370},[97,115900,113973],{"class":103},[97,115902,93684],{"class":5407},[97,115904,115],{"class":319},[97,115906,113980],{"class":103},[24,115908,115909,115910,115913,115914,101202,115917,115920],{},"定义动作空间。",[94,115911,115912],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[94,115915,115916],{},"low=-1.0",[94,115918,115919],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[87,115922,115923],{"className":30568,"code":113990,"language":30570,"meta":92,"style":92},[94,115924,115925],{"__ignoreMap":92},[97,115926,115927,115929,115931,115933,115935,115937,115939,115941,115943,115945,115947,115949,115951,115953,115955,115957,115959,115961],{"class":99,"line":100},[97,115928,31013],{"class":370},[97,115930,113999],{"class":103},[97,115932,115],{"class":319},[97,115934,113943],{"class":103},[97,115936,113946],{"class":5407},[97,115938,113949],{"class":319},[97,115940,114010],{"class":103},[97,115942,113956],{"class":5407},[97,115944,115],{"class":319},[97,115946,114010],{"class":103},[97,115948,96147],{"class":5407},[97,115950,115],{"class":319},[97,115952,323],{"class":103},[97,115954,766],{"class":370},[97,115956,113973],{"class":103},[97,115958,93684],{"class":5407},[97,115960,115],{"class":319},[97,115962,113980],{"class":103},[24,115964,115965,115966,115969,115970,115973],{},"定义观测空间。",[94,115967,115968],{},"shape=(10,)"," 表示观测是 10 个数。",[94,115971,115972],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[87,115975,115977],{"className":30568,"code":115976,"language":30570,"meta":92,"style":92},"def _get_obs(self) -> np.ndarray:\n",[94,115978,115979],{"__ignoreMap":92},[97,115980,115981,115983,115985],{"class":99,"line":100},[97,115982,32137],{"class":319},[97,115984,114540],{"class":111},[97,115986,114543],{"class":103},[24,115988,115989,115990,115992],{},"定义内部函数，用来生成观测。函数名前面的 ",[94,115991,1311],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[87,115994,115996],{"className":30568,"code":115995,"language":30570,"meta":92,"style":92},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[94,115997,115998,116012],{"__ignoreMap":92},[97,115999,116000,116002,116004,116006,116008,116010],{"class":99,"line":100},[97,116001,111752],{"class":103},[97,116003,115],{"class":319},[97,116005,39063],{"class":370},[97,116007,114554],{"class":103},[97,116009,31013],{"class":370},[97,116011,114559],{"class":103},[97,116013,116014,116016,116018,116020,116022,116024],{"class":99,"line":195},[97,116015,111762],{"class":103},[97,116017,115],{"class":319},[97,116019,39063],{"class":370},[97,116021,114554],{"class":103},[97,116023,31013],{"class":370},[97,116025,114574],{"class":103},[24,116027,116028],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[87,116030,116032],{"className":30568,"code":116031,"language":30570,"meta":92,"style":92},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[94,116033,116034,116050],{"__ignoreMap":92},[97,116035,116036,116038,116040,116042,116044,116046,116048],{"class":99,"line":100},[97,116037,111038],{"class":103},[97,116039,115],{"class":319},[97,116041,114583],{"class":103},[97,116043,31013],{"class":370},[97,116045,114588],{"class":103},[97,116047,31013],{"class":370},[97,116049,114593],{"class":103},[97,116051,116052,116054],{"class":99,"line":195},[97,116053,17236],{"class":319},[97,116055,114600],{"class":103},[24,116057,116058,116059,116062,116063,116065],{},"拼接观测，并转换成 ",[94,116060,116061],{},"float32","。很多强化学习库默认使用 ",[94,116064,116061],{},"，所以这里主动转换。",[87,116067,116068],{"className":30568,"code":115471,"language":30570,"meta":92,"style":92},[94,116069,116070],{"__ignoreMap":92},[97,116071,116072,116074,116076,116078,116080,116082,116084,116086,116088,116090,116092,116094,116096,116098,116100,116102,116104],{"class":99,"line":100},[97,116073,32137],{"class":319},[97,116075,114706],{"class":111},[97,116077,114709],{"class":103},[97,116079,775],{"class":319},[97,116081,114714],{"class":103},[97,116083,326],{"class":370},[97,116085,25299],{"class":319},[97,116087,39123],{"class":370},[97,116089,13755],{"class":319},[97,116091,39123],{"class":370},[97,116093,114727],{"class":103},[97,116095,114730],{"class":370},[97,116097,25299],{"class":319},[97,116099,39123],{"class":370},[97,116101,13755],{"class":319},[97,116103,39123],{"class":370},[97,116105,30976],{"class":103},[24,116107,116108,116109,116111,116112,116115],{},"定义 reset。",[94,116110,114750],{}," 用来控制随机数，保证实验可以复现。",[94,116113,116114],{},"options"," 用来接收额外配置，本章暂时不用。",[87,116117,116119],{"className":30568,"code":116118,"language":30570,"meta":92,"style":92},"super().reset(seed=seed)\n",[94,116120,116121],{"__ignoreMap":92},[97,116122,116123,116125,116127,116129,116131],{"class":99,"line":100},[97,116124,115712],{"class":370},[97,116126,114747],{"class":103},[97,116128,114750],{"class":5407},[97,116130,115],{"class":319},[97,116132,114755],{"class":103},[24,116134,116135,116136,116139],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[94,116137,116138],{},"self.np_random"," 生成可复现的随机数。",[87,116141,116143],{"className":30568,"code":116142,"language":30570,"meta":92,"style":92},"mujoco.mj_resetData(self.model, self.data)\n",[94,116144,116145],{"__ignoreMap":92},[97,116146,116147,116150,116152,116154,116156],{"class":99,"line":100},[97,116148,116149],{"class":103},"mujoco.mj_resetData(",[97,116151,31013],{"class":370},[97,116153,114765],{"class":103},[97,116155,31013],{"class":370},[97,116157,114770],{"class":103},[24,116159,116160],{},"把 MuJoCo 状态重置到默认状态。",[87,116162,116164],{"className":30568,"code":116163,"language":30570,"meta":92,"style":92},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[94,116165,116166],{"__ignoreMap":92},[97,116167,116168,116170,116172,116174,116176,116178,116180,116182,116184,116186,116188,116190,116192,116194,116196,116198,116200],{"class":99,"line":100},[97,116169,31013],{"class":370},[97,116171,114781],{"class":103},[97,116173,115],{"class":319},[97,116175,39063],{"class":370},[97,116177,114788],{"class":103},[97,116179,113946],{"class":5407},[97,116181,113949],{"class":319},[97,116183,86394],{"class":370},[97,116185,12626],{"class":103},[97,116187,113956],{"class":5407},[97,116189,115],{"class":319},[97,116191,86394],{"class":370},[97,116193,12626],{"class":103},[97,116195,31686],{"class":5407},[97,116197,115],{"class":319},[97,116199,31013],{"class":370},[97,116201,114813],{"class":103},[24,116203,115525,116204,116207,116208,116211,116212,116214],{},[94,116205,116206],{},"[:]"," 表示修改整个数组。",[94,116209,116210],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[94,116213,102334],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[87,116216,116218],{"className":30568,"code":116217,"language":30570,"meta":92,"style":92},"self.data.qvel[:] = 0.0\n",[94,116219,116220],{"__ignoreMap":92},[97,116221,116222,116224,116226,116228],{"class":99,"line":100},[97,116223,31013],{"class":370},[97,116225,114820],{"class":103},[97,116227,115],{"class":319},[97,116229,104945],{"class":370},[24,116231,116232],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[87,116234,116236],{"className":30568,"code":116235,"language":30570,"meta":92,"style":92},"self.steps = 0\nreturn self._get_obs(), {}\n",[94,116237,116238,116248],{"__ignoreMap":92},[97,116239,116240,116242,116244,116246],{"class":99,"line":100},[97,116241,31013],{"class":370},[97,116243,113890],{"class":103},[97,116245,115],{"class":319},[97,116247,47523],{"class":370},[97,116249,116250,116252,116254],{"class":99,"line":195},[97,116251,17236],{"class":319},[97,116253,39063],{"class":370},[97,116255,114860],{"class":103},[24,116257,116258],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[87,116260,116261],{"className":30568,"code":115534,"language":30570,"meta":92,"style":92},[94,116262,116263],{"__ignoreMap":92},[97,116264,116265,116267,116269],{"class":99,"line":100},[97,116266,32137],{"class":319},[97,116268,114871],{"class":111},[97,116270,114874],{"class":103},[24,116272,116273],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[87,116275,116277],{"className":30568,"code":116276,"language":30570,"meta":92,"style":92},"action = np.asarray(action, dtype=np.float32)\n",[94,116278,116279],{"__ignoreMap":92},[97,116280,116281,116283,116285,116287,116289,116291],{"class":99,"line":100},[97,116282,107626],{"class":103},[97,116284,115],{"class":319},[97,116286,114883],{"class":103},[97,116288,93684],{"class":5407},[97,116290,115],{"class":319},[97,116292,113980],{"class":103},[24,116294,116295,116296,28575],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[94,116297,116061],{},[87,116299,116301],{"className":30568,"code":116300,"language":30570,"meta":92,"style":92},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[94,116302,116303],{"__ignoreMap":92},[97,116304,116305,116307,116309,116311,116313,116315,116317],{"class":99,"line":100},[97,116306,107626],{"class":103},[97,116308,115],{"class":319},[97,116310,107631],{"class":103},[97,116312,31013],{"class":370},[97,116314,114902],{"class":103},[97,116316,31013],{"class":370},[97,116318,114907],{"class":103},[24,116320,116321],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[87,116323,116325],{"className":30568,"code":116324,"language":30570,"meta":92,"style":92},"self.data.ctrl[:] = action\n",[94,116326,116327],{"__ignoreMap":92},[97,116328,116329,116331,116333,116335],{"class":99,"line":100},[97,116330,31013],{"class":370},[97,116332,114918],{"class":103},[97,116334,115],{"class":319},[97,116336,107654],{"class":103},[24,116338,116339],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[87,116341,116343],{"className":30568,"code":116342,"language":30570,"meta":92,"style":92},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[94,116344,116345,116361],{"__ignoreMap":92},[97,116346,116347,116349,116351,116353,116355,116357,116359],{"class":99,"line":100},[97,116348,3216],{"class":319},[97,116350,101685],{"class":103},[97,116352,26233],{"class":319},[97,116354,32633],{"class":370},[97,116356,323],{"class":103},[97,116358,31013],{"class":370},[97,116360,114939],{"class":103},[97,116362,116363,116366,116368,116370,116372],{"class":99,"line":195},[97,116364,116365],{"class":103},"    mujoco.mj_step(",[97,116367,31013],{"class":370},[97,116369,114765],{"class":103},[97,116371,31013],{"class":370},[97,116373,114770],{"class":103},[24,116375,116376,116377,116380,116381,116383,116384,28575],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[94,116378,116379],{},"frame_skip=5","，所以外部调用一次 ",[94,116382,114061],{},"，内部实际执行 5 次 ",[94,116385,101399],{},[87,116387,116389],{"className":30568,"code":116388,"language":30570,"meta":92,"style":92},"self.steps += 1\n",[94,116390,116391],{"__ignoreMap":92},[97,116392,116393,116395,116397,116399],{"class":99,"line":100},[97,116394,31013],{"class":370},[97,116396,113890],{"class":103},[97,116398,9668],{"class":319},[97,116400,55883],{"class":370},[24,116402,116403],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[87,116405,116407],{"className":30568,"code":116406,"language":30570,"meta":92,"style":92},"obs = self._get_obs()\nreward = self._get_reward()\n",[94,116408,116409,116419],{"__ignoreMap":92},[97,116410,116411,116413,116415,116417],{"class":99,"line":100},[97,116412,111038],{"class":103},[97,116414,115],{"class":319},[97,116416,39063],{"class":370},[97,116418,114981],{"class":103},[97,116420,116421,116423,116425,116427],{"class":99,"line":195},[97,116422,111189],{"class":103},[97,116424,115],{"class":319},[97,116426,39063],{"class":370},[97,116428,114992],{"class":103},[24,116430,116431],{},"计算新的观测和奖励。",[87,116433,116435],{"className":30568,"code":116434,"language":30570,"meta":92,"style":92},"dist = float(np.linalg.norm(tip - target))\n",[94,116436,116437],{"__ignoreMap":92},[97,116438,116439,116441,116443,116445,116447,116449],{"class":99,"line":100},[97,116440,111780],{"class":103},[97,116442,115],{"class":319},[97,116444,109981],{"class":370},[97,116446,115035],{"class":103},[97,116448,852],{"class":319},[97,116450,115040],{"class":103},[24,116452,116453],{},"计算末端到目标的距离，并转换成 Python float。",[87,116455,116456],{"className":30568,"code":113861,"language":30570,"meta":92,"style":92},[94,116457,116458,116470],{"__ignoreMap":92},[97,116459,116460,116462,116464,116466,116468],{"class":99,"line":100},[97,116461,113868],{"class":103},[97,116463,115],{"class":319},[97,116465,113873],{"class":103},[97,116467,104],{"class":319},[97,116469,113878],{"class":370},[97,116471,116472,116474,116476,116478,116480,116482,116484],{"class":99,"line":195},[97,116473,113883],{"class":103},[97,116475,115],{"class":319},[97,116477,39063],{"class":370},[97,116479,113890],{"class":103},[97,116481,1902],{"class":319},[97,116483,39063],{"class":370},[97,116485,113897],{"class":103},[24,116487,116488],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[87,116490,116492],{"className":30568,"code":116491,"language":30570,"meta":92,"style":92},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[94,116493,116494,116507],{"__ignoreMap":92},[97,116495,116496,116499,116501,116503,116505],{"class":99,"line":100},[97,116497,116498],{"class":103},"info ",[97,116500,115],{"class":319},[97,116502,4639],{"class":103},[97,116504,115086],{"class":118},[97,116506,115089],{"class":103},[97,116508,116509,116511],{"class":99,"line":195},[97,116510,17236],{"class":319},[97,116512,115096],{"class":103},[24,116514,116515,116518],{},[94,116516,116517],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[87,116520,116522],{"className":30568,"code":116521,"language":30570,"meta":92,"style":92},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[94,116523,116524,116533],{"__ignoreMap":92},[97,116525,116526,116529,116531],{"class":99,"line":100},[97,116527,116528],{"class":103},"env ",[97,116530,115],{"class":319},[97,116532,115126],{"class":103},[97,116534,116535,116537,116539,116541,116543,116545,116547],{"class":99,"line":195},[97,116536,113584],{"class":103},[97,116538,115],{"class":319},[97,116540,115136],{"class":103},[97,116542,114750],{"class":5407},[97,116544,115],{"class":319},[97,116546,511],{"class":370},[97,116548,329],{"class":103},[24,116550,116551,116552,116555],{},"创建环境并重置。",[94,116553,116554],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[87,116557,116559],{"className":30568,"code":116558,"language":30570,"meta":92,"style":92},"action = env.action_space.sample()\n",[94,116560,116561],{"__ignoreMap":92},[97,116562,116563,116565,116567],{"class":99,"line":100},[97,116564,107626],{"class":103},[97,116566,115],{"class":319},[97,116568,115205],{"class":103},[24,116570,116571],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116573,102500],{"id":102499},[24,116575,105668],{},[87,116577,116580],{"className":116578,"code":116579,"language":5378,"meta":92},[5376],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[94,116581,116579],{"__ignoreMap":92},[24,116583,116584],{},"这个环境已经具备强化学习环境的基本结构。",[24,116586,116587],{},"主函数里使用随机动作：",[87,116589,116590],{"className":30568,"code":116558,"language":30570,"meta":92,"style":92},[94,116591,116592],{"__ignoreMap":92},[97,116593,116594,116596,116598],{"class":99,"line":100},[97,116595,107626],{"class":103},[97,116597,115],{"class":319},[97,116599,115205],{"class":103},[24,116601,116602],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116604,102532],{"id":102531},[138,116606,116607,116610,116616,116625,116634,116643,116649],{},[70,116608,116609],{},"运行程序。",[70,116611,116612,116613,28575],{},"确认 ",[94,116614,116615],{},"obs.shape == (10,)",[70,116617,111365,116618,116621,116622,28575],{},[94,116619,116620],{},"env.action_space","，应类似 ",[94,116623,116624],{},"Box(-1.0, 1.0, (2,), float32)",[70,116626,105769,116627,116630,116631,28575],{},[94,116628,116629],{},"self.max_steps = 10","，确认环境会更快 ",[94,116632,116633],{},"truncated=True",[70,116635,102595,116636,102598,116639,116642],{},[94,116637,116638],{},"terminated = dist \u003C 0.05",[94,116640,116641],{},"dist \u003C 0.2","，观察是否更容易结束。",[70,116644,102595,116645,116648],{},[94,116646,116647],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[70,116650,116651,116652,116654,116655,116658],{},"在 ",[94,116653,116517],{}," 里加入 ",[94,116656,116657],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116660,102637],{"id":102636},[48,116662,116664],{"id":116663},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[24,116666,116667,116668,116670],{},"Gymnasium 的 ",[94,116669,107318],{}," 返回 5 个值:",[87,116672,116674],{"className":30568,"code":116673,"language":30570,"meta":92,"style":92},"obs, reward, terminated, truncated, info\n",[94,116675,116676],{"__ignoreMap":92},[97,116677,116678],{"class":99,"line":100},[97,116679,116673],{"class":103},[24,116681,116682],{},"不是旧 Gym 的 4 个值。",[48,116684,116686,116689],{"id":116685},"datactrl-action-维度错误",[94,116687,116688],{},"data.ctrl[:] = action"," 维度错误",[24,116691,102707],{},[87,116693,116695],{"className":30568,"code":116694,"language":30570,"meta":92,"style":92},"print(self.model.nu)\nprint(action.shape)\n",[94,116696,116697,116708],{"__ignoreMap":92},[97,116698,116699,116701,116703,116705],{"class":99,"line":100},[97,116700,30605],{"class":370},[97,116702,323],{"class":103},[97,116704,31013],{"class":370},[97,116706,116707],{"class":103},".model.nu)\n",[97,116709,116710,116712],{"class":99,"line":195},[97,116711,30605],{"class":370},[97,116713,116714],{"class":103},"(action.shape)\n",[24,116716,116717],{},"两者必须匹配。",[48,116719,116721],{"id":116720},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[24,116723,102646],{},[87,116725,116727],{"className":30568,"code":116726,"language":30570,"meta":92,"style":92},"mujoco.mj_forward(self.model, self.data)\n",[94,116728,116729],{"__ignoreMap":92},[97,116730,116731,116734,116736,116738,116740],{"class":99,"line":100},[97,116732,116733],{"class":103},"mujoco.mj_forward(",[97,116735,31013],{"class":370},[97,116737,114765],{"class":103},[97,116739,31013],{"class":370},[97,116741,114770],{"class":103},[48,116743,116745,116747],{"id":116744},"observation_space-维度和-obs-不一致",[94,116746,113784],{}," 维度和 obs 不一致",[24,116749,102759],{},[87,116751,116753],{"className":30568,"code":116752,"language":30570,"meta":92,"style":92},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[94,116754,116755,116765,116772],{"__ignoreMap":92},[97,116756,116757,116759,116761,116763],{"class":99,"line":100},[97,116758,111038],{"class":103},[97,116760,115],{"class":319},[97,116762,39063],{"class":370},[97,116764,114981],{"class":103},[97,116766,116767,116769],{"class":99,"line":195},[97,116768,30605],{"class":370},[97,116770,116771],{"class":103},"(obs.shape)\n",[97,116773,116774,116776,116778,116780],{"class":99,"line":241},[97,116775,30605],{"class":370},[97,116777,323],{"class":103},[97,116779,31013],{"class":370},[97,116781,116782],{"class":103},".observation_space.shape)\n",[24,116784,116785],{},"两者必须一致。本章观测是：",[87,116787,116790],{"className":116788,"code":116789,"language":5378,"meta":92},[5376],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[94,116791,116789],{"__ignoreMap":92},[48,116793,116795],{"id":116794},"action-超过范围","action 超过范围",[24,116797,116798],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[87,116800,116801],{"className":30568,"code":116300,"language":30570,"meta":92,"style":92},[94,116802,116803],{"__ignoreMap":92},[97,116804,116805,116807,116809,116811,116813,116815,116817],{"class":99,"line":100},[97,116806,107626],{"class":103},[97,116808,115],{"class":319},[97,116810,107631],{"class":103},[97,116812,31013],{"class":370},[97,116814,114902],{"class":103},[97,116816,31013],{"class":370},[97,116818,114907],{"class":103},[24,116820,116821,116822,28575],{},"这能避免无效动作直接写入 ",[94,116823,101260],{},[48,116825,116827],{"id":116826},"忘记返回-info","忘记返回 info",[24,116829,116667,116830,101202,116832,116834],{},[94,116831,70240],{},[94,116833,107318],{}," 都会返回 info：",[87,116836,116837],{"className":30568,"code":113577,"language":30570,"meta":92,"style":92},[94,116838,116839,116847],{"__ignoreMap":92},[97,116840,116841,116843,116845],{"class":99,"line":100},[97,116842,113584],{"class":103},[97,116844,115],{"class":319},[97,116846,113589],{"class":103},[97,116848,116849,116851,116853],{"class":99,"line":195},[97,116850,113594],{"class":103},[97,116852,115],{"class":319},[97,116854,113599],{"class":103},[24,116856,116857,116858,28575],{},"即使暂时没有额外信息，也返回 ",[94,116859,32649],{},[14,116861,116863],{"id":116862},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[24,116865,116866],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[138,116868,116869,116872,116875,116878,116881,116884],{},[70,116870,116871],{},"更稳定的 reward。",[70,116873,116874],{},"合理的 episode 长度。",[70,116876,116877],{},"可重复的随机目标采样。",[70,116879,116880],{},"render 接口。",[70,116882,116883],{},"环境注册代码。",[70,116885,116886],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[24,116888,116889],{},"如果只是自己写训练循环，最小形式是：",[87,116891,116893],{"className":30568,"code":116892,"language":30570,"meta":92,"style":92},"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",[94,116894,116895,116903,116919,116923,116939,116948,116957,116967],{"__ignoreMap":92},[97,116896,116897,116899,116901],{"class":99,"line":100},[97,116898,116528],{"class":103},[97,116900,115],{"class":319},[97,116902,115126],{"class":103},[97,116904,116905,116907,116909,116911,116913,116915,116917],{"class":99,"line":195},[97,116906,113584],{"class":103},[97,116908,115],{"class":319},[97,116910,115136],{"class":103},[97,116912,114750],{"class":5407},[97,116914,115],{"class":319},[97,116916,511],{"class":370},[97,116918,329],{"class":103},[97,116920,116921],{"class":99,"line":241},[97,116922,2591],{"emptyLinePlaceholder":249},[97,116924,116925,116927,116929,116931,116933,116935,116937],{"class":99,"line":1387},[97,116926,3216],{"class":319},[97,116928,101685],{"class":103},[97,116930,26233],{"class":319},[97,116932,32633],{"class":370},[97,116934,323],{"class":103},[97,116936,6601],{"class":370},[97,116938,30976],{"class":103},[97,116940,116941,116944,116946],{"class":99,"line":1393},[97,116942,116943],{"class":103},"    action ",[97,116945,115],{"class":319},[97,116947,115205],{"class":103},[97,116949,116950,116953,116955],{"class":99,"line":1407},[97,116951,116952],{"class":103},"    obs, reward, terminated, truncated, info ",[97,116954,115],{"class":319},[97,116956,113599],{"class":103},[97,116958,116959,116961,116963,116965],{"class":99,"line":1413},[97,116960,3292],{"class":319},[97,116962,115271],{"class":103},[97,116964,115274],{"class":319},[97,116966,115277],{"class":103},[97,116968,116969,116972,116974],{"class":99,"line":1504},[97,116970,116971],{"class":103},"        obs, info ",[97,116973,115],{"class":319},[97,116975,113589],{"class":103},[14,116977,116979],{"id":116978},"_9本章小结","9.本章小结",[24,116981,116982],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[87,116984,116987],{"className":116985,"code":116986,"language":5378,"meta":92},[5376],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[94,116988,116986],{"__ignoreMap":92},[24,116990,116991],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[231,116993,116994],{},"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":92,"searchDepth":195,"depth":195,"links":116996},[116997,116998,116999,117006,117010,117011,117012,117022,117023],{"id":100830,"depth":195,"text":100831},{"id":100953,"depth":195,"text":100954},{"id":101228,"depth":195,"text":101229,"children":117000},[117001,117003,117005],{"id":113808,"depth":241,"text":117002},"terminated 和 truncated 的区别",{"id":113911,"depth":241,"text":117004},"observation_space 和 action_space",{"id":114038,"depth":241,"text":114039},{"id":101436,"depth":195,"text":101437,"children":117007},[117008,117009],{"id":101756,"depth":241,"text":101756},{"id":101892,"depth":241,"text":101892},{"id":102499,"depth":195,"text":102500},{"id":102531,"depth":195,"text":102532},{"id":102636,"depth":195,"text":102637,"children":117013},[117014,117015,117017,117018,117020,117021],{"id":116663,"depth":241,"text":116664},{"id":116685,"depth":241,"text":117016},"data.ctrl[:] = action 维度错误",{"id":116720,"depth":241,"text":116721},{"id":116744,"depth":241,"text":117019},"observation_space 维度和 obs 不一致",{"id":116794,"depth":241,"text":116795},{"id":116826,"depth":241,"text":116827},{"id":116862,"depth":195,"text":116863},{"id":116978,"depth":195,"text":116979},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113561,"description":92},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117030,"title":117031,"body":117032,"description":117455,"extension":247,"meta":117456,"navigation":249,"path":117457,"seo":117458,"stem":117459,"__hash__":117460},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117033,"toc":117445},[117034,117038,117041,117044,117064,117070,117076,117086,117089,117092,117112,117115,117119,117122,117128,117131,117145,117148,117151,117225,117228,117234,117237,117260,117263,117313,117316,117322,117325,117328,117331,117350,117353,117359,117362,117365,117368,117388,117391,117394,117397,117442],[10,117035,117037],{"id":117036},"mujoco-学习","MuJoCo 学习",[24,117039,117040],{},"初版",[24,117042,117043],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[138,117045,117046,117049,117052,117061],{},[70,117047,117048],{},"MuJoCo 模型文件在描述什么。",[70,117050,117051],{},"Python 代码怎样读取和推进仿真。",[70,117053,117054,532,117056,532,117058,117060],{},[94,117055,104214],{},[94,117057,104544],{},[94,117059,104547],{}," 这些数组为什么重要。",[70,117062,117063],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[24,117065,117066,117067,117069],{},"默认环境为 Fedora 44、Python >= 3.10、",[94,117068,101211],{}," 官方 Python bindings。",[24,117071,117072,117073,117075],{},"注意：本文禁止使用 ",[94,117074,101196],{},"。所有示例均使用：",[87,117077,117078],{"className":30568,"code":101762,"language":30570,"meta":92,"style":92},[94,117079,117080],{"__ignoreMap":92},[97,117081,117082,117084],{"class":99,"line":100},[97,117083,30582],{"class":319},[97,117085,101485],{"class":103},[14,117087,117088],{"id":117088},"适合谁阅读",[24,117090,117091],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[138,117093,117094,117097,117100,117103],{},[70,117095,117096],{},"没学过 MuJoCo，只会一点 Python。",[70,117098,117099],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[70,117101,117102],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[70,117104,117105,117106,117108,117109,117111],{},"以前接触过 ",[94,117107,101196],{},"，现在想迁移到官方 ",[94,117110,101205],{}," Python bindings。",[24,117113,117114],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117116,117118],{"id":117117},"mujoco-到底是什么","MuJoCo 到底是什么",[24,117120,117121],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[87,117123,117126],{"className":117124,"code":117125,"language":5378,"meta":92},[5376],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[94,117127,117125],{"__ignoreMap":92},[24,117129,117130],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[138,117132,117133,117136,117139,117142],{},[70,117134,117135],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[70,117137,117138],{},"快速测试控制算法，不必一开始就上真实机器人。",[70,117140,117141],{},"生成强化学习环境。",[70,117143,117144],{},"采集状态、动作、图像、奖励等训练数据。",[14,117146,117147],{"id":117147},"学习前的心智模型",[24,117149,117150],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[457,117152,117153,117165],{},[460,117154,117155],{},[463,117156,117157,117160,117163],{},[466,117158,117159],{"align":23925},"部分",[466,117161,117162],{"align":23925},"负责什么",[466,117164,21377],{"align":23925},[504,117166,117167,117178,117190,117202,117214],{},[463,117168,117169,117172,117175],{},[509,117170,117171],{"align":23925},"MJCF XML",[509,117173,117174],{"align":23925},"定义世界和机器人结构",[509,117176,117177],{"align":23925},"地面、盒子、关节、电机、摄像头",[463,117179,117180,117184,117187],{},[509,117181,117182],{"align":23925},[94,117183,100893],{},[509,117185,117186],{"align":23925},"编译后的静态模型",[509,117188,117189],{"align":23925},"有几个关节、有几个电机、时间步长是多少",[463,117191,117192,117196,117199],{},[509,117193,117194],{"align":23925},[94,117195,100903],{},[509,117197,117198],{"align":23925},"运行中的动态状态",[509,117200,117201],{"align":23925},"当前时间、位置、速度、电机输入",[463,117203,117204,117208,117211],{},[509,117205,117206],{"align":23925},[94,117207,101399],{},[509,117209,117210],{"align":23925},"推进一步物理仿真",[509,117212,117213],{"align":23925},"根据重力、力、碰撞更新状态",[463,117215,117216,117219,117222],{},[509,117217,117218],{"align":23925},"Viewer \u002F Renderer",[509,117220,117221],{"align":23925},"把仿真显示出来",[509,117223,117224],{"align":23925},"打开窗口或保存图片",[24,117226,117227],{},"一句话总结：",[87,117229,117232],{"className":117230,"code":117231,"language":5378,"meta":92},[5376],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[94,117233,117231],{"__ignoreMap":92},[24,117235,117236],{},"参考来源：",[67,117238,117239,117246,117253],{},[70,117240,117241,117242],{},"MuJoCo Python 官方文档：",[558,117243,117244],{"href":117244,"rel":117245},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24054],[70,117247,117248,117249],{},"MuJoCo XML Reference：",[558,117250,117251],{"href":117251,"rel":117252},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24054],[70,117254,117255,117256],{},"MuJoCo Overview：",[558,117257,117258],{"href":117258,"rel":117259},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24054],[14,117261,117262],{"id":117262},"章节目录",[138,117264,117265,117271,117277,117283,117289,117295,117301,117307],{},[70,117266,117267],{},[558,117268,117270],{"href":117269},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[70,117272,117273],{},[558,117274,117276],{"href":117275},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[70,117278,117279],{},[558,117280,117282],{"href":117281},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[70,117284,117285],{},[558,117286,117288],{"href":117287},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[70,117290,117291],{},[558,117292,117294],{"href":117293},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[70,117296,117297],{},[558,117298,117300],{"href":117299},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[70,117302,117303],{},[558,117304,117306],{"href":117305},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[70,117308,117309],{},[558,117310,117312],{"href":117311},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117314,117315],{"id":117315},"推荐学习路线",[87,117317,117320],{"className":117318,"code":117319,"language":5378,"meta":92},[5376],"环境安装\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",[94,117321,117319],{"__ignoreMap":92},[24,117323,117324],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117326,117327],{"id":117327},"建议的目录结构",[24,117329,117330],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[87,117332,117334],{"className":24011,"code":117333,"language":24013,"meta":92,"style":92},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[94,117335,117336,117344],{"__ignoreMap":92},[97,117337,117338,117340,117342],{"class":99,"line":100},[97,117339,101450],{"class":111},[97,117341,29406],{"class":370},[97,117343,101455],{"class":118},[97,117345,117346,117348],{"class":99,"line":195},[97,117347,101460],{"class":370},[97,117349,101455],{"class":118},[24,117351,117352],{},"每一章的代码都单独保存：",[87,117354,117357],{"className":117355,"code":117356,"language":5378,"meta":92},[5376],"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",[94,117358,117356],{"__ignoreMap":92},[24,117360,117361],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117363,117364],{"id":117364},"学习方法",[24,117366,117367],{},"每章建议按这个顺序操作：",[138,117369,117370,117373,117376,117379,117382,117385],{},[70,117371,117372],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[70,117374,117375],{},"复制最小可运行代码，保存成指定文件。",[70,117377,117378],{},"运行代码，确认没有报错。",[70,117380,117381],{},"对照“运行结果说明”理解输出。",[70,117383,117384],{},"做“验证步骤”，主动改一两个参数。",[70,117386,117387],{},"遇到报错先看“常见错误与解决方案”。",[24,117389,117390],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117392,117393],{"id":117393},"全局排错顺序",[24,117395,117396],{},"遇到问题时，按下面顺序查：",[138,117398,117399,117405,117411,117416,117419,117422,117429,117439],{},[70,117400,117401,117402],{},"Python 环境是否激活：",[94,117403,117404],{},"which python",[70,117406,117407,117408],{},"MuJoCo 是否能导入：",[94,117409,117410],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[70,117412,117413,117414],{},"是否误装了 ",[94,117415,101196],{},[70,117417,117418],{},"XML 标签是否闭合、属性是否拼写正确",[70,117420,117421],{},"actuator 引用的 joint 名字是否存在",[70,117423,117424,117426,117427],{},[94,117425,101260],{}," 的长度是否等于 ",[94,117428,102342],{},[70,117430,105769,117431,82723,117433,117435,117436],{},[94,117432,104214],{},[94,117434,104544],{}," 后是否调用了 ",[94,117437,117438],{},"mujoco.mj_forward",[70,117440,117441],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[231,117443,117444],{},"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":92,"searchDepth":195,"depth":195,"links":117446},[117447,117448,117449,117450,117451,117452,117453,117454],{"id":117088,"depth":195,"text":117088},{"id":117117,"depth":195,"text":117118},{"id":117147,"depth":195,"text":117147},{"id":117262,"depth":195,"text":117262},{"id":117315,"depth":195,"text":117315},{"id":117327,"depth":195,"text":117327},{"id":117364,"depth":195,"text":117364},{"id":117393,"depth":195,"text":117393},"仿真搭建。",{"category":23567},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117031,"description":117455},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117462,"title":117463,"body":117464,"description":246,"extension":247,"meta":117919,"navigation":249,"path":117920,"seo":117921,"stem":117922,"__hash__":117923},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117465,"toc":117917},[117466,117469,117472,117478,117914],[10,117467,117463],{"id":117468},"_1-最常用的基本操作更新",[24,117470,117471],{},"装linux系统教程：",[24,117473,117474],{},[558,117475,117476],{"href":117476,"rel":117477},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24054],[87,117479,117483],{"className":117480,"code":117481,"language":117482,"meta":92,"style":92},"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",[94,117484,117485,117490,117495,117504,117509,117518,117523,117543,117548,117559,117564,117573,117578,117606,117611,117630,117635,117654,117658,117663,117679,117683,117688,117718,117722,117727,117743,117747,117752,117767,117771,117776,117792,117796,117801,117813,117825,117829,117834,117851,117855,117860,117878,117882,117887,117896,117900,117905],{"__ignoreMap":92},[97,117486,117487],{"class":99,"line":100},[97,117488,117489],{"class":191},"#更新相关的知识\n",[97,117491,117492],{"class":99,"line":195},[97,117493,117494],{"class":191},"# 更新软件包列表（从服务器获取最新软件信息）\n",[97,117496,117497,117499,117502],{"class":99,"line":241},[97,117498,24766],{"class":111},[97,117500,117501],{"class":118}," apt",[97,117503,26432],{"class":118},[97,117505,117506],{"class":99,"line":1387},[97,117507,117508],{"class":191},"# 升级所有可更新的软件包（不删除旧包）\n",[97,117510,117511,117513,117515],{"class":99,"line":1393},[97,117512,24766],{"class":111},[97,117514,117501],{"class":118},[97,117516,117517],{"class":118}," upgrade\n",[97,117519,117520],{"class":99,"line":1407},[97,117521,117522],{"class":191},"#更新和升级软件包\n",[97,117524,117525,117527,117529,117532,117534,117536,117538,117541],{"class":99,"line":1413},[97,117526,24766],{"class":111},[97,117528,117501],{"class":118},[97,117530,117531],{"class":118}," update",[97,117533,26380],{"class":103},[97,117535,24766],{"class":111},[97,117537,117501],{"class":118},[97,117539,117540],{"class":118}," upgrade",[97,117542,101165],{"class":370},[97,117544,117545],{"class":99,"line":1504},[97,117546,117547],{"class":191},"#列出可更新的软件包及版本信息\n",[97,117549,117550,117553,117556],{"class":99,"line":1510},[97,117551,117552],{"class":111},"apt",[97,117554,117555],{"class":118}," list",[97,117557,117558],{"class":370}," --upgradable\n",[97,117560,117561],{"class":99,"line":1522},[97,117562,117563],{"class":191},"#彻底升级（处理依赖关系，可能删除旧包）\n",[97,117565,117566,117568,117570],{"class":99,"line":1804},[97,117567,24766],{"class":111},[97,117569,117501],{"class":118},[97,117571,117572],{"class":118}," full-upgrade\n",[97,117574,117575],{"class":99,"line":1809},[97,117576,117577],{"class":191},"#设置指定版本\n",[97,117579,117580,117582,117584,117586,117588,117591,117593,117595,117597,117599,117602,117604],{"class":99,"line":1815},[97,117581,24766],{"class":111},[97,117583,117501],{"class":118},[97,117585,24023],{"class":118},[97,117587,29092],{"class":319},[97,117589,117590],{"class":118},"package_nam",[97,117592,395],{"class":103},[97,117594,1279],{"class":319},[97,117596,115],{"class":118},[97,117598,104],{"class":319},[97,117600,117601],{"class":118},"version_numbe",[97,117603,990],{"class":103},[97,117605,130],{"class":319},[97,117607,117608],{"class":99,"line":1820},[97,117609,117610],{"class":191},"#只安装软件包不升级\n",[97,117612,117613,117615,117617,117619,117621,117623,117625,117627],{"class":99,"line":1834},[97,117614,24766],{"class":111},[97,117616,117501],{"class":118},[97,117618,24023],{"class":118},[97,117620,29092],{"class":319},[97,117622,117590],{"class":118},[97,117624,395],{"class":103},[97,117626,1279],{"class":319},[97,117628,117629],{"class":370}," --no-upgrade\n",[97,117631,117632],{"class":99,"line":1839},[97,117633,117634],{"class":191},"#只升级，不存在就不安装\n",[97,117636,117637,117639,117641,117643,117645,117647,117649,117651],{"class":99,"line":1845},[97,117638,24766],{"class":111},[97,117640,117501],{"class":118},[97,117642,24023],{"class":118},[97,117644,29092],{"class":319},[97,117646,117590],{"class":118},[97,117648,395],{"class":103},[97,117650,1279],{"class":319},[97,117652,117653],{"class":370}," --only-upgrade\n",[97,117655,117656],{"class":99,"line":1866},[97,117657,2591],{"emptyLinePlaceholder":249},[97,117659,117660],{"class":99,"line":1871},[97,117661,117662],{"class":191},"#安装指定的软件命令\n",[97,117664,117665,117667,117669,117671,117673,117675,117677],{"class":99,"line":1885},[97,117666,24766],{"class":111},[97,117668,117501],{"class":118},[97,117670,24023],{"class":118},[97,117672,29092],{"class":319},[97,117674,117590],{"class":118},[97,117676,395],{"class":103},[97,117678,130],{"class":319},[97,117680,117681],{"class":99,"line":1890},[97,117682,2591],{"emptyLinePlaceholder":249},[97,117684,117685],{"class":99,"line":1919},[97,117686,117687],{"class":191},"#安装多个软件包\n",[97,117689,117690,117692,117694,117696,117698,117701,117704,117706,117708,117711,117713,117715],{"class":99,"line":1924},[97,117691,24766],{"class":111},[97,117693,117501],{"class":118},[97,117695,24023],{"class":118},[97,117697,29092],{"class":319},[97,117699,117700],{"class":118},"package_",[97,117702,117703],{"class":319},"1>",[97,117705,29092],{"class":319},[97,117707,117700],{"class":118},[97,117709,117710],{"class":319},"2>",[97,117712,29092],{"class":319},[97,117714,117700],{"class":118},[97,117716,117717],{"class":319},"3>\n",[97,117719,117720],{"class":99,"line":1941},[97,117721,2591],{"emptyLinePlaceholder":249},[97,117723,117724],{"class":99,"line":1946},[97,117725,117726],{"class":191},"#更新指定的软件命令\n",[97,117728,117729,117731,117733,117735,117737,117739,117741],{"class":99,"line":1951},[97,117730,24766],{"class":111},[97,117732,117501],{"class":118},[97,117734,117531],{"class":118},[97,117736,29092],{"class":319},[97,117738,117590],{"class":118},[97,117740,395],{"class":103},[97,117742,130],{"class":319},[97,117744,117745],{"class":99,"line":1956},[97,117746,2591],{"emptyLinePlaceholder":249},[97,117748,117749],{"class":99,"line":1970},[97,117750,117751],{"class":191},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[97,117753,117754,117756,117759,117761,117763,117765],{"class":99,"line":1975},[97,117755,117552],{"class":111},[97,117757,117758],{"class":118}," show",[97,117760,29092],{"class":319},[97,117762,117590],{"class":118},[97,117764,395],{"class":103},[97,117766,130],{"class":319},[97,117768,117769],{"class":99,"line":2768},[97,117770,2591],{"emptyLinePlaceholder":249},[97,117772,117773],{"class":99,"line":2782},[97,117774,117775],{"class":191},"#删除软件包命令\n",[97,117777,117778,117780,117782,117784,117786,117788,117790],{"class":99,"line":2790},[97,117779,24766],{"class":111},[97,117781,117501],{"class":118},[97,117783,26269],{"class":118},[97,117785,29092],{"class":319},[97,117787,117590],{"class":118},[97,117789,395],{"class":103},[97,117791,130],{"class":319},[97,117793,117794],{"class":99,"line":2795},[97,117795,2591],{"emptyLinePlaceholder":249},[97,117797,117798],{"class":99,"line":2801},[97,117799,117800],{"class":191},"# 清理旧版本和缓存（释放磁盘空间）\n",[97,117802,117803,117805,117807,117810],{"class":99,"line":2807},[97,117804,24766],{"class":111},[97,117806,117501],{"class":118},[97,117808,117809],{"class":118}," autoremove",[97,117811,117812],{"class":191},"  # 删除不再需要的依赖和库文件\n",[97,117814,117815,117817,117819,117822],{"class":99,"line":2812},[97,117816,24766],{"class":111},[97,117818,117501],{"class":118},[97,117820,117821],{"class":118}," clean",[97,117823,117824],{"class":191},"       # 清理下载的缓存包\n",[97,117826,117827],{"class":99,"line":8139},[97,117828,2591],{"emptyLinePlaceholder":249},[97,117830,117831],{"class":99,"line":8163},[97,117832,117833],{"class":191},"#移除软件包及配置文件\n",[97,117835,117836,117838,117840,117843,117845,117847,117849],{"class":99,"line":8168},[97,117837,24766],{"class":111},[97,117839,117501],{"class":118},[97,117841,117842],{"class":118}," purge",[97,117844,29092],{"class":319},[97,117846,117590],{"class":118},[97,117848,395],{"class":103},[97,117850,130],{"class":319},[97,117852,117853],{"class":99,"line":8174},[97,117854,2591],{"emptyLinePlaceholder":249},[97,117856,117857],{"class":99,"line":8201},[97,117858,117859],{"class":191},"#查找软件包命令\n",[97,117861,117862,117864,117866,117869,117871,117874,117876],{"class":99,"line":8206},[97,117863,24766],{"class":111},[97,117865,117501],{"class":118},[97,117867,117868],{"class":118}," search",[97,117870,29092],{"class":319},[97,117872,117873],{"class":118},"keywor",[97,117875,634],{"class":103},[97,117877,130],{"class":319},[97,117879,117880],{"class":99,"line":8212},[97,117881,2591],{"emptyLinePlaceholder":249},[97,117883,117884],{"class":99,"line":8224},[97,117885,117886],{"class":191},"#列出所有已安装的包\n",[97,117888,117889,117891,117893],{"class":99,"line":8236},[97,117890,117552],{"class":111},[97,117892,117555],{"class":118},[97,117894,117895],{"class":370}," --installed\n",[97,117897,117898],{"class":99,"line":8248},[97,117899,2591],{"emptyLinePlaceholder":249},[97,117901,117902],{"class":99,"line":9907},[97,117903,117904],{"class":191},"#列出所有已安装的包的版本信息\n",[97,117906,117907,117909,117911],{"class":99,"line":9932},[97,117908,117552],{"class":111},[97,117910,117555],{"class":118},[97,117912,117913],{"class":370}," --all-versions\n",[231,117915,117916],{},"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":92,"searchDepth":195,"depth":195,"links":117918},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117463,"description":246},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117925,"title":117926,"body":117927,"description":246,"extension":247,"meta":118668,"navigation":249,"path":118669,"seo":118670,"stem":118671,"__hash__":118672},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117928,"toc":118655},[117929,117932,117936,117939,117945,117949,117953,117959,117964,117969,117974,117979,117984,117987,117990,117993,117996,118000,118003,118008,118011,118016,118019,118024,118031,118034,118037,118040,118043,118046,118057,118061,118065,118070,118075,118079,118084,118088,118093,118097,118101,118106,118109,118154,118159,118163,118167,118172,118178,118183,118193,118198,118208,118213,118218,118245,118249,118252,118257,118260,118285,118289,118294,118297,118302,118307,118327,118332,118335,118350,118354,118407,118410,118415,118419,118422,118437,118440,118443,118448,118452,118456,118459,118463,118467,118470,118475,118480,118484,118491,118499,118502,118509,118514,118519,118522,118527,118534,118539,118546,118550,118552,118557,118561,118564,118567,118572,118575,118580,118583,118588,118593,118598,118602,118607,118611,118652],[10,117930,117926],{"id":117931},"_2-linux装机教程",[14,117933,117935],{"id":117934},"_21-实体机","2.1 实体机",[24,117937,117938],{},"使用清华源：（Ubuntu24.04）",[24,117940,117941],{},[558,117942,117943],{"href":117943,"rel":117944},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24054],[14,117946,117948],{"id":117947},"_22-普通虚拟机","2.2 普通虚拟机",[48,117950,117952],{"id":117951},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[24,117954,117955],{},[558,117956,117957],{"href":117957,"rel":117958},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24054],[24,117960,117961],{},[19,117962],{"alt":92,"src":117963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[24,117965,117966],{},[19,117967],{"alt":92,"src":117968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[24,117970,117971],{},[19,117972],{"alt":92,"src":117973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[24,117975,117976],{},[19,117977],{"alt":92,"src":117978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[24,117980,117981],{},[19,117982],{"alt":92,"src":117983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[24,117985,117986],{},"内存4G（4096MB）；",[24,117988,117989],{},"CPU给4个核；",[24,117991,117992],{},"硬盘动态分配60G；",[24,117994,117995],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[48,117997,117999],{"id":117998},"_222-安装ubuntu","2.2.2 安装Ubuntu",[24,118001,118002],{},"按照1.1的步骤下载Ubuntu",[24,118004,118005],{},[19,118006],{"alt":92,"src":118007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[24,118009,118010],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[24,118012,118013],{},[19,118014],{"alt":92,"src":118015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[24,118017,118018],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[24,118020,118021],{},[19,118022],{"alt":92,"src":118023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[24,118025,118026,118027,118030],{},"选择“正常安装”(找不到都用Alt+F7)， ",[469,118028,118029],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[24,118032,118033],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[24,118035,118036],{},"将改动写入磁盘吗 继续",[24,118038,118039],{},"选择东八区（shanghai，大致在地图上点一下），继续",[24,118041,118042],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[24,118044,118045],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[24,118047,118048,118049,118052,118053,118056],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[469,118050,118051],{},"除了"," 选不发送系统信息与不升级之外， ",[469,118054,118055],{},"其它"," 都跳过或前进）",[48,118058,118060],{"id":118059},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[160,118062,118064],{"id":118063},"_2231-全屏","2.2.3.1 全屏",[24,118066,118067],{},[19,118068],{"alt":92,"src":118069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[24,118071,118072],{},[19,118073],{"alt":92,"src":118074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[160,118076,118078],{"id":118077},"_2232-文件交换","2.2.3.2 文件交换",[24,118080,118081],{},[19,118082],{"alt":92,"src":118083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[160,118085,118087],{"id":118086},"_2233-新建文本文档","2.2.3.3 新建文本文档",[24,118089,118090],{},[19,118091],{"alt":92,"src":118092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118094,118096],{"id":118095},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[48,118098,118100],{"id":118099},"_231-简介与优缺点","2.3.1 简介与优缺点",[138,118102,118103],{},[70,118104,118105],{},"什么情况下推荐？",[24,118107,118108],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[138,118110,118111],{"start":195},[70,118112,118113,118114],{},"优缺点：",[138,118115,118116,118146],{},[70,118117,118118,118119],{},"优点：",[138,118120,118121,118124,118131,118134,118137,118140,118143],{},[70,118122,118123],{},"WSL2是最好的Linux发行版;(bushi)",[70,118125,118126,118127,118130],{},"性能损耗极低。且比在Windows上跑深度性能 ",[469,118128,118129],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[70,118132,118133],{},"非常方便调用USB设备，可以USB直通;",[70,118135,118136],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[70,118138,118139],{},"非常方便Win与WSL2互相传文件等协同操作;",[70,118141,118142],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[70,118144,118145],{},"非常方便使用Windows的VScode远程开发;",[70,118147,118148,118149],{},"缺点：",[138,118150,118151],{},[70,118152,118153],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[24,118155,118156],{},[19,118157],{"alt":92,"src":118158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[48,118160,118162],{"id":118161},"_232-安装教程","2.3.2 安装教程",[160,118164,118166],{"id":118165},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[138,118168,118169],{},[70,118170,118171],{},"方法一(图形界面)",[24,118173,118174,118175,24808],{},"用Win+R输入",[94,118176,118177],{},"appwiz.cpl",[24,118179,118180],{},[19,118181],{"alt":92,"src":118182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[24,118184,118185,118186,118189,118190,26663],{},"点击OK进入 ",[469,118187,118188],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[469,118191,118192],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[24,118194,118195],{},[19,118196],{"alt":92,"src":118197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[24,118199,118200,118201,101202,118204,118207],{},"选择 ",[469,118202,118203],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[469,118205,118206],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[24,118209,118210],{},[19,118211],{"alt":92,"src":118212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[138,118214,118215],{"start":195},[70,118216,118217],{},"方法二(命令行)",[87,118219,118223],{"className":118220,"code":118221,"language":118222,"meta":92,"style":92},"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",[94,118224,118225,118230,118235,118240],{"__ignoreMap":92},[97,118226,118227],{"class":99,"line":100},[97,118228,118229],{},"# 开启 Linux 子系统\n",[97,118231,118232],{"class":99,"line":195},[97,118233,118234],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[97,118236,118237],{"class":99,"line":241},[97,118238,118239],{},"# 开启虚拟机平台\n",[97,118241,118242],{"class":99,"line":1387},[97,118243,118244],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[160,118246,118248],{"id":118247},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[24,118250,118251],{},"用管理员权限打开powershell",[24,118253,118254],{},[19,118255],{"alt":92,"src":118256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[24,118258,118259],{},"升级WSL并设置默认版本为WSL2",[87,118261,118263],{"className":118220,"code":118262,"language":118222,"meta":92,"style":92},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[94,118264,118265,118270,118275,118280],{"__ignoreMap":92},[97,118266,118267],{"class":99,"line":100},[97,118268,118269],{},"# 更新 wsl\n",[97,118271,118272],{"class":99,"line":195},[97,118273,118274],{},"wsl --update\n",[97,118276,118277],{"class":99,"line":241},[97,118278,118279],{},"# 将 wsl 版本设置为 wsl2\n",[97,118281,118282],{"class":99,"line":1387},[97,118283,118284],{},"wsl --set-default-version 2\n",[160,118286,118288],{"id":118287},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[138,118290,118291],{},[70,118292,118293],{},"方式一(商店下载)",[24,118295,118296],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[24,118298,118299],{},[19,118300],{"alt":92,"src":118301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[138,118303,118304],{"start":195},[70,118305,118306],{},"方式二(命令行安装)",[87,118308,118310],{"className":118220,"code":118309,"language":118222,"meta":92,"style":92},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[94,118311,118312,118317,118322],{"__ignoreMap":92},[97,118313,118314],{"class":99,"line":100},[97,118315,118316],{},"# 列出可安装的 Linux 版本\n",[97,118318,118319],{"class":99,"line":195},[97,118320,118321],{},"#（需要科学手段）\n",[97,118323,118324],{"class":99,"line":241},[97,118325,118326],{},"wsl --list --online\n",[24,118328,118329],{},[19,118330],{"alt":92,"src":118331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[24,118333,118334],{},"选择对应发行版并安装",[87,118336,118338],{"className":118220,"code":118337,"language":118222,"meta":92,"style":92},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[94,118339,118340,118345],{"__ignoreMap":92},[97,118341,118342],{"class":99,"line":100},[97,118343,118344],{},"# Ubuntu安装完毕后需要重启系统\n",[97,118346,118347],{"class":99,"line":195},[97,118348,118349],{},"wsl --install -d Ubuntu-24.04\n",[160,118351,118353],{"id":118352},"_2324-查看系统状态","2.3.2.4 查看系统状态",[87,118355,118357],{"className":118220,"code":118356,"language":118222,"meta":92,"style":92},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[94,118358,118359,118364,118369,118374,118379,118383,118387,118392,118397,118402],{"__ignoreMap":92},[97,118360,118361],{"class":99,"line":100},[97,118362,118363],{},"# 查看 wsl\n",[97,118365,118366],{"class":99,"line":195},[97,118367,118368],{},"wsl -l\n",[97,118370,118371],{"class":99,"line":241},[97,118372,118373],{},"# 查看 wsl 运行版本或模式\n",[97,118375,118376],{"class":99,"line":1387},[97,118377,118378],{},"wsl -l -v\n",[97,118380,118381],{"class":99,"line":1393},[97,118382,2591],{"emptyLinePlaceholder":249},[97,118384,118385],{"class":99,"line":1407},[97,118386,2591],{"emptyLinePlaceholder":249},[97,118388,118389],{"class":99,"line":1413},[97,118390,118391],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[97,118393,118394],{"class":99,"line":1504},[97,118395,118396],{},"wsl --set-version \u003Cdistro> 2\n",[97,118398,118399],{"class":99,"line":1510},[97,118400,118401],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[97,118403,118404],{"class":99,"line":1522},[97,118405,118406],{},"wsl --unregister \u003Cdistro>\n",[24,118408,118409],{},"输出Version为2即正常",[24,118411,118412],{},[19,118413],{"alt":92,"src":118414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[160,118416,118418],{"id":118417},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[24,118420,118421],{},"直接在Powershell里输入wsl命令进入子系统",[87,118423,118425],{"className":118220,"code":118424,"language":118222,"meta":92,"style":92},"# 进入子系统\nwsl\n",[94,118426,118427,118432],{"__ignoreMap":92},[97,118428,118429],{"class":99,"line":100},[97,118430,118431],{},"# 进入子系统\n",[97,118433,118434],{"class":99,"line":195},[97,118435,118436],{},"wsl\n",[24,118438,118439],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[24,118441,118442],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[24,118444,118445],{},[19,118446],{"alt":92,"src":118447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[48,118449,118451],{"id":118450},"_233-配置各种环境","2.3.3 配置各种环境",[160,118453,118455],{"id":118454},"_2331-换源","2.3.3.1 换源",[24,118457,118458],{},"(同实体机LINUX，往下找教程)",[160,118460,118462],{"id":118461},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23099,118464,118466],{"id":118465},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[24,118468,118469],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[24,118471,118472],{},[19,118473],{"alt":92,"src":118474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[24,118476,118477],{},[19,118478],{"alt":92,"src":118479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23099,118481,118483],{"id":118482},"_23322-cuda","2.3.3.2.2 CUDA",[24,118485,118486,118487],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[558,118488,118489],{"href":118489,"rel":118490},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24054],[24,118492,118493,118496],{},[19,118494],{"alt":92,"src":118495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[19,118497],{"alt":92,"src":118498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[24,118500,118501],{},"在下方的网站，选择合适的版本。",[24,118503,118504,118505],{},"WSL2 专属 CUDA 指南：",[558,118506,118507],{"href":118507,"rel":118508},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24054],[24,118510,118511],{},[469,118512,118513],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[24,118515,118516],{},[19,118517],{"alt":92,"src":118518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[24,118520,118521],{},"挨行敲一遍",[24,118523,118524],{},[19,118525],{"alt":92,"src":118526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[24,118528,118529,118530,118533],{},"敲完后，输入",[94,118531,118532],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[24,118535,118536],{},[19,118537],{"alt":92,"src":118538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[24,118540,118541,118542,118545],{},"（请详看下方教程的",[469,118543,118544],{},"安装CUDA的配置环境来看","如何配置环境）",[23099,118547,118549],{"id":118548},"_23323-cudnn","2.3.3.2.3 cuDNN",[24,118551,118458],{},[24,118553,118554],{},[19,118555],{"alt":92,"src":118556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[160,118558,118560],{"id":118559},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[24,118562,118563],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[24,118565,118566],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[24,118568,118569],{},[19,118570],{"alt":92,"src":118571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[24,118573,118574],{},"连接WSL2",[24,118576,118577],{},[19,118578],{"alt":92,"src":118579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[24,118581,118582],{},"远程开发成功。",[24,118584,118585],{},[19,118586],{"alt":92,"src":118587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[24,118589,118590],{},[19,118591],{"alt":92,"src":118592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[24,118594,118595],{},[19,118596],{"alt":92,"src":118597},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[160,118599,118601],{"id":118600},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[24,118603,118604],{},[19,118605],{"alt":92,"src":118606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[160,118608,118610],{"id":118609},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[87,118612,118614],{"className":117480,"code":118613,"language":117482,"meta":92,"style":92},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[94,118615,118616,118624,118632,118643,118647],{"__ignoreMap":92},[97,118617,118618,118620,118622],{"class":99,"line":100},[97,118619,24766],{"class":111},[97,118621,117501],{"class":118},[97,118623,26432],{"class":118},[97,118625,118626,118628,118630],{"class":99,"line":195},[97,118627,24766],{"class":111},[97,118629,117501],{"class":118},[97,118631,117517],{"class":118},[97,118633,118634,118636,118638,118640],{"class":99,"line":241},[97,118635,24766],{"class":111},[97,118637,117501],{"class":118},[97,118639,24023],{"class":118},[97,118641,118642],{"class":118}," mesa-utils\n",[97,118644,118645],{"class":99,"line":1387},[97,118646,2591],{"emptyLinePlaceholder":249},[97,118648,118649],{"class":99,"line":1393},[97,118650,118651],{"class":191},"#然后重启wsl2即可\n",[231,118653,118654],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":92,"searchDepth":195,"depth":195,"links":118656},[118657,118658,118663],{"id":117934,"depth":195,"text":117935},{"id":117947,"depth":195,"text":117948,"children":118659},[118660,118661,118662],{"id":117951,"depth":241,"text":117952},{"id":117998,"depth":241,"text":117999},{"id":118059,"depth":241,"text":118060},{"id":118095,"depth":195,"text":118096,"children":118664},[118665,118666,118667],{"id":118099,"depth":241,"text":118100},{"id":118161,"depth":241,"text":118162},{"id":118450,"depth":241,"text":118451},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117926,"description":246},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118674,"title":118675,"body":118676,"description":246,"extension":247,"meta":121612,"navigation":249,"path":121613,"seo":121614,"stem":121615,"__hash__":121616},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118677,"toc":121584},[118678,118681,118685,118691,118695,118701,118705,118893,118896,118901,118905,118909,118912,118915,118921,118926,118929,118932,118937,118970,118975,118979,119056,119059,119064,119068,119071,119110,119113,119122,119140,119145,119152,119269,119274,119277,119304,119309,119313,119322,119372,119379,119383,119386,119400,119407,119441,119446,119450,119473,119476,119481,119485,119488,119491,119494,119536,119540,119543,119546,119587,119591,119595,119598,119603,119608,119611,119634,119637,119645,119650,119653,119658,119663,119666,119671,119675,119680,119703,119708,119770,119778,119783,119788,119791,119796,119799,119804,119809,119827,119832,119838,119843,119857,119861,119864,119867,119870,119913,119916,119921,120022,120025,120030,120034,120038,120075,120079,120083,120087,120133,120137,120182,120186,120193,120201,120256,120259,120336,120339,120362,120366,120369,120374,120379,120387,120390,120395,120400,120405,120408,120413,120422,120425,120430,120433,120504,120509,120512,120517,120520,120525,120528,120533,120536,120541,120546,120549,120624,120627,120640,120645,120648,120662,120665,120694,120699,120728,120731,120736,120740,120745,120754,120757,120762,120765,120770,120773,120776,120781,120784,120789,120794,120797,120802,120805,120930,120935,120965,120968,120973,120978,120995,120998,121041,121044,121071,121076,121089,121232,121236,121241,121255,121258,121309,121312,121342,121345,121361,121366,121380,121383,121450,121455,121464,121469,121472,121484,121489,121496,121520,121523,121528,121531,121550,121555,121562,121574,121581],[10,118679,118675],{"id":118680},"_3-安装必备配置",[14,118682,118684],{"id":118683},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[87,118686,118689],{"className":118687,"code":118688,"language":5378},[5376],"  打开下方网站（注意，该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",[94,118690,118688],{"__ignoreMap":92},[48,118692,118694],{"id":118693},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[87,118696,118699],{"className":118697,"code":118698,"language":5378},[5376],"  输入以下命令\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",[94,118700,118698],{"__ignoreMap":92},[48,118702,118704],{"id":118703},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[87,118706,118710],{"className":118707,"code":118708,"language":118709,"meta":92,"style":92},"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",[94,118711,118712,118720,118731,118743,118757,118761,118771,118776,118780,118784,118789,118793,118805,118809,118814,118818,118829,118833,118849,118853,118864,118868,118873,118877,118885],{"__ignoreMap":92},[97,118713,118714,118716,118718],{"class":99,"line":100},[97,118715,24766],{"class":111},[97,118717,117501],{"class":118},[97,118719,26432],{"class":118},[97,118721,118722,118724,118726,118728],{"class":99,"line":195},[97,118723,24766],{"class":111},[97,118725,117501],{"class":118},[97,118727,24023],{"class":118},[97,118729,118730],{"class":118}," vim\n",[97,118732,118733,118735,118738,118740],{"class":99,"line":241},[97,118734,24766],{"class":111},[97,118736,118737],{"class":118}," rm",[97,118739,25515],{"class":370},[97,118741,118742],{"class":118}," \u002Fetc\u002Fapt\u002Fsources.list\n",[97,118744,118745,118747,118749,118751,118754],{"class":99,"line":1387},[97,118746,24766],{"class":111},[97,118748,118737],{"class":118},[97,118750,25515],{"class":370},[97,118752,118753],{"class":118}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[97,118755,118756],{"class":370},"**\n",[97,118758,118759],{"class":99,"line":1393},[97,118760,2591],{"emptyLinePlaceholder":249},[97,118762,118763,118765,118768],{"class":99,"line":1407},[97,118764,24766],{"class":111},[97,118766,118767],{"class":118}," vim",[97,118769,118770],{"class":118}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[97,118772,118773],{"class":99,"line":1413},[97,118774,118775],{"class":118},"```\n",[97,118777,118778],{"class":99,"line":1504},[97,118779,2591],{"emptyLinePlaceholder":249},[97,118781,118782],{"class":99,"line":1510},[97,118783,2591],{"emptyLinePlaceholder":249},[97,118785,118786],{"class":99,"line":1522},[97,118787,118788],{"class":111},"选择好Ubuntu版本后，复制下方的内容。\n",[97,118790,118791],{"class":99,"line":1804},[97,118792,2591],{"emptyLinePlaceholder":249},[97,118794,118795,118797,118800,118803],{"class":99,"line":1809},[97,118796,546],{"class":319},[97,118798,118799],{"class":118},"[](",[97,118801,118802],{"class":111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[97,118804,329],{"class":118},[97,118806,118807],{"class":99,"line":1815},[97,118808,2591],{"emptyLinePlaceholder":249},[97,118810,118811],{"class":99,"line":1820},[97,118812,118813],{"class":111},"粘贴进去\n",[97,118815,118816],{"class":99,"line":1834},[97,118817,2591],{"emptyLinePlaceholder":249},[97,118819,118820,118822,118824,118827],{"class":99,"line":1839},[97,118821,546],{"class":319},[97,118823,118799],{"class":118},[97,118825,118826],{"class":111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[97,118828,329],{"class":118},[97,118830,118831],{"class":99,"line":1845},[97,118832,2591],{"emptyLinePlaceholder":249},[97,118834,118835,118838,118841,118844,118846],{"class":99,"line":1866},[97,118836,118837],{"class":111},"按一下ESC，然后英文冒号，输入",[97,118839,118840],{"class":118}," `",[97,118842,118843],{"class":111},":wq!",[97,118845,1291],{"class":118},[97,118847,118848],{"class":111},"然后回车\n",[97,118850,118851],{"class":99,"line":1871},[97,118852,2591],{"emptyLinePlaceholder":249},[97,118854,118855,118857,118859,118862],{"class":99,"line":1885},[97,118856,546],{"class":319},[97,118858,118799],{"class":118},[97,118860,118861],{"class":111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[97,118863,329],{"class":118},[97,118865,118866],{"class":99,"line":1890},[97,118867,2591],{"emptyLinePlaceholder":249},[97,118869,118870],{"class":99,"line":1919},[97,118871,118872],{"class":111},"输入以下命令\n",[97,118874,118875],{"class":99,"line":1924},[97,118876,2591],{"emptyLinePlaceholder":249},[97,118878,118879,118882],{"class":99,"line":1941},[97,118880,118881],{"class":118},"```",[97,118883,118884],{"class":111},"Bash\n",[97,118886,118887,118889,118891],{"class":99,"line":1946},[97,118888,24766],{"class":111},[97,118890,117501],{"class":118},[97,118892,26432],{"class":118},[24,118894,118895],{},"这里被替换成对应学校则成功",[24,118897,118898],{},[19,118899],{"alt":92,"src":118900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118902,118904],{"id":118903},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[48,118906,118908],{"id":118907},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[24,118910,118911],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[24,118913,118914],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[24,118916,118917],{},[558,118918,118919],{"href":118919,"rel":118920},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24054],[24,118922,118923],{},[19,118924],{"alt":92,"src":118925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[24,118927,118928],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[24,118930,118931],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[24,118933,118934],{},[19,118935],{"alt":92,"src":118936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[87,118938,118940],{"className":117480,"code":118939,"language":117482,"meta":92,"style":92},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[94,118941,118942,118947,118954,118959],{"__ignoreMap":92},[97,118943,118944],{"class":99,"line":100},[97,118945,118946],{"class":191},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[97,118948,118949,118951],{"class":99,"line":195},[97,118950,101460],{"class":370},[97,118952,118953],{"class":118}," ~\u002FDownloads\n",[97,118955,118956],{"class":99,"line":241},[97,118957,118958],{"class":191},"#下方chrome安装包名不一定是这个，根据名字来看\n",[97,118960,118961,118963,118965,118967],{"class":99,"line":1387},[97,118962,24766],{"class":111},[97,118964,117501],{"class":118},[97,118966,24023],{"class":118},[97,118968,118969],{"class":118}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[24,118971,118972],{},[19,118973],{"alt":92,"src":118974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[48,118976,118978],{"id":118977},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[87,118980,118982],{"className":117480,"code":118981,"language":117482,"meta":92,"style":92},"# 老版\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",[94,118983,118984,118989,118997,119008,119013,119017,119022,119032,119040,119051],{"__ignoreMap":92},[97,118985,118986],{"class":99,"line":100},[97,118987,118988],{"class":191},"# 老版\n",[97,118990,118991,118993,118995],{"class":99,"line":195},[97,118992,24766],{"class":111},[97,118994,117501],{"class":118},[97,118996,26432],{"class":118},[97,118998,118999,119001,119003,119005],{"class":99,"line":241},[97,119000,24766],{"class":111},[97,119002,117501],{"class":118},[97,119004,24023],{"class":118},[97,119006,119007],{"class":118}," neofetch\n",[97,119009,119010],{"class":99,"line":1387},[97,119011,119012],{"class":111},"neofetch\n",[97,119014,119015],{"class":99,"line":1393},[97,119016,2591],{"emptyLinePlaceholder":249},[97,119018,119019],{"class":99,"line":1407},[97,119020,119021],{"class":191},"# 新版\n",[97,119023,119024,119026,119029],{"class":99,"line":1413},[97,119025,24766],{"class":111},[97,119027,119028],{"class":118}," add-apt-repository",[97,119030,119031],{"class":118}," ppa:zhangsongcui3371\u002Ffastfetch\n",[97,119033,119034,119036,119038],{"class":99,"line":1504},[97,119035,24766],{"class":111},[97,119037,117501],{"class":118},[97,119039,26432],{"class":118},[97,119041,119042,119044,119046,119048],{"class":99,"line":1510},[97,119043,24766],{"class":111},[97,119045,117501],{"class":118},[97,119047,24023],{"class":118},[97,119049,119050],{"class":118}," fastfetch\n",[97,119052,119053],{"class":99,"line":1522},[97,119054,119055],{"class":111},"fastfetch\n",[24,119057,119058],{},"这里显示，一共有3162个debian的程序，7个snap程序",[24,119060,119061],{},[19,119062],{"alt":92,"src":119063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[48,119065,119067],{"id":119066},"_323-移除snap应用","3.2.3 移除snap应用",[24,119069,119070],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[87,119072,119074],{"className":117480,"code":119073,"language":117482,"meta":92,"style":92},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[94,119075,119076,119088,119099],{"__ignoreMap":92},[97,119077,119078,119080,119082,119085],{"class":99,"line":100},[97,119079,24766],{"class":111},[97,119081,26703],{"class":118},[97,119083,119084],{"class":118}," disable",[97,119086,119087],{"class":118}," snapd.service\n",[97,119089,119090,119092,119094,119096],{"class":99,"line":195},[97,119091,24766],{"class":111},[97,119093,26703],{"class":118},[97,119095,119084],{"class":118},[97,119097,119098],{"class":118}," snapd.socket\n",[97,119100,119101,119103,119105,119107],{"class":99,"line":241},[97,119102,24766],{"class":111},[97,119104,26703],{"class":118},[97,119106,119084],{"class":118},[97,119108,119109],{"class":118}," snapd.seeded.service\n",[24,119111,119112],{},"然后查看snap应用列表",[24,119114,119115,119116,119121],{},"根据你安装的选择不同（最小安装或普通安装），有",[558,119117,119120],{"href":119118,"rel":119119},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24054],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[87,119123,119125],{"className":117480,"code":119124,"language":117482,"meta":92,"style":92},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[94,119126,119127,119132],{"__ignoreMap":92},[97,119128,119129],{"class":99,"line":100},[97,119130,119131],{"class":191},"# 查询当前系统上snap安装了哪些app\n",[97,119133,119134,119137],{"class":99,"line":195},[97,119135,119136],{"class":111},"snap",[97,119138,119139],{"class":118}," list\n",[24,119141,119142],{},[19,119143],{"alt":92,"src":119144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[24,119146,119147,119148,119151],{},"卸载掉图中所有应用，按照 ",[469,119149,119150],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[87,119153,119155],{"className":117480,"code":119154,"language":117482,"meta":92,"style":92},"#移除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",[94,119156,119157,119162,119174,119179,119190,119195,119206,119211,119222,119227,119231,119236,119247,119258],{"__ignoreMap":92},[97,119158,119159],{"class":99,"line":100},[97,119160,119161],{"class":191},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[97,119163,119164,119166,119169,119171],{"class":99,"line":195},[97,119165,24766],{"class":111},[97,119167,119168],{"class":118}," snap",[97,119170,26269],{"class":118},[97,119172,119173],{"class":118}," snap-store\n",[97,119175,119176],{"class":99,"line":241},[97,119177,119178],{"class":191},"#移除firefox浏览器\n",[97,119180,119181,119183,119185,119187],{"class":99,"line":1387},[97,119182,24766],{"class":111},[97,119184,119168],{"class":118},[97,119186,26269],{"class":118},[97,119188,119189],{"class":118}," firefox\n",[97,119191,119192],{"class":99,"line":1393},[97,119193,119194],{"class":191},"#移除gnome-42-2204\n",[97,119196,119197,119199,119201,119203],{"class":99,"line":1407},[97,119198,24766],{"class":111},[97,119200,119168],{"class":118},[97,119202,26269],{"class":118},[97,119204,119205],{"class":118}," gnome-42-2204\n",[97,119207,119208],{"class":99,"line":1413},[97,119209,119210],{"class":191},"#移除gtk-common-themes\n",[97,119212,119213,119215,119217,119219],{"class":99,"line":1504},[97,119214,24766],{"class":111},[97,119216,119168],{"class":118},[97,119218,26269],{"class":118},[97,119220,119221],{"class":118}," gtk-common-themes\n",[97,119223,119224],{"class":99,"line":1510},[97,119225,119226],{"class":191},"#移除其它...\n",[97,119228,119229],{"class":99,"line":1522},[97,119230,2865],{"class":103},[97,119232,119233],{"class":99,"line":1804},[97,119234,119235],{"class":191},"#移除core22,bare以及snapd\n",[97,119237,119238,119240,119242,119244],{"class":99,"line":1809},[97,119239,24766],{"class":111},[97,119241,119168],{"class":118},[97,119243,26269],{"class":118},[97,119245,119246],{"class":118}," core22\n",[97,119248,119249,119251,119253,119255],{"class":99,"line":1815},[97,119250,24766],{"class":111},[97,119252,119168],{"class":118},[97,119254,26269],{"class":118},[97,119256,119257],{"class":118}," bare\n",[97,119259,119260,119262,119264,119266],{"class":99,"line":1820},[97,119261,24766],{"class":111},[97,119263,119168],{"class":118},[97,119265,26269],{"class":118},[97,119267,119268],{"class":118}," snapd\n",[24,119270,119271],{},[19,119272],{"alt":92,"src":119273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[24,119275,119276],{},"输入以下命令查看是否还有snap包",[87,119278,119280],{"className":117480,"code":119279,"language":117482,"meta":92,"style":92},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[94,119281,119282,119288,119292,119296,119300],{"__ignoreMap":92},[97,119283,119284,119286],{"class":99,"line":100},[97,119285,119136],{"class":111},[97,119287,119139],{"class":118},[97,119289,119290],{"class":99,"line":195},[97,119291,118988],{"class":191},[97,119293,119294],{"class":99,"line":241},[97,119295,119012],{"class":111},[97,119297,119298],{"class":99,"line":1387},[97,119299,119021],{"class":191},[97,119301,119302],{"class":99,"line":1393},[97,119303,119055],{"class":111},[24,119305,119306],{},[19,119307],{"alt":92,"src":119308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[48,119310,119312],{"id":119311},"_324-移除snap","3.2.4 移除snap",[24,119314,119315,119316,119321],{},"在删除掉",[558,119317,119320],{"href":119318,"rel":119319},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24054],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[87,119323,119325],{"className":117480,"code":119324,"language":117482,"meta":92,"style":92}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[94,119326,119327,119332,119345,119350,119361],{"__ignoreMap":92},[97,119328,119329],{"class":99,"line":100},[97,119330,119331],{"class":191}," #使用apt移除掉snap\n",[97,119333,119334,119336,119338,119340,119343],{"class":99,"line":195},[97,119335,24766],{"class":111},[97,119337,117501],{"class":118},[97,119339,117809],{"class":118},[97,119341,119342],{"class":370}," --purge",[97,119344,119268],{"class":118},[97,119346,119347],{"class":99,"line":241},[97,119348,119349],{"class":191},"#移除snapd的一些目录\n",[97,119351,119352,119354,119356,119358],{"class":99,"line":1387},[97,119353,24766],{"class":111},[97,119355,118737],{"class":118},[97,119357,25515],{"class":370},[97,119359,119360],{"class":118}," \u002Fvar\u002Fcache\u002Fsnapd\n",[97,119362,119363,119365,119367,119369],{"class":99,"line":1393},[97,119364,24766],{"class":111},[97,119366,118737],{"class":118},[97,119368,25515],{"class":370},[97,119370,119371],{"class":118}," ~\u002Fsnap\n",[24,119373,119374,119375,119378],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[94,119376,119377],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[48,119380,119382],{"id":119381},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[24,119384,119385],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[87,119387,119389],{"className":117480,"code":119388,"language":117482,"meta":92,"style":92},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[94,119390,119391],{"__ignoreMap":92},[97,119392,119393,119395,119397],{"class":99,"line":100},[97,119394,24766],{"class":111},[97,119396,118767],{"class":118},[97,119398,119399],{"class":118}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[24,119401,119402,119403,119406],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[94,119404,119405],{},":wq"," 回车",[87,119408,119410],{"className":117480,"code":119409,"language":117482,"meta":92,"style":92},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[94,119411,119412,119419,119433],{"__ignoreMap":92},[97,119413,119414,119417],{"class":99,"line":100},[97,119415,119416],{"class":111},"Package:",[97,119418,119268],{"class":118},[97,119420,119421,119424,119427,119430],{"class":99,"line":195},[97,119422,119423],{"class":111},"Pin:",[97,119425,119426],{"class":118}," release",[97,119428,119429],{"class":118}," a=",[97,119431,119432],{"class":370},"*\n",[97,119434,119435,119438],{"class":99,"line":241},[97,119436,119437],{"class":111},"Pin-Priority:",[97,119439,119440],{"class":370}," -10\n",[24,119442,119443],{},[19,119444],{"alt":92,"src":119445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[48,119447,119449],{"id":119448},"_326-测试是否成功","3.2.6 测试是否成功",[87,119451,119453],{"className":117480,"code":119452,"language":117482,"meta":92,"style":92},"sudo apt update\nsudo apt install firefox\n",[94,119454,119455,119463],{"__ignoreMap":92},[97,119456,119457,119459,119461],{"class":99,"line":100},[97,119458,24766],{"class":111},[97,119460,117501],{"class":118},[97,119462,26432],{"class":118},[97,119464,119465,119467,119469,119471],{"class":99,"line":195},[97,119466,24766],{"class":111},[97,119468,117501],{"class":118},[97,119470,24023],{"class":118},[97,119472,119189],{"class":118},[24,119474,119475],{},"这里提示snapd无法被安装，就证明成功了",[24,119477,119478],{},[19,119479],{"alt":92,"src":119480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[48,119482,119484],{"id":119483},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[24,119486,119487],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[24,119489,119490],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[24,119492,119493],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[87,119495,119497],{"className":117480,"code":119496,"language":117482,"meta":92,"style":92},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[94,119498,119499,119504,119513,119518,119526],{"__ignoreMap":92},[97,119500,119501],{"class":99,"line":100},[97,119502,119503],{"class":191},"# 添加Mozilla提供的源\n",[97,119505,119506,119508,119510],{"class":99,"line":195},[97,119507,24766],{"class":111},[97,119509,119028],{"class":118},[97,119511,119512],{"class":118}," ppa:mozillateam\u002Fppa\n",[97,119514,119515],{"class":99,"line":241},[97,119516,119517],{"class":191},"# 安装Firefox\n",[97,119519,119520,119522,119524],{"class":99,"line":1387},[97,119521,24766],{"class":111},[97,119523,117501],{"class":118},[97,119525,26432],{"class":118},[97,119527,119528,119530,119532,119534],{"class":99,"line":1393},[97,119529,24766],{"class":111},[97,119531,117501],{"class":118},[97,119533,24023],{"class":118},[97,119535,119189],{"class":118},[48,119537,119539],{"id":119538},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[24,119541,119542],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[24,119544,119545],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[87,119547,119549],{"className":117480,"code":119548,"language":117482,"meta":92,"style":92},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[94,119550,119551,119556,119566,119574,119578],{"__ignoreMap":92},[97,119552,119553],{"class":99,"line":100},[97,119554,119555],{"class":191},"#删掉禁止安装snap的配置文件\n",[97,119557,119558,119560,119562,119564],{"class":99,"line":195},[97,119559,24766],{"class":111},[97,119561,118737],{"class":118},[97,119563,25515],{"class":370},[97,119565,119399],{"class":118},[97,119567,119568,119570,119572],{"class":99,"line":241},[97,119569,24766],{"class":111},[97,119571,117501],{"class":118},[97,119573,26432],{"class":118},[97,119575,119576],{"class":99,"line":1387},[97,119577,2591],{"emptyLinePlaceholder":249},[97,119579,119580,119582,119584],{"class":99,"line":1393},[97,119581,24766],{"class":111},[97,119583,117501],{"class":118},[97,119585,119586],{"class":118}," dist-update\n",[14,119588,119590],{"id":119589},"_33-中文输入法","3.3 中文输入法",[48,119592,119594],{"id":119593},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[24,119596,119597],{},"官网下载搜狗输入法",[24,119599,119600],{},[19,119601],{"alt":92,"src":119602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[24,119604,119605],{},[19,119606],{"alt":92,"src":119607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[24,119609,119610],{},"打开终端输入如下",[87,119612,119614],{"className":117480,"code":119613,"language":117482,"meta":92,"style":92},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[94,119615,119616,119623],{"__ignoreMap":92},[97,119617,119618,119620],{"class":99,"line":100},[97,119619,101460],{"class":370},[97,119621,119622],{"class":118}," ~\u002FDownloads\u002F\n",[97,119624,119625,119627,119629,119631],{"class":99,"line":195},[97,119626,24766],{"class":111},[97,119628,117501],{"class":118},[97,119630,24023],{"class":118},[97,119632,119633],{"class":118}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[24,119635,119636],{},"打开Fcitx",[24,119638,119639,119642],{},[19,119640],{"alt":92,"src":119641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[19,119643],{"alt":92,"src":119644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[24,119646,119647],{},[19,119648],{"alt":92,"src":119649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[24,119651,119652],{},"添加搜狗输入法",[24,119654,119655],{},[19,119656],{"alt":92,"src":119657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[24,119659,119660],{},[19,119661],{"alt":92,"src":119662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[24,119664,119665],{},"将搜狗输入法设置为唯一输入法",[24,119667,119668],{},[19,119669],{"alt":92,"src":119670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[48,119672,119674],{"id":119673},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[138,119676,119677],{},[70,119678,119679],{},"卸载旧输入法",[87,119681,119683],{"className":118707,"code":119682,"language":118709,"meta":92,"style":92},"sudo apt purge fcitx* ibus*\n",[94,119684,119685],{"__ignoreMap":92},[97,119686,119687,119689,119691,119693,119696,119698,119701],{"class":99,"line":100},[97,119688,24766],{"class":111},[97,119690,117501],{"class":118},[97,119692,117842],{"class":118},[97,119694,119695],{"class":118}," fcitx",[97,119697,775],{"class":370},[97,119699,119700],{"class":118}," ibus",[97,119702,119432],{"class":370},[138,119704,119705],{"start":195},[70,119706,119707],{},"安装Fcitx5",[87,119709,119711],{"className":117480,"code":119710,"language":117482,"meta":92,"style":92},"# 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",[94,119712,119713,119718,119732,119736,119741,119750,119758],{"__ignoreMap":92},[97,119714,119715],{"class":99,"line":100},[97,119716,119717],{"class":191},"# Ubuntu22.04及以上、Debian12及以上\n",[97,119719,119720,119722,119724,119726,119729],{"class":99,"line":195},[97,119721,24766],{"class":111},[97,119723,117501],{"class":118},[97,119725,24023],{"class":118},[97,119727,119728],{"class":118}," fcitx5",[97,119730,119731],{"class":118}," fcitx5-chinese-addons\n",[97,119733,119734],{"class":99,"line":241},[97,119735,2591],{"emptyLinePlaceholder":249},[97,119737,119738],{"class":99,"line":1387},[97,119739,119740],{"class":191},"# Ubuntu20.04\n",[97,119742,119743,119745,119747],{"class":99,"line":1393},[97,119744,24766],{"class":111},[97,119746,119028],{"class":118},[97,119748,119749],{"class":118}," ppa:zhsj\u002Ffcitx5\n",[97,119751,119752,119754,119756],{"class":99,"line":1407},[97,119753,24766],{"class":111},[97,119755,117501],{"class":118},[97,119757,26432],{"class":118},[97,119759,119760,119762,119764,119766,119768],{"class":99,"line":1413},[97,119761,24766],{"class":111},[97,119763,117501],{"class":118},[97,119765,24023],{"class":118},[97,119767,119728],{"class":118},[97,119769,119731],{"class":118},[138,119771,119772,119775],{"start":241},[70,119773,119774],{},"Reboot System",[70,119776,119777],{},"启动Fcitx5",[24,119779,119780],{},[19,119781],{"alt":92,"src":119782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[138,119784,119785],{"start":1393},[70,119786,119787],{},"修改一些设置",[24,119789,119790],{},"将Pinyin和Keyboard - English US加入到左边。",[24,119792,119793],{},[19,119794],{"alt":92,"src":119795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[24,119797,119798],{},"添加快捷键以便于更好切换中英文",[24,119800,119801],{},[19,119802],{"alt":92,"src":119803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[138,119805,119806],{"start":1407},[70,119807,119808],{},"重启",[87,119810,119812],{"className":118707,"code":119811,"language":118709,"meta":92,"style":92},"sudo shutdown -r now\n",[94,119813,119814],{"__ignoreMap":92},[97,119815,119816,119818,119821,119824],{"class":99,"line":100},[97,119817,24766],{"class":111},[97,119819,119820],{"class":118}," shutdown",[97,119822,119823],{"class":370}," -r",[97,119825,119826],{"class":118}," now\n",[138,119828,119829],{"start":1413},[70,119830,119831],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[24,119833,119834],{},[558,119835,119836],{"href":119836,"rel":119837},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24054],[138,119839,119840],{"start":1504},[70,119841,119842],{},"再重启",[87,119844,119845],{"className":118707,"code":119811,"language":118709,"meta":92,"style":92},[94,119846,119847],{"__ignoreMap":92},[97,119848,119849,119851,119853,119855],{"class":99,"line":100},[97,119850,24766],{"class":111},[97,119852,119820],{"class":118},[97,119854,119823],{"class":370},[97,119856,119826],{"class":118},[14,119858,119860],{"id":119859},"_34-pip3源替换","3.4 pip3源替换",[24,119862,119863],{},"非Debian系发行版需要做。",[24,119865,119866],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[24,119868,119869],{},"使用dnf的系统也可能不用做。",[87,119871,119873],{"className":117480,"code":119872,"language":117482,"meta":92,"style":92},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[94,119874,119875,119880,119887,119892,119897],{"__ignoreMap":92},[97,119876,119877],{"class":99,"line":100},[97,119878,119879],{"class":191},"# 检查是否已安装 pip\n",[97,119881,119882,119885],{"class":99,"line":195},[97,119883,119884],{"class":111},"pip3",[97,119886,26483],{"class":370},[97,119888,119889],{"class":99,"line":241},[97,119890,119891],{"class":191},"# 如果未安装，先安装 pip3（见下方）\n",[97,119893,119894],{"class":99,"line":1387},[97,119895,119896],{"class":191},"# 配置 pip 使用清华源\n",[97,119898,119899,119901,119904,119907,119910],{"class":99,"line":1393},[97,119900,119884],{"class":111},[97,119902,119903],{"class":118}," config",[97,119905,119906],{"class":118}," set",[97,119908,119909],{"class":118}," global.index-url",[97,119911,119912],{"class":118}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[24,119914,119915],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[24,119917,119918],{},[19,119919],{"alt":92,"src":119920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[87,119922,119924],{"className":117480,"code":119923,"language":117482,"meta":92,"style":92},"#安装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",[94,119925,119926,119931,119939,119950,119954,119959,119978,119982,119987,119999,120003,120008],{"__ignoreMap":92},[97,119927,119928],{"class":99,"line":100},[97,119929,119930],{"class":191},"#安装pip3\n",[97,119932,119933,119935,119937],{"class":99,"line":195},[97,119934,24766],{"class":111},[97,119936,117501],{"class":118},[97,119938,26432],{"class":118},[97,119940,119941,119943,119945,119947],{"class":99,"line":241},[97,119942,24766],{"class":111},[97,119944,26266],{"class":118},[97,119946,24023],{"class":118},[97,119948,119949],{"class":118}," python3-pip\n",[97,119951,119952],{"class":99,"line":1387},[97,119953,2591],{"emptyLinePlaceholder":249},[97,119955,119956],{"class":99,"line":1393},[97,119957,119958],{"class":191},"#更新pip3\n",[97,119960,119961,119963,119965,119967,119969,119971,119974,119976],{"class":99,"line":1407},[97,119962,101063],{"class":111},[97,119964,101066],{"class":370},[97,119966,101089],{"class":118},[97,119968,24023],{"class":118},[97,119970,26620],{"class":370},[97,119972,119973],{"class":118}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[97,119975,101094],{"class":370},[97,119977,101097],{"class":118},[97,119979,119980],{"class":99,"line":1413},[97,119981,2591],{"emptyLinePlaceholder":249},[97,119983,119984],{"class":99,"line":1504},[97,119985,119986],{"class":191},"#设置pip源为清华源\n",[97,119988,119989,119991,119993,119995,119997],{"class":99,"line":1510},[97,119990,119884],{"class":111},[97,119992,119903],{"class":118},[97,119994,119906],{"class":118},[97,119996,119909],{"class":118},[97,119998,119912],{"class":118},[97,120000,120001],{"class":99,"line":1522},[97,120002,2591],{"emptyLinePlaceholder":249},[97,120004,120005],{"class":99,"line":1804},[97,120006,120007],{"class":191},"#测试\n",[97,120009,120010,120012,120014,120016,120018,120020],{"class":99,"line":1809},[97,120011,101063],{"class":111},[97,120013,101066],{"class":370},[97,120015,101089],{"class":118},[97,120017,24023],{"class":118},[97,120019,101094],{"class":370},[97,120021,101097],{"class":118},[24,120023,120024],{},"成功的话，会看到Looking后面是tsinghua字样。",[24,120026,120027],{},[19,120028],{"alt":92,"src":120029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120031,120033],{"id":120032},"_35-显卡驱动安装","3.5 显卡驱动安装",[48,120035,120037],{"id":120036},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[87,120039,120041],{"className":118707,"code":120040,"language":118709,"meta":92,"style":92},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[94,120042,120043,120048,120063,120068],{"__ignoreMap":92},[97,120044,120045],{"class":99,"line":100},[97,120046,120047],{"class":191},"# 如果是使用apt安装的驱动\n",[97,120049,120050,120052,120054,120056,120058,120061],{"class":99,"line":195},[97,120051,24766],{"class":111},[97,120053,26266],{"class":118},[97,120055,26269],{"class":118},[97,120057,119342],{"class":370},[97,120059,120060],{"class":118}," nvidia",[97,120062,119432],{"class":370},[97,120064,120065],{"class":99,"line":241},[97,120066,120067],{"class":191},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[97,120069,120070,120072],{"class":99,"line":1387},[97,120071,24766],{"class":111},[97,120073,120074],{"class":118}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[48,120076,120078],{"id":120077},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[160,120080,120082],{"id":120081},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23099,120084,120086],{"id":120085},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[87,120088,120090],{"className":118707,"code":120089,"language":118709,"meta":92,"style":92},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[94,120091,120092,120097,120108,120113,120123,120128],{"__ignoreMap":92},[97,120093,120094],{"class":99,"line":100},[97,120095,120096],{"class":191},"# 安装英伟达驱动\n",[97,120098,120099,120101,120103,120105],{"class":99,"line":195},[97,120100,24766],{"class":111},[97,120102,117501],{"class":118},[97,120104,24023],{"class":118},[97,120106,120107],{"class":118}," nvidia-driver-版本号\n",[97,120109,120110],{"class":99,"line":241},[97,120111,120112],{"class":191},"# 重启 \n",[97,120114,120115,120117,120119,120121],{"class":99,"line":1387},[97,120116,24766],{"class":111},[97,120118,119820],{"class":118},[97,120120,119823],{"class":370},[97,120122,119826],{"class":118},[97,120124,120125],{"class":99,"line":1393},[97,120126,120127],{"class":191},"# 检查驱动是否安装成功\n",[97,120129,120130],{"class":99,"line":1407},[97,120131,120132],{"class":111},"nvidia-smi\n",[23099,120134,120136],{"id":120135},"_35212-debian","3.5.2.1.2 Debian",[87,120138,120140],{"className":118707,"code":120139,"language":118709,"meta":92,"style":92},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[94,120141,120142,120146,120160,120164,120174,120178],{"__ignoreMap":92},[97,120143,120144],{"class":99,"line":100},[97,120145,120096],{"class":191},[97,120147,120148,120150,120152,120154,120157],{"class":99,"line":195},[97,120149,24766],{"class":111},[97,120151,117501],{"class":118},[97,120153,24023],{"class":118},[97,120155,120156],{"class":118}," nvidia-driver",[97,120158,120159],{"class":118}," nvidia-settings\n",[97,120161,120162],{"class":99,"line":241},[97,120163,120112],{"class":191},[97,120165,120166,120168,120170,120172],{"class":99,"line":1387},[97,120167,24766],{"class":111},[97,120169,119820],{"class":118},[97,120171,119823],{"class":370},[97,120173,119826],{"class":118},[97,120175,120176],{"class":99,"line":1393},[97,120177,120127],{"class":191},[97,120179,120180],{"class":99,"line":1407},[97,120181,120132],{"class":111},[160,120183,120185],{"id":120184},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[24,120187,120188,120189,120192],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[469,120190,120191],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[24,120194,120195,120196],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23742,120197,120198],{},[469,120199,120200],{},"（也可以不禁用桌面环境，直接进行下一步。）",[87,120202,120204],{"className":118707,"code":120203,"language":118709,"meta":92,"style":92},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[94,120205,120206,120211,120221,120226,120239,120244],{"__ignoreMap":92},[97,120207,120208],{"class":99,"line":100},[97,120209,120210],{"class":191},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[97,120212,120213,120215,120218],{"class":99,"line":195},[97,120214,24766],{"class":111},[97,120216,120217],{"class":118}," telinit",[97,120219,120220],{"class":370}," 3\n",[97,120222,120223],{"class":99,"line":241},[97,120224,120225],{"class":191},"# ubuntu 使用下方命令\n",[97,120227,120228,120230,120233,120236],{"class":99,"line":1387},[97,120229,24766],{"class":111},[97,120231,120232],{"class":118}," service",[97,120234,120235],{"class":118}," lightdm",[97,120237,120238],{"class":118}," stop\n",[97,120240,120241],{"class":99,"line":1393},[97,120242,120243],{"class":191},"# Fedora 使用下方命令\n",[97,120245,120246,120248,120250,120253],{"class":99,"line":1407},[97,120247,24766],{"class":111},[97,120249,26703],{"class":118},[97,120251,120252],{"class":118}," isolate",[97,120254,120255],{"class":118}," multi-user.target\n",[24,120257,120258],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[87,120260,120262],{"className":118707,"code":120261,"language":118709,"meta":92,"style":92},"# 编译环境+准备工作\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",[94,120263,120264,120269,120280,120285,120292,120297,120309,120314,120321,120326],{"__ignoreMap":92},[97,120265,120266],{"class":99,"line":100},[97,120267,120268],{"class":191},"# 编译环境+准备工作\n",[97,120270,120271,120273,120275,120277],{"class":99,"line":195},[97,120272,24766],{"class":111},[97,120274,117501],{"class":118},[97,120276,24023],{"class":118},[97,120278,120279],{"class":118}," build-essential\n",[97,120281,120282],{"class":99,"line":241},[97,120283,120284],{"class":191},"# 进入到.run目录中\n",[97,120286,120287,120289],{"class":99,"line":1387},[97,120288,101460],{"class":370},[97,120290,120291],{"class":118}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[97,120293,120294],{"class":99,"line":1393},[97,120295,120296],{"class":191},"# 给驱动文件增加可执行权限：\n",[97,120298,120299,120301,120303,120306],{"class":99,"line":1407},[97,120300,24766],{"class":111},[97,120302,24769],{"class":118},[97,120304,120305],{"class":118}," a+x",[97,120307,120308],{"class":118}," NVIDIA-Linux-x86_64-550.107.02.run\n",[97,120310,120311],{"class":99,"line":1413},[97,120312,120313],{"class":191},"# 然后执行安装：\n",[97,120315,120316,120318],{"class":99,"line":1504},[97,120317,24766],{"class":111},[97,120319,120320],{"class":118}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[97,120322,120323],{"class":99,"line":1510},[97,120324,120325],{"class":191},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[97,120327,120328,120330,120333],{"class":99,"line":1522},[97,120329,24766],{"class":111},[97,120331,120332],{"class":118}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[97,120334,120335],{"class":370},"  --no-opengl-files\n",[24,120337,120338],{},"安装完毕重启即可",[87,120340,120342],{"className":118707,"code":120341,"language":118709,"meta":92,"style":92},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[94,120343,120344,120348,120354,120358],{"__ignoreMap":92},[97,120345,120346],{"class":99,"line":100},[97,120347,120112],{"class":191},[97,120349,120350,120352],{"class":99,"line":195},[97,120351,24766],{"class":111},[97,120353,26837],{"class":118},[97,120355,120356],{"class":99,"line":241},[97,120357,120127],{"class":191},[97,120359,120360],{"class":99,"line":1387},[97,120361,120132],{"class":111},[48,120363,120365],{"id":120364},"_353-安装cuda","3.5.3 安装CUDA",[24,120367,120368],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[24,120370,120371],{},[19,120372],{"alt":92,"src":120373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[138,120375,120376],{},[70,120377,120378],{},"先查看显卡驱动所支持的最高CUDA版本",[87,120380,120381],{"className":118707,"code":120132,"language":118709,"meta":92,"style":92},[94,120382,120383],{"__ignoreMap":92},[97,120384,120385],{"class":99,"line":100},[97,120386,120132],{"class":111},[24,120388,120389],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[24,120391,120392],{},[19,120393],{"alt":92,"src":120394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[138,120396,120397],{"start":195},[70,120398,120399],{},"下载CUDA并安装CUDA",[24,120401,118486,120402],{},[558,120403,118489],{"href":118489,"rel":120404},[24054],[24,120406,120407],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[24,120409,120410],{},[19,120411],{"alt":92,"src":120412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[24,120414,120415,120416,120421],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[558,120417,120420],{"href":120418,"rel":120419},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24054],"Vinci机器人队单片机教程","）",[24,120423,120424],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[24,120426,120427],{},[19,120428],{"alt":92,"src":120429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[24,120431,120432],{},"将最下方框框里的命令敲入终端",[87,120434,120436],{"className":118707,"code":120435,"language":118709,"meta":92,"style":92},"# 在当前文件夹下创建一个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",[94,120437,120438,120443,120452,120457,120464,120469,120477,120482,120493,120498],{"__ignoreMap":92},[97,120439,120440],{"class":99,"line":100},[97,120441,120442],{"class":191},"# 在当前文件夹下创建一个ttt的子文件夹\n",[97,120444,120445,120447,120449],{"class":99,"line":195},[97,120446,101450],{"class":111},[97,120448,29406],{"class":370},[97,120450,120451],{"class":118}," .\u002Fttt\n",[97,120453,120454],{"class":99,"line":241},[97,120455,120456],{"class":191},"# 进入ttt文件夹\n",[97,120458,120459,120461],{"class":99,"line":1387},[97,120460,101460],{"class":370},[97,120462,120463],{"class":118}," ttt\n",[97,120465,120466],{"class":99,"line":1393},[97,120467,120468],{"class":191},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[97,120470,120471,120474],{"class":99,"line":1407},[97,120472,120473],{"class":111},"wget",[97,120475,120476],{"class":118}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[97,120478,120479],{"class":99,"line":1413},[97,120480,120481],{"class":191},"# 给予权限\n",[97,120483,120484,120486,120488,120490],{"class":99,"line":1504},[97,120485,24766],{"class":111},[97,120487,24769],{"class":118},[97,120489,120305],{"class":118},[97,120491,120492],{"class":118}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[97,120494,120495],{"class":99,"line":1510},[97,120496,120497],{"class":191},"# 运行脚本\n",[97,120499,120500,120502],{"class":99,"line":1522},[97,120501,24766],{"class":111},[97,120503,120492],{"class":118},[24,120505,120506],{},[19,120507],{"alt":92,"src":120508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[24,120510,120511],{},"正在安装中：",[24,120513,120514],{},[19,120515],{"alt":92,"src":120516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[24,120518,120519],{},"输入accept接受即可",[24,120521,120522],{},[19,120523],{"alt":92,"src":120524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[24,120526,120527],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[24,120529,120530],{},[19,120531],{"alt":92,"src":120532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[24,120534,120535],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[24,120537,120538],{},[19,120539],{"alt":92,"src":120540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[138,120542,120543],{"start":241},[70,120544,120545],{},"配置环境",[24,120547,120548],{},"根据上方确认一下路径，比如我上面红色框起来的为",[87,120550,120552],{"className":118707,"code":120551,"language":118709,"meta":92,"style":92},"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",[94,120553,120554,120570,120585],{"__ignoreMap":92},[97,120555,120556,120559,120562,120565,120568],{"class":99,"line":100},[97,120557,120558],{"class":111},"Please",[97,120560,120561],{"class":118}," make",[97,120563,120564],{"class":118}," sure",[97,120566,120567],{"class":118}," that",[97,120569,2865],{"class":103},[97,120571,120572,120574,120577,120580,120583],{"class":99,"line":195},[97,120573,52455],{"class":111},[97,120575,120576],{"class":118},"   PATH",[97,120578,120579],{"class":118}," includes",[97,120581,120582],{"class":118}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[97,120584,2865],{"class":103},[97,120586,120587,120589,120592,120594,120597,120600,120602,120605,120608,120611,120614,120616,120619,120621],{"class":99,"line":241},[97,120588,52455],{"class":111},[97,120590,120591],{"class":118},"   LD_LIBRARY_PATH",[97,120593,120579],{"class":118},[97,120595,120596],{"class":118}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[97,120598,120599],{"class":118}," or,",[97,120601,5400],{"class":118},[97,120603,120604],{"class":118}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[97,120606,120607],{"class":118}," to",[97,120609,120610],{"class":118}," \u002Fetc\u002Fld.so.conf",[97,120612,120613],{"class":118}," and",[97,120615,27420],{"class":118},[97,120617,120618],{"class":118}," ldconfig",[97,120620,64788],{"class":118},[97,120622,120623],{"class":118}," root\n",[24,120625,120626],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[87,120628,120630],{"className":118707,"code":120629,"language":118709,"meta":92,"style":92},"which nvcc\n",[94,120631,120632],{"__ignoreMap":92},[97,120633,120634,120637],{"class":99,"line":100},[97,120635,120636],{"class":370},"which",[97,120638,120639],{"class":118}," nvcc\n",[24,120641,120642],{},[19,120643],{"alt":92,"src":120644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[24,120646,120647],{},"所以我进行以下操作：",[87,120649,120651],{"className":118707,"code":120650,"language":118709,"meta":92,"style":92},"sudo vim ~\u002F.bashrc\n",[94,120652,120653],{"__ignoreMap":92},[97,120654,120655,120657,120659],{"class":99,"line":100},[97,120656,24766],{"class":111},[97,120658,118767],{"class":118},[97,120660,120661],{"class":118}," ~\u002F.bashrc\n",[24,120663,120664],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[87,120666,120668],{"className":118707,"code":120667,"language":118709,"meta":92,"style":92},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[94,120669,120670,120682],{"__ignoreMap":92},[97,120671,120672,120674,120677,120679],{"class":99,"line":100},[97,120673,25232],{"class":319},[97,120675,120676],{"class":103}," PATH",[97,120678,115],{"class":319},[97,120680,120681],{"class":103},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[97,120683,120684,120686,120689,120691],{"class":99,"line":195},[97,120685,25232],{"class":319},[97,120687,120688],{"class":103}," LD_LIBRARY_PATH",[97,120690,115],{"class":319},[97,120692,120693],{"class":103},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[24,120695,120696],{},[19,120697],{"alt":92,"src":120698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[87,120700,120702],{"className":118707,"code":120701,"language":118709,"meta":92,"style":92},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[94,120703,120704,120709,120715,120720],{"__ignoreMap":92},[97,120705,120706],{"class":99,"line":100},[97,120707,120708],{"class":191},"# 刷新当前终端的环境变量\n",[97,120710,120711,120713],{"class":99,"line":195},[97,120712,101077],{"class":370},[97,120714,120661],{"class":118},[97,120716,120717],{"class":99,"line":241},[97,120718,120719],{"class":191},"# 验证CUDA是否安装成功\n",[97,120721,120722,120725],{"class":99,"line":1387},[97,120723,120724],{"class":111},"nvcc",[97,120726,120727],{"class":370}," -V\n",[24,120729,120730],{},"出现下图这种则安装成功。",[24,120732,120733],{},[19,120734],{"alt":92,"src":120735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[48,120737,120739],{"id":120738},"_354-安装cudnn","3.5.4 安装cuDNN",[138,120741,120742],{},[70,120743,120744],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[24,120746,120747,120748,120753],{},"前往 NVIDIA cuDNN 下载页面：",[558,120749,120752],{"href":120750,"rel":120751},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24054],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[24,120755,120756],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[24,120758,120759],{},[19,120760],{"alt":92,"src":120761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[24,120763,120764],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[24,120766,120767],{},[19,120768],{"alt":92,"src":120769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[24,120771,120772],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[24,120774,120775],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[24,120777,120778],{},[469,120779,120780],{},"我这里选择所有Linux X86_64最通用的办法：",[24,120782,120783],{},"下载好的：",[24,120785,120786],{},[19,120787],{"alt":92,"src":120788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[138,120790,120791],{"start":195},[70,120792,120793],{},"安装cuDNN",[24,120795,120796],{},"找到该文件所在目录，并打开终端，cd到该目录。",[24,120798,120799],{},[19,120800],{"alt":92,"src":120801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[24,120803,120804],{},"解压文件，并复制到对应位置完成安装",[87,120806,120808],{"className":118707,"code":120807,"language":118709,"meta":92,"style":92},"# 解压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",[94,120809,120810,120815,120826,120831,120838,120843,120859,120873,120878,120889,120898,120902,120918],{"__ignoreMap":92},[97,120811,120812],{"class":99,"line":100},[97,120813,120814],{"class":191},"# 解压cuDNN文件\n",[97,120816,120817,120820,120823],{"class":99,"line":195},[97,120818,120819],{"class":111},"tar",[97,120821,120822],{"class":370}," -xvf",[97,120824,120825],{"class":118}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[97,120827,120828],{"class":99,"line":241},[97,120829,120830],{"class":191},"# cd进文件夹\n",[97,120832,120833,120835],{"class":99,"line":1387},[97,120834,101460],{"class":370},[97,120836,120837],{"class":118}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[97,120839,120840],{"class":99,"line":1393},[97,120841,120842],{"class":191},"# 复制cuDNN文件到CUDA目录\n",[97,120844,120845,120847,120849,120852,120854,120857],{"class":99,"line":1407},[97,120846,24766],{"class":111},[97,120848,28051],{"class":118},[97,120850,120851],{"class":118}," include\u002Fcudnn",[97,120853,775],{"class":370},[97,120855,120856],{"class":118},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[97,120858,2865],{"class":103},[97,120860,120861,120863,120865,120868,120870],{"class":99,"line":1413},[97,120862,24766],{"class":111},[97,120864,28051],{"class":118},[97,120866,120867],{"class":118}," lib\u002Flibcudnn",[97,120869,775],{"class":370},[97,120871,120872],{"class":118},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[97,120874,120875],{"class":99,"line":1504},[97,120876,120877],{"class":191},"# 对比一下有没有缺文件\n",[97,120879,120880,120882,120885,120887],{"class":99,"line":1510},[97,120881,26951],{"class":111},[97,120883,120884],{"class":118}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[97,120886,775],{"class":370},[97,120888,2865],{"class":103},[97,120890,120891,120893,120896],{"class":99,"line":1522},[97,120892,26951],{"class":111},[97,120894,120895],{"class":118}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[97,120897,119432],{"class":370},[97,120899,120900],{"class":99,"line":1804},[97,120901,120481],{"class":191},[97,120903,120904,120906,120908,120911,120913,120915],{"class":99,"line":1809},[97,120905,24766],{"class":111},[97,120907,24769],{"class":118},[97,120909,120910],{"class":118}," a+r",[97,120912,120884],{"class":118},[97,120914,775],{"class":370},[97,120916,120917],{"class":103},"   \n",[97,120919,120920,120922,120924,120926,120928],{"class":99,"line":1815},[97,120921,24766],{"class":111},[97,120923,24769],{"class":118},[97,120925,120910],{"class":118},[97,120927,120895],{"class":118},[97,120929,119432],{"class":370},[138,120931,120932],{"start":241},[70,120933,120934],{},"检查是否安装成功",[87,120936,120938],{"className":118707,"code":120937,"language":118709,"meta":92,"style":92},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[94,120939,120940,120945],{"__ignoreMap":92},[97,120941,120942],{"class":99,"line":100},[97,120943,120944],{"class":191},"# 检查cuDNN版本命令\n",[97,120946,120947,120950,120953,120955,120957,120960,120963],{"class":99,"line":195},[97,120948,120949],{"class":111},"cat",[97,120951,120952],{"class":118}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[97,120954,25299],{"class":319},[97,120956,30426],{"class":111},[97,120958,120959],{"class":118}," CUDNN_MAJOR",[97,120961,120962],{"class":370}," -A",[97,120964,47913],{"class":370},[24,120966,120967],{},"出现下图这样的就是安装成功了",[24,120969,120970],{},[19,120971],{"alt":92,"src":120972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[138,120974,120975],{"start":1387},[70,120976,120977],{},"软链接(一般不需要)",[87,120979,120981],{"className":118707,"code":120980,"language":118709,"meta":92,"style":92},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[94,120982,120983,120988],{"__ignoreMap":92},[97,120984,120985],{"class":99,"line":100},[97,120986,120987],{"class":191},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[97,120989,120990,120992],{"class":99,"line":195},[97,120991,24766],{"class":111},[97,120993,120994],{"class":118}," ldconfig\n",[24,120996,120997],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[87,120999,121004],{"className":121000,"code":121001,"language":121002,"meta":121003,"style":92},"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",[94,121005,121006,121011,121016,121021,121026,121031,121036],{"__ignoreMap":92},[97,121007,121008],{"class":99,"line":100},[97,121009,121010],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[97,121012,121013],{"class":99,"line":195},[97,121014,121015],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[97,121017,121018],{"class":99,"line":241},[97,121019,121020],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[97,121022,121023],{"class":99,"line":1387},[97,121024,121025],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[97,121027,121028],{"class":99,"line":1393},[97,121029,121030],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[97,121032,121033],{"class":99,"line":1407},[97,121034,121035],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[97,121037,121038],{"class":99,"line":1413},[97,121039,121040],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[24,121042,121043],{},"运行下方的命令",[87,121045,121047],{"className":118707,"code":121046,"language":118709,"meta":92,"style":92},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[94,121048,121049,121054,121061,121066],{"__ignoreMap":92},[97,121050,121051],{"class":99,"line":100},[97,121052,121053],{"class":191},"# cd进入CUDA路径\n",[97,121055,121056,121058],{"class":99,"line":195},[97,121057,101460],{"class":370},[97,121059,121060],{"class":118}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[97,121062,121063],{"class":99,"line":241},[97,121064,121065],{"class":191}," # 查看本路径下的需要软链接的文件名\n",[97,121067,121068],{"class":99,"line":1387},[97,121069,121070],{"class":111}," ls\n",[24,121072,121073],{},[19,121074],{"alt":92,"src":121075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[24,121077,121078,121079,18600,121082,18600,121085,121088],{},"如上图，我需要将",[94,121080,121081],{},"libcudnn_xxx_xxxxx.so.8.9.7",[94,121083,121084],{},"libcudnn_xxx_xxxxx.so.8",[94,121086,121087],{},"libcudnn_xxx_xxxxx.so","软链接",[87,121090,121092],{"className":118707,"code":121091,"language":118709,"meta":92,"style":92},"# 创建符号链接。对于每个 .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",[94,121093,121094,121099,121115,121129,121143,121157,121171,121185,121199,121204,121210,121215],{"__ignoreMap":92},[97,121095,121096],{"class":99,"line":100},[97,121097,121098],{"class":191},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[97,121100,121101,121103,121106,121109,121112],{"class":99,"line":195},[97,121102,24766],{"class":111},[97,121104,121105],{"class":118}," ln",[97,121107,121108],{"class":370}," -sf",[97,121110,121111],{"class":118}," libcudnn_cnn_train.so.8.9.7",[97,121113,121114],{"class":118}," libcudnn_cnn_train.so.8\n",[97,121116,121117,121119,121121,121123,121126],{"class":99,"line":241},[97,121118,24766],{"class":111},[97,121120,121105],{"class":118},[97,121122,121108],{"class":370},[97,121124,121125],{"class":118}," libcudnn_adv_infer.so.8.9.7",[97,121127,121128],{"class":118}," libcudnn_adv_infer.so.8\n",[97,121130,121131,121133,121135,121137,121140],{"class":99,"line":1387},[97,121132,24766],{"class":111},[97,121134,121105],{"class":118},[97,121136,121108],{"class":370},[97,121138,121139],{"class":118}," libcudnn_adv_train.so.8.9.7",[97,121141,121142],{"class":118}," libcudnn_adv_train.so.8\n",[97,121144,121145,121147,121149,121151,121154],{"class":99,"line":1393},[97,121146,24766],{"class":111},[97,121148,121105],{"class":118},[97,121150,121108],{"class":370},[97,121152,121153],{"class":118}," libcudnn_cnn_infer.so.8.9.7",[97,121155,121156],{"class":118}," libcudnn_cnn_infer.so.8\n",[97,121158,121159,121161,121163,121165,121168],{"class":99,"line":1407},[97,121160,24766],{"class":111},[97,121162,121105],{"class":118},[97,121164,121108],{"class":370},[97,121166,121167],{"class":118}," libcudnn.so.8.9.7",[97,121169,121170],{"class":118}," libcudnn.so.8\n",[97,121172,121173,121175,121177,121179,121182],{"class":99,"line":1413},[97,121174,24766],{"class":111},[97,121176,121105],{"class":118},[97,121178,121108],{"class":370},[97,121180,121181],{"class":118}," libcudnn_ops_infer.so.8.9.7",[97,121183,121184],{"class":118}," libcudnn_ops_infer.so.8\n",[97,121186,121187,121189,121191,121193,121196],{"class":99,"line":1504},[97,121188,24766],{"class":111},[97,121190,121105],{"class":118},[97,121192,121108],{"class":370},[97,121194,121195],{"class":118}," libcudnn_ops_train.so.8.9.7",[97,121197,121198],{"class":118}," libcudnn_ops_train.so.8\n",[97,121200,121201],{"class":99,"line":1510},[97,121202,121203],{"class":191},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[97,121205,121206,121208],{"class":99,"line":1522},[97,121207,24766],{"class":111},[97,121209,120994],{"class":118},[97,121211,121212],{"class":99,"line":1804},[97,121213,121214],{"class":191},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[97,121216,121217,121219,121222,121225,121227,121230],{"class":99,"line":1809},[97,121218,26951],{"class":111},[97,121220,121221],{"class":370}," -l",[97,121223,121224],{"class":118}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[97,121226,775],{"class":370},[97,121228,121229],{"class":118},".so",[97,121231,119432],{"class":370},[48,121233,121235],{"id":121234},"_355-常见问题","3.5.5 常见问题",[138,121237,121238],{},[70,121239,121240],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[87,121242,121244],{"className":118707,"code":121243,"language":118709,"meta":92,"style":92},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[94,121245,121246],{"__ignoreMap":92},[97,121247,121248,121250,121252],{"class":99,"line":100},[97,121249,24766],{"class":111},[97,121251,118767],{"class":118},[97,121253,121254],{"class":118}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[24,121256,121257],{},"blacklist-nouveau.conf文件内容如下：",[87,121259,121261],{"className":118707,"code":121260,"language":118709,"meta":92,"style":92},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[94,121262,121263,121271,121278,121290,121300],{"__ignoreMap":92},[97,121264,121265,121268],{"class":99,"line":100},[97,121266,121267],{"class":111},"blacklist",[97,121269,121270],{"class":118}," nouveau\n",[97,121272,121273,121275],{"class":99,"line":195},[97,121274,121267],{"class":111},[97,121276,121277],{"class":118}," lbm-nouveau\n",[97,121279,121280,121282,121285,121288],{"class":99,"line":241},[97,121281,116114],{"class":111},[97,121283,121284],{"class":118}," nouveau",[97,121286,121287],{"class":118}," modeset=",[97,121289,3276],{"class":370},[97,121291,121292,121295,121297],{"class":99,"line":1387},[97,121293,121294],{"class":370},"alias",[97,121296,121284],{"class":118},[97,121298,121299],{"class":118}," off\n",[97,121301,121302,121304,121307],{"class":99,"line":1393},[97,121303,121294],{"class":370},[97,121305,121306],{"class":118}," lbm-nouveau",[97,121308,121299],{"class":118},[24,121310,121311],{},"接着运行下方命令",[87,121313,121315],{"className":118707,"code":121314,"language":118709,"meta":92,"style":92},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[94,121316,121317,121327,121332],{"__ignoreMap":92},[97,121318,121319,121321,121324],{"class":99,"line":100},[97,121320,24766],{"class":111},[97,121322,121323],{"class":118}," update-initramfs",[97,121325,121326],{"class":370}," -u\n",[97,121328,121329],{"class":99,"line":195},[97,121330,121331],{"class":111},"或者\n",[97,121333,121334,121336,121339],{"class":99,"line":241},[97,121335,24766],{"class":111},[97,121337,121338],{"class":118}," dracut",[97,121340,121341],{"class":370}," --force\n",[24,121343,121344],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[87,121346,121348],{"className":118707,"code":121347,"language":118709,"meta":92,"style":92},"lsmod | grep nouveau\n",[94,121349,121350],{"__ignoreMap":92},[97,121351,121352,121355,121357,121359],{"class":99,"line":100},[97,121353,121354],{"class":111},"lsmod",[97,121356,25299],{"class":319},[97,121358,30426],{"class":111},[97,121360,121270],{"class":118},[138,121362,121363],{"start":195},[70,121364,121365],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[87,121367,121369],{"className":118707,"code":121368,"language":118709,"meta":92,"style":92},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[94,121370,121371],{"__ignoreMap":92},[97,121372,121373,121375,121377],{"class":99,"line":100},[97,121374,24766],{"class":111},[97,121376,118767],{"class":118},[97,121378,121379],{"class":118}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[24,121381,121382],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[87,121384,121386],{"className":118707,"code":121385,"language":118709,"meta":92,"style":92},"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",[94,121387,121388,121396,121404,121412,121419,121427,121437,121445],{"__ignoreMap":92},[97,121389,121390,121393],{"class":99,"line":100},[97,121391,121392],{"class":111},"Section",[97,121394,121395],{"class":118}," \"OutputClass\"\n",[97,121397,121398,121401],{"class":99,"line":195},[97,121399,121400],{"class":111},"   Identifier",[97,121402,121403],{"class":118}," \"nvidia\"\n",[97,121405,121406,121409],{"class":99,"line":241},[97,121407,121408],{"class":111},"   MatchDriver",[97,121410,121411],{"class":118}," \"nvidia-drm\"\n",[97,121413,121414,121417],{"class":99,"line":1387},[97,121415,121416],{"class":111},"   Driver",[97,121418,121403],{"class":118},[97,121420,121421,121424],{"class":99,"line":1393},[97,121422,121423],{"class":111},"   Option",[97,121425,121426],{"class":118}," \"AllowEmptyInitialConfiguration\"\n",[97,121428,121429,121431,121434],{"class":99,"line":1407},[97,121430,121423],{"class":111},[97,121432,121433],{"class":118}," \"PrimaryGPU\"",[97,121435,121436],{"class":118}," \"yes\"\n",[97,121438,121439,121442],{"class":99,"line":1413},[97,121440,121441],{"class":111},"   ModulePath",[97,121443,121444],{"class":118}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[97,121446,121447],{"class":99,"line":1504},[97,121448,121449],{"class":111},"EndSection\n",[138,121451,121452],{"start":241},[70,121453,121454],{},"安装N卡驱动提示错误",[87,121456,121458],{"className":121000,"code":121457,"language":121002,"meta":121003,"style":92},"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",[94,121459,121460],{"__ignoreMap":92},[97,121461,121462],{"class":99,"line":100},[97,121463,121457],{},[138,121465,121466],{},[70,121467,121468],{},"检查当前运行的内核版本：",[24,121470,121471],{},"运行以下命令以查看你当前正在使用的内核版本：",[87,121473,121475],{"className":117480,"code":121474,"language":117482,"meta":92,"style":92},"uname -r\n",[94,121476,121477],{"__ignoreMap":92},[97,121478,121479,121481],{"class":99,"line":100},[97,121480,70388],{"class":111},[97,121482,121483],{"class":370}," -r\n",[138,121485,121486],{"start":195},[70,121487,121488],{},"安装内核开发文件：",[24,121490,121491,121492,121495],{},"确保你已经安装了与当前内核版本相匹配的 ",[94,121493,121494],{},"kernel-devel"," 包。运行以下命令来安装：",[87,121497,121499],{"className":117480,"code":121498,"language":117482,"meta":92,"style":92},"sudo dnf install kernel-devel-$(uname -r)\n",[94,121500,121501],{"__ignoreMap":92},[97,121502,121503,121505,121507,121509,121512,121514,121516,121518],{"class":99,"line":100},[97,121504,24766],{"class":111},[97,121506,26505],{"class":118},[97,121508,24023],{"class":118},[97,121510,121511],{"class":118}," kernel-devel-",[97,121513,25289],{"class":103},[97,121515,70388],{"class":111},[97,121517,119823],{"class":370},[97,121519,329],{"class":103},[24,121521,121522],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[138,121524,121525],{"start":241},[70,121526,121527],{},"安装内核源代码（如果需要）：",[24,121529,121530],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[87,121532,121534],{"className":117480,"code":121533,"language":117482,"meta":92,"style":92},"sudo dnf install kernel-headers kernel-source\n",[94,121535,121536],{"__ignoreMap":92},[97,121537,121538,121540,121542,121544,121547],{"class":99,"line":100},[97,121539,24766],{"class":111},[97,121541,26505],{"class":118},[97,121543,24023],{"class":118},[97,121545,121546],{"class":118}," kernel-headers",[97,121548,121549],{"class":118}," kernel-source\n",[138,121551,121552],{"start":1387},[70,121553,121554],{},"检查安装：",[24,121556,121557,121558,121561],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[94,121559,121560],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[87,121563,121565],{"className":117480,"code":121564,"language":117482,"meta":92,"style":92},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[94,121566,121567],{"__ignoreMap":92},[97,121568,121569,121571],{"class":99,"line":100},[97,121570,26951],{"class":111},[97,121572,121573],{"class":118}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[24,121575,121576,121577,121580],{},"如果仍然遇到问题，可以通过 ",[94,121578,121579],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[231,121582,121583],{},"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":92,"searchDepth":195,"depth":195,"links":121585},[121586,121590,121600,121604,121605],{"id":118683,"depth":195,"text":118684,"children":121587},[121588,121589],{"id":118693,"depth":241,"text":118694},{"id":118703,"depth":241,"text":118704},{"id":118903,"depth":195,"text":118904,"children":121591},[121592,121593,121594,121595,121596,121597,121598,121599],{"id":118907,"depth":241,"text":118908},{"id":118977,"depth":241,"text":118978},{"id":119066,"depth":241,"text":119067},{"id":119311,"depth":241,"text":119312},{"id":119381,"depth":241,"text":119382},{"id":119448,"depth":241,"text":119449},{"id":119483,"depth":241,"text":119484},{"id":119538,"depth":241,"text":119539},{"id":119589,"depth":195,"text":119590,"children":121601},[121602,121603],{"id":119593,"depth":241,"text":119594},{"id":119673,"depth":241,"text":119674},{"id":119859,"depth":195,"text":119860},{"id":120032,"depth":195,"text":120033,"children":121606},[121607,121608,121609,121610,121611],{"id":120036,"depth":241,"text":120037},{"id":120077,"depth":241,"text":120078},{"id":120364,"depth":241,"text":120365},{"id":120738,"depth":241,"text":120739},{"id":121234,"depth":241,"text":121235},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118675,"description":246},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121618,"title":121619,"body":121620,"description":246,"extension":247,"meta":121960,"navigation":249,"path":121961,"seo":121962,"stem":121963,"__hash__":121964},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121621,"toc":121958},[121622,121625,121630,121633,121879,121884,121887,121923,121926,121955],[10,121623,121619],{"id":121624},"_4-命令教程长期积累",[138,121626,121627],{},[70,121628,121629],{},"大多数命令",[24,121631,121632],{},"常用 Linux 命令速查：",[87,121634,121636],{"className":117480,"code":121635,"language":117482,"meta":92,"style":92},"# 文件与目录\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",[94,121637,121638,121643,121650,121657,121665,121672,121679,121687,121695,121702,121709,121717,121721,121726,121733,121741,121748,121752,121757,121764,121772,121780,121788,121796,121800,121805,121813,121820,121827,121835,121843,121847,121852,121861,121870],{"__ignoreMap":92},[97,121639,121640],{"class":99,"line":100},[97,121641,121642],{"class":191},"# 文件与目录\n",[97,121644,121645,121647],{"class":99,"line":195},[97,121646,26951],{"class":111},[97,121648,121649],{"class":191},"        # 列出目录内容\n",[97,121651,121652,121654],{"class":99,"line":241},[97,121653,101460],{"class":370},[97,121655,121656],{"class":191},"        # 切换目录\n",[97,121658,121659,121662],{"class":99,"line":1387},[97,121660,121661],{"class":370},"pwd",[97,121663,121664],{"class":191},"       # 显示当前路径\n",[97,121666,121667,121669],{"class":99,"line":1393},[97,121668,101450],{"class":111},[97,121670,121671],{"class":191},"     # 创建目录\n",[97,121673,121674,121676],{"class":99,"line":1407},[97,121675,25512],{"class":111},[97,121677,121678],{"class":191},"        # 删除文件或目录\n",[97,121680,121681,121684],{"class":99,"line":1413},[97,121682,121683],{"class":111},"cp",[97,121685,121686],{"class":191},"        # 复制文件或目录\n",[97,121688,121689,121692],{"class":99,"line":1504},[97,121690,121691],{"class":111},"mv",[97,121693,121694],{"class":191},"        # 移动\u002F重命名文件或目录\n",[97,121696,121697,121699],{"class":99,"line":1510},[97,121698,101467],{"class":111},[97,121700,121701],{"class":191},"     # 创建空文件\n",[97,121703,121704,121706],{"class":99,"line":1522},[97,121705,120949],{"class":111},[97,121707,121708],{"class":191},"       # 查看文件内容\n",[97,121710,121711,121714],{"class":99,"line":1804},[97,121712,121713],{"class":111},"head\u002Ftail",[97,121715,121716],{"class":191}," # 查看文件头部\u002F尾部\n",[97,121718,121719],{"class":99,"line":1809},[97,121720,2591],{"emptyLinePlaceholder":249},[97,121722,121723],{"class":99,"line":1815},[97,121724,121725],{"class":191},"# 权限管理\n",[97,121727,121728,121730],{"class":99,"line":1820},[97,121729,24801],{"class":111},[97,121731,121732],{"class":191},"     # 修改文件权限\n",[97,121734,121735,121738],{"class":99,"line":1834},[97,121736,121737],{"class":111},"chown",[97,121739,121740],{"class":191},"     # 修改文件所有者\n",[97,121742,121743,121745],{"class":99,"line":1839},[97,121744,24766],{"class":111},[97,121746,121747],{"class":191},"      # 以管理员身份执行\n",[97,121749,121750],{"class":99,"line":1845},[97,121751,2591],{"emptyLinePlaceholder":249},[97,121753,121754],{"class":99,"line":1866},[97,121755,121756],{"class":191},"# 系统信息\n",[97,121758,121759,121761],{"class":99,"line":1871},[97,121760,70388],{"class":111},[97,121762,121763],{"class":191},"     # 系统信息\n",[97,121765,121766,121769],{"class":99,"line":1885},[97,121767,121768],{"class":111},"df",[97,121770,121771],{"class":191},"        # 磁盘使用情况\n",[97,121773,121774,121777],{"class":99,"line":1890},[97,121775,121776],{"class":111},"free",[97,121778,121779],{"class":191},"      # 内存使用情况\n",[97,121781,121782,121785],{"class":99,"line":1919},[97,121783,121784],{"class":111},"top\u002Fhtop",[97,121786,121787],{"class":191},"  # 进程监控\n",[97,121789,121790,121793],{"class":99,"line":1924},[97,121791,121792],{"class":111},"ps",[97,121794,121795],{"class":191},"        # 查看进程\n",[97,121797,121798],{"class":99,"line":1941},[97,121799,2591],{"emptyLinePlaceholder":249},[97,121801,121802],{"class":99,"line":1946},[97,121803,121804],{"class":191},"# 网络\n",[97,121806,121807,121810],{"class":99,"line":1951},[97,121808,121809],{"class":111},"ping",[97,121811,121812],{"class":191},"      # 测试网络连通性\n",[97,121814,121815,121817],{"class":99,"line":1956},[97,121816,27039],{"class":111},[97,121818,121819],{"class":191},"      # 发送 HTTP 请求\n",[97,121821,121822,121824],{"class":99,"line":1970},[97,121823,120473],{"class":111},[97,121825,121826],{"class":191},"      # 下载文件\n",[97,121828,121829,121832],{"class":99,"line":1975},[97,121830,121831],{"class":111},"ssh",[97,121833,121834],{"class":191},"       # 远程登录\n",[97,121836,121837,121840],{"class":99,"line":2768},[97,121838,121839],{"class":111},"scp",[97,121841,121842],{"class":191},"       # 远程文件传输\n",[97,121844,121845],{"class":99,"line":2782},[97,121846,2591],{"emptyLinePlaceholder":249},[97,121848,121849],{"class":99,"line":2790},[97,121850,121851],{"class":191},"# 包管理（Debian\u002FUbuntu）\n",[97,121853,121854,121856,121858],{"class":99,"line":2795},[97,121855,117552],{"class":111},[97,121857,117531],{"class":118},[97,121859,121860],{"class":191},"   # 更新软件源\n",[97,121862,121863,121865,121867],{"class":99,"line":2801},[97,121864,117552],{"class":111},[97,121866,24023],{"class":118},[97,121868,121869],{"class":191},"  # 安装软件包\n",[97,121871,121872,121874,121876],{"class":99,"line":2807},[97,121873,117552],{"class":111},[97,121875,26269],{"class":118},[97,121877,121878],{"class":191},"   # 卸载软件包\n",[138,121880,121881],{"start":195},[70,121882,121883],{},"KDE Dolphin 以root打开",[24,121885,121886],{},"kde5",[87,121888,121890],{"className":117480,"code":121889,"language":117482,"meta":92,"style":92},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[94,121891,121892],{"__ignoreMap":92},[97,121893,121894,121897,121900,121903,121905,121907,121910,121913,121915,121918,121920],{"class":99,"line":100},[97,121895,121896],{"class":111},"pkexec",[97,121898,121899],{"class":118}," env",[97,121901,121902],{"class":118}," DISPLAY=",[97,121904,28333],{"class":103},[97,121906,28391],{"class":118},[97,121908,121909],{"class":103},"$XAUTHORITY ",[97,121911,121912],{"class":118},"KDE_SESSION_VERSION=",[97,121914,639],{"class":370},[97,121916,121917],{"class":118}," KDE_FULL_SESSION=",[97,121919,1555],{"class":370},[97,121921,121922],{"class":118}," dolphin\n",[24,121924,121925],{},"kde6",[87,121927,121929],{"className":117480,"code":121928,"language":117482,"meta":92,"style":92},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[94,121930,121931],{"__ignoreMap":92},[97,121932,121933,121935,121937,121939,121941,121943,121945,121947,121949,121951,121953],{"class":99,"line":100},[97,121934,121896],{"class":111},[97,121936,121899],{"class":118},[97,121938,121902],{"class":118},[97,121940,28333],{"class":103},[97,121942,28391],{"class":118},[97,121944,121909],{"class":103},[97,121946,121912],{"class":118},[97,121948,664],{"class":370},[97,121950,121917],{"class":118},[97,121952,1555],{"class":370},[97,121954,121922],{"class":118},[231,121956,121957],{},"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":92,"searchDepth":195,"depth":195,"links":121959},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121619,"description":246},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121966,"title":121967,"body":121968,"description":246,"extension":247,"meta":121982,"navigation":249,"path":121983,"seo":121984,"stem":121985,"__hash__":121986},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121969,"toc":121980},[121970,121973],[10,121971,121967],{"id":121972},"_5-各种环境配置",[24,121974,121975],{},[558,121976,121979],{"href":121977,"rel":121978},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24054],"电控组环境搭建大全",{"title":92,"searchDepth":195,"depth":195,"links":121981},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121967,"description":246},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121988,"title":121989,"body":121990,"description":246,"extension":247,"meta":122338,"navigation":249,"path":122339,"seo":122340,"stem":122341,"__hash__":122342},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121991,"toc":122330},[121992,121995,121999,122003,122007,122012,122019,122023,122316,122320,122327],[10,121993,121989],{"id":121994},"_6-拓展功能",[14,121996,121998],{"id":121997},"_61-wine","6.1 Wine",[14,122000,122002],{"id":122001},"_62-android","6.2 Android",[48,122004,122006],{"id":122005},"_621-i卡a卡","6.2.1 I卡、A卡",[138,122008,122009],{},[70,122010,122011],{},"Wayland-Waydroid(体验超级好)",[24,122013,122014,122015],{},"Waydroid 官网与安装指南：",[558,122016,122017],{"href":122017,"rel":122018},"https:\u002F\u002Fwaydro.id\u002F",[24054],[48,122020,122022],{"id":122021},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[138,122024,122025],{},[70,122026,122027,122028,122030,122031,122035,122037,122040,122045,122242],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53900,122029],{},"BlissOS 官网下载：",[558,122032,122033],{"href":122033,"rel":122034},"https:\u002F\u002Fblissos.org\u002F",[24054],[53900,122036],{},[19,122038],{"alt":92,"src":122039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[138,122041,122042],{"start":241},[70,122043,122044],{},"比较推荐的配置",[87,122046,122048],{"className":117480,"code":122047,"language":117482,"meta":92,"style":92},"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",[94,122049,122050,122057,122067,122077,122087,122099,122109,122116,122126,122135,122144,122154,122164,122173,122183,122193,122205,122215,122224,122234],{"__ignoreMap":92},[97,122051,122052,122055],{"class":99,"line":100},[97,122053,122054],{"class":111},"qemu-system-x86_64",[97,122056,24868],{"class":370},[97,122058,122059,122062,122065],{"class":99,"line":195},[97,122060,122061],{"class":370},"        -M",[97,122063,122064],{"class":118}," q35,vmport=off",[97,122066,24868],{"class":370},[97,122068,122069,122072,122075],{"class":99,"line":241},[97,122070,122071],{"class":370},"        -accel",[97,122073,122074],{"class":118}," kvm",[97,122076,24868],{"class":370},[97,122078,122079,122082,122085],{"class":99,"line":1387},[97,122080,122081],{"class":370},"        -cpu",[97,122083,122084],{"class":118}," qemu64,+sse3,+sse4.2",[97,122086,24868],{"class":370},[97,122088,122089,122092,122095,122097],{"class":99,"line":1393},[97,122090,122091],{"class":370},"        -smp",[97,122093,122094],{"class":118}," 8,cores=",[97,122096,613],{"class":370},[97,122098,24868],{"class":370},[97,122100,122101,122104,122107],{"class":99,"line":1407},[97,122102,122103],{"class":370},"        -m",[97,122105,122106],{"class":118}," 6G",[97,122108,24868],{"class":370},[97,122110,122111,122114],{"class":99,"line":1413},[97,122112,122113],{"class":370},"        -usb",[97,122115,24868],{"class":370},[97,122117,122118,122121,122124],{"class":99,"line":1504},[97,122119,122120],{"class":370},"        -device",[97,122122,122123],{"class":118}," virtio-tablet",[97,122125,24868],{"class":370},[97,122127,122128,122130,122133],{"class":99,"line":1510},[97,122129,122120],{"class":370},[97,122131,122132],{"class":118}," virtio-keyboard",[97,122134,24868],{"class":370},[97,122136,122137,122139,122142],{"class":99,"line":1522},[97,122138,122120],{"class":370},[97,122140,122141],{"class":118}," usb-tablet",[97,122143,24868],{"class":370},[97,122145,122146,122149,122152],{"class":99,"line":1804},[97,122147,122148],{"class":370},"        -bios",[97,122150,122151],{"class":118}," OVMF-pure-efi64.fd",[97,122153,24868],{"class":370},[97,122155,122156,122159,122162],{"class":99,"line":1809},[97,122157,122158],{"class":370},"        -net",[97,122160,122161],{"class":118}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[97,122163,24868],{"class":370},[97,122165,122166,122168,122171],{"class":99,"line":1815},[97,122167,122158],{"class":370},[97,122169,122170],{"class":118}," nic,model=virtio",[97,122172,24868],{"class":370},[97,122174,122175,122178,122181],{"class":99,"line":1820},[97,122176,122177],{"class":370},"        -audio",[97,122179,122180],{"class":118}," sdl,model=hda",[97,122182,24868],{"class":370},[97,122184,122185,122188,122191],{"class":99,"line":1834},[97,122186,122187],{"class":370},"        -display",[97,122189,122190],{"class":118}," sdl,gl=on,show-cursor=on",[97,122192,24868],{"class":370},[97,122194,122195,122197,122200,122203],{"class":99,"line":1839},[97,122196,122120],{"class":370},[97,122198,122199],{"class":118}," virtio-vga-gl,xres=1920,yres=",[97,122201,122202],{"class":370},"1080",[97,122204,24868],{"class":370},[97,122206,122207,122210,122213],{"class":99,"line":1845},[97,122208,122209],{"class":370},"        -drive",[97,122211,122212],{"class":118}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[97,122214,24868],{"class":370},[97,122216,122217,122219,122222],{"class":99,"line":1866},[97,122218,122209],{"class":370},[97,122220,122221],{"class":118}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[97,122223,24868],{"class":370},[97,122225,122226,122229,122232],{"class":99,"line":1871},[97,122227,122228],{"class":370},"        -monitor",[97,122230,122231],{"class":118}," stdio",[97,122233,24868],{"class":370},[97,122235,122236,122239],{"class":99,"line":1885},[97,122237,122238],{"class":370},"        -serial",[97,122240,122241],{"class":118}," none\n",[138,122243,122244],{"start":1393},[70,122245,122246,122247],{},"常用操作：",[138,122248,122249,122252,122308],{},[70,122250,122251],{},"全屏：Ctrl+Alt+F",[70,122253,122254,122255,122260],{},"adb调试",[138,122256,122257],{},[70,122258,122259],{},"使Linux与Android用ADB连接。",[87,122261,122263],{"className":117480,"code":122262,"language":117482,"meta":92,"style":92},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[94,122264,122265,122270,122281,122286,122298,122303],{"__ignoreMap":92},[97,122266,122267],{"class":99,"line":100},[97,122268,122269],{"class":191},"# 连接安卓\n",[97,122271,122272,122275,122278],{"class":99,"line":195},[97,122273,122274],{"class":111},"adb",[97,122276,122277],{"class":118}," connect",[97,122279,122280],{"class":370}," 127.0.0.1\n",[97,122282,122283],{"class":99,"line":241},[97,122284,122285],{"class":191},"# 打开shell\n",[97,122287,122288,122290,122292,122295],{"class":99,"line":1387},[97,122289,122274],{"class":111},[97,122291,27073],{"class":370},[97,122293,122294],{"class":118}," 127.0.0.1:5555",[97,122296,122297],{"class":118}," shell\n",[97,122299,122300],{"class":99,"line":1393},[97,122301,122302],{"class":191},"# 使用root权限\n",[97,122304,122305],{"class":99,"line":1407},[97,122306,122307],{"class":111},"su\n",[70,122309,122310,122311],{},"中文输入法",[138,122312,122313],{},[70,122314,122315],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122317,122319],{"id":122318},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[24,122321,122322,122323],{},"rEFInd 官网与文档：",[558,122324,122325],{"href":122325,"rel":122326},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24054],[231,122328,122329],{},"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":92,"searchDepth":195,"depth":195,"links":122331},[122332,122333,122337],{"id":121997,"depth":195,"text":121998},{"id":122001,"depth":195,"text":122002,"children":122334},[122335,122336],{"id":122005,"depth":241,"text":122006},{"id":122021,"depth":241,"text":122022},{"id":122318,"depth":195,"text":122319},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121989,"description":246},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122344,"title":122345,"body":122346,"description":246,"extension":247,"meta":125645,"navigation":249,"path":125646,"seo":125647,"stem":125648,"__hash__":125649},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122347,"toc":125619},[122348,122351,122355,122358,122365,122615,122618,122690,122693,122697,122701,122706,122709,122712,122715,122720,122723,122726,122729,122734,122737,122742,122745,122748,122753,122756,122761,122764,122768,122772,122775,122780,122783,122797,122800,122803,122812,122815,122824,122827,122830,122839,122842,122851,122854,122857,122866,122869,122872,122887,122890,122893,122902,122907,122910,122913,122922,122925,122934,122937,122946,122949,122958,122963,122966,122974,122979,122982,122991,122994,123002,123007,123010,123019,123022,123025,123029,123032,123037,123040,123045,123059,123064,123069,123080,123085,123091,123096,123111,123116,123119,123124,123129,123134,123142,123147,123154,123159,123170,123175,123178,123182,123185,123188,123193,123196,123215,123220,123223,123232,123237,123240,123262,123265,123295,123298,123303,123306,123320,123325,123344,123347,123350,123355,123367,123372,123377,123380,123385,123388,123403,123406,123411,123416,123420,123425,123465,123468,123472,123478,123484,123489,123492,123499,123504,123511,123514,123517,123524,123538,123541,123601,123604,123618,123630,123633,123636,123639,123703,123706,123709,123712,123732,123735,123740,123747,123751,123754,123758,123763,123768,123772,123775,123778,123820,123825,123828,123850,123865,123867,123872,123884,123944,123946,123948,124002,124004,124006,124012,124017,124020,124025,124029,124032,124094,124099,124102,124104,124108,124120,124202,124204,124206,124260,124266,124268,124272,124277,124279,124284,124288,124308,124343,124347,124350,124353,124356,124363,124366,124378,124381,124396,124399,124418,124466,124469,124486,124489,124503,124508,124511,124520,124535,124547,124585,124590,124599,124604,124609,124635,124644,124648,124652,124657,124660,124664,124668,124673,124676,124681,124684,124689,124692,124697,124700,124704,124709,124712,124717,124720,124724,124729,124732,124737,124740,124745,124748,124752,124757,124760,124765,124768,124773,124776,124780,124785,124788,124793,124796,124801,124804,124809,124812,124817,124820,124825,124828,124832,124837,124840,124845,124852,124856,124861,124864,124869,124872,124876,124881,124884,124887,124890,124893,124896,124900,124903,124913,124918,124923,124945,124950,124955,124962,124966,124971,124974,124977,124982,124985,124988,124991,124994,124997,125000,125003,125006,125009,125012,125015,125018,125023,125028,125033,125038,125043,125048,125053,125056,125060,125063,125067,125072,125077,125082,125087,125091,125097,125105,125110,125113,125118,125133,125136,125141,125175,125190,125193,125248,125274,125286,125289,125298,125301,125316,125321,125324,125330,125335,125338,125343,125346,125351,125356,125363,125366,125381,125384,125419,125424,125432,125470,125473,125476,125481,125484,125489,125500,125534,125539,125542,125551,125556,125562,125565,125570,125579,125584,125587,125590,125595,125603,125606,125611,125616],[10,122349,122345],{"id":122350},"_7-其他操作",[14,122352,122354],{"id":122353},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[24,122356,122357],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[24,122359,122360,122361,122364],{},"进入工控机的硬盘目录，进入",[94,122362,122363],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[87,122366,122370],{"className":122367,"code":122368,"language":122369,"meta":92,"style":92},"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",[94,122371,122372,122380,122391,122398,122405,122417,122424,122436,122447,122458,122465,122472,122479,122491,122503,122510,122522,122534,122541,122553,122565,122577,122588,122595,122606],{"__ignoreMap":92},[97,122373,122374,122377],{"class":99,"line":100},[97,122375,122376],{"class":107},"network",[97,122378,122379],{"class":103},": \n",[97,122381,122382,122385,122387,122389],{"class":99,"line":195},[97,122383,122384],{"class":107},"  version",[97,122386,51621],{"class":103},[97,122388,398],{"class":370},[97,122390,2865],{"class":103},[97,122392,122393,122396],{"class":99,"line":241},[97,122394,122395],{"class":107},"  wifis",[97,122397,122379],{"class":103},[97,122399,122400,122403],{"class":99,"line":1387},[97,122401,122402],{"class":107},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[97,122404,122379],{"class":103},[97,122406,122407,122410,122412,122415],{"class":99,"line":1393},[97,122408,122409],{"class":107},"      renderer",[97,122411,51621],{"class":103},[97,122413,122414],{"class":118},"NetworkManager",[97,122416,2865],{"class":103},[97,122418,122419,122422],{"class":99,"line":1407},[97,122420,122421],{"class":107},"      match",[97,122423,122379],{"class":103},[97,122425,122426,122429,122431,122434],{"class":99,"line":1413},[97,122427,122428],{"class":107},"        name",[97,122430,51621],{"class":103},[97,122432,122433],{"class":118},"\"wlan0\"",[97,122435,2865],{"class":103},[97,122437,122438,122441,122443,122445],{"class":99,"line":1504},[97,122439,122440],{"class":107},"      dhcp4",[97,122442,51621],{"class":103},[97,122444,1555],{"class":370},[97,122446,2865],{"class":103},[97,122448,122449,122452,122454,122456],{"class":99,"line":1510},[97,122450,122451],{"class":107},"      dhcp6",[97,122453,51621],{"class":103},[97,122455,1555],{"class":370},[97,122457,2865],{"class":103},[97,122459,122460,122463],{"class":99,"line":1522},[97,122461,122462],{"class":107},"      access-points",[97,122464,122379],{"class":103},[97,122466,122467,122470],{"class":99,"line":1804},[97,122468,122469],{"class":118},"        \"EMIS_Vinci_Robocon_5G\"",[97,122471,122379],{"class":103},[97,122473,122474,122477],{"class":99,"line":1809},[97,122475,122476],{"class":107},"          auth",[97,122478,122379],{"class":103},[97,122480,122481,122484,122486,122489],{"class":99,"line":1815},[97,122482,122483],{"class":107},"            key-management",[97,122485,51621],{"class":103},[97,122487,122488],{"class":118},"\"psk\"",[97,122490,2865],{"class":103},[97,122492,122493,122496,122498,122501],{"class":99,"line":1820},[97,122494,122495],{"class":107},"            password",[97,122497,51621],{"class":103},[97,122499,122500],{"class":118},"\"vinci666\"",[97,122502,2865],{"class":103},[97,122504,122505,122508],{"class":99,"line":1834},[97,122506,122507],{"class":107},"          networkmanager",[97,122509,122379],{"class":103},[97,122511,122512,122515,122517,122520],{"class":99,"line":1839},[97,122513,122514],{"class":107},"            uuid",[97,122516,51621],{"class":103},[97,122518,122519],{"class":118},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[97,122521,2865],{"class":103},[97,122523,122524,122527,122529,122532],{"class":99,"line":1845},[97,122525,122526],{"class":107},"            name",[97,122528,51621],{"class":103},[97,122530,122531],{"class":118},"\"EMIS_Vinci_Robocon_5G\"",[97,122533,2865],{"class":103},[97,122535,122536,122539],{"class":99,"line":1866},[97,122537,122538],{"class":107},"            passthrough",[97,122540,122379],{"class":103},[97,122542,122543,122546,122548,122551],{"class":99,"line":1871},[97,122544,122545],{"class":107},"              wifi-security.auth-alg",[97,122547,51621],{"class":103},[97,122549,122550],{"class":118},"\"open\"",[97,122552,2865],{"class":103},[97,122554,122555,122558,122560,122563],{"class":99,"line":1885},[97,122556,122557],{"class":107},"              ipv6.addr-gen-mode",[97,122559,51621],{"class":103},[97,122561,122562],{"class":118},"\"default\"",[97,122564,2865],{"class":103},[97,122566,122567,122570,122572,122575],{"class":99,"line":1890},[97,122568,122569],{"class":107},"              ipv6.ip6-privacy",[97,122571,51621],{"class":103},[97,122573,122574],{"class":118},"\"-1\"",[97,122576,2865],{"class":103},[97,122578,122579,122582,122584,122586],{"class":99,"line":1919},[97,122580,122581],{"class":107},"              proxy._",[97,122583,51621],{"class":103},[97,122585,7843],{"class":118},[97,122587,2865],{"class":103},[97,122589,122590,122593],{"class":99,"line":1924},[97,122591,122592],{"class":107},"      networkmanager",[97,122594,122379],{"class":103},[97,122596,122597,122600,122602,122604],{"class":99,"line":1941},[97,122598,122599],{"class":107},"        uuid",[97,122601,51621],{"class":103},[97,122603,122519],{"class":118},[97,122605,2865],{"class":103},[97,122607,122608,122610,122612],{"class":99,"line":1946},[97,122609,122428],{"class":107},[97,122611,51621],{"class":103},[97,122613,122614],{"class":118},"\"EMIS_Vinci_Robocon_5G\"\n",[24,122616,122617],{},"将其改为新wifi的名和密码：",[87,122619,122621],{"className":122367,"code":122620,"language":122369,"meta":92,"style":92},"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",[94,122622,122623,122629,122638,122644,122651,122660,122668,122674,122680],{"__ignoreMap":92},[97,122624,122625,122627],{"class":99,"line":100},[97,122626,122376],{"class":107},[97,122628,3930],{"class":103},[97,122630,122631,122633,122635],{"class":99,"line":195},[97,122632,122384],{"class":107},[97,122634,51621],{"class":103},[97,122636,122637],{"class":370},"2\n",[97,122639,122640,122642],{"class":99,"line":241},[97,122641,122395],{"class":107},[97,122643,3930],{"class":103},[97,122645,122646,122649],{"class":99,"line":1387},[97,122647,122648],{"class":107},"    wlan0",[97,122650,3930],{"class":103},[97,122652,122653,122655,122657],{"class":99,"line":1393},[97,122654,122440],{"class":107},[97,122656,51621],{"class":103},[97,122658,122659],{"class":370},"true\n",[97,122661,122662,122664,122666],{"class":99,"line":1407},[97,122663,122451],{"class":107},[97,122665,51621],{"class":103},[97,122667,122659],{"class":370},[97,122669,122670,122672],{"class":99,"line":1413},[97,122671,122462],{"class":107},[97,122673,3930],{"class":103},[97,122675,122676,122678],{"class":99,"line":1504},[97,122677,122469],{"class":118},[97,122679,3930],{"class":103},[97,122681,122682,122685,122687],{"class":99,"line":1510},[97,122683,122684],{"class":107},"          password",[97,122686,51621],{"class":103},[97,122688,122689],{"class":118},"\"vinci666\"\n",[24,122691,122692],{},"工控机开机即可连上网。",[14,122694,122696],{"id":122695},"_72-ssh远程开发","7.2 SSH远程开发",[48,122698,122700],{"id":122699},"_721-环境准备","7.2.1 环境准备",[24,122702,122703],{},[469,122704,122705],{},"1.硬件准备",[24,122707,122708],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[24,122710,122711],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[24,122713,122714],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[24,122716,122717],{},[469,122718,122719],{},"2.设置固定IP",[24,122721,122722],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[24,122724,122725],{},"1.进入设置界面",[24,122727,122728],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[24,122730,122731],{},[19,122732],{"alt":92,"src":122733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[24,122735,122736],{},"2.配置所连接的网络",[24,122738,122739],{},[19,122740],{"alt":92,"src":122741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[24,122743,122744],{},"3.设置固定IP",[24,122746,122747],{},"查看当前IP地址。",[24,122749,122750],{},[19,122751],{"alt":92,"src":122752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[24,122754,122755],{},"设置固定IP。",[24,122757,122758],{},[19,122759],{"alt":92,"src":122760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[24,122762,122763],{},"至此，IP配置完毕。",[48,122765,122767],{"id":122766},"_722-环境搭建","7.2.2 环境搭建",[24,122769,122770],{},[469,122771,25943],{},[24,122773,122774],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[24,122776,122777],{},[469,122778,122779],{},"实现",[24,122781,122782],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[138,122784,122785,122788,122791,122794],{},[70,122786,122787],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[70,122789,122790],{},"远程主机启动SSH服务；",[70,122792,122793],{},"本地主机登陆远程主机；",[70,122795,122796],{},"实现数据传输。",[24,122798,122799],{},"1.安装SSH客户端与服务端",[24,122801,122802],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[87,122804,122806],{"className":121000,"code":122805,"language":121002,"meta":121003,"style":92}," sudo apt install openssh-server\n",[94,122807,122808],{"__ignoreMap":92},[97,122809,122810],{"class":99,"line":100},[97,122811,122805],{},[24,122813,122814],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[87,122816,122818],{"className":121000,"code":122817,"language":121002,"meta":121003,"style":92},"sudo apt install openssh-client\n",[94,122819,122820],{"__ignoreMap":92},[97,122821,122822],{"class":99,"line":100},[97,122823,122817],{},[24,122825,122826],{},"2.远程主机启动SSH服务",[24,122828,122829],{},"远程主机启动 ssh 服务命令如下：",[87,122831,122833],{"className":121000,"code":122832,"language":121002,"meta":121003,"style":92},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[94,122834,122835],{"__ignoreMap":92},[97,122836,122837],{"class":99,"line":100},[97,122838,122832],{},[24,122840,122841],{},"启动后可使用如下命令查看服务是否正常运行：",[87,122843,122845],{"className":121000,"code":122844,"language":121002,"meta":121003,"style":92},"ps -e | grep ssh\n",[94,122846,122847],{"__ignoreMap":92},[97,122848,122849],{"class":99,"line":100},[97,122850,122844],{},[24,122852,122853],{},"如果启动成功，会包含 sshd 程序。",[24,122855,122856],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[87,122858,122860],{"className":121000,"code":122859,"language":121002,"meta":121003,"style":92},"sudo systemctl enable ssh\n",[94,122861,122862],{"__ignoreMap":92},[97,122863,122864],{"class":99,"line":100},[97,122865,122859],{},[24,122867,122868],{},"3.本地远程登录",[24,122870,122871],{},"登录远程主机可以调用如下命令:",[87,122873,122875],{"className":117480,"code":122874,"language":117482,"meta":92,"style":92},"ssh -X 用户名@ip地址\n",[94,122876,122877],{"__ignoreMap":92},[97,122878,122879,122881,122884],{"class":99,"line":100},[97,122880,121831],{"class":111},[97,122882,122883],{"class":370}," -X",[97,122885,122886],{"class":118}," 用户名@ip地址\n",[24,122888,122889],{},"然后根据提示，录入登陆密码，即可成功登录。",[24,122891,122892],{},"如果退出，可以调用exit命令：",[87,122894,122896],{"className":121000,"code":122895,"language":121002,"meta":121003,"style":92},"exit\n",[94,122897,122898],{"__ignoreMap":92},[97,122899,122900],{"class":99,"line":100},[97,122901,122895],{},[24,122903,122904],{},[469,122905,122906],{},"4.实现数据传输",[24,122908,122909],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[24,122911,122912],{},"上传文件指令格式如下：",[87,122914,122916],{"className":121000,"code":122915,"language":121002,"meta":121003,"style":92},"scp 本地文件路径 账号@ip:路径\n",[94,122917,122918],{"__ignoreMap":92},[97,122919,122920],{"class":99,"line":100},[97,122921,122915],{},[24,122923,122924],{},"上传文件夹指令格式如下：",[87,122926,122928],{"className":121000,"code":122927,"language":121002,"meta":121003,"style":92},"scp -r 本地文件夹路径 账号@ip:路径\n",[94,122929,122930],{"__ignoreMap":92},[97,122931,122932],{"class":99,"line":100},[97,122933,122927],{},[24,122935,122936],{},"下载文件指令格式如下：",[87,122938,122940],{"className":121000,"code":122939,"language":121002,"meta":121003,"style":92},"scp 账号@ip:路径 本地文件夹路径\n",[94,122941,122942],{"__ignoreMap":92},[97,122943,122944],{"class":99,"line":100},[97,122945,122939],{},[24,122947,122948],{},"下载文件夹指令格式如下：",[87,122950,122952],{"className":121000,"code":122951,"language":121002,"meta":121003,"style":92},"scp -r 账号@ip:路径 本地文件夹路径\n",[94,122953,122954],{"__ignoreMap":92},[97,122955,122956],{"class":99,"line":100},[97,122957,122951],{},[24,122959,122960],{},[469,122961,122962],{},"优化",[24,122964,122965],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[138,122967,122968,122971],{},[70,122969,122970],{},"本地生成密钥对；",[70,122972,122973],{},"将公钥上传至远程主机。",[24,122975,122976],{},[469,122977,122978],{},"1.生成密钥对",[24,122980,122981],{},"本地客户端生成公私钥：（一路回车默认即可）",[87,122983,122985],{"className":121000,"code":122984,"language":121002,"meta":121003,"style":92},"ssh-keygen\n",[94,122986,122987],{"__ignoreMap":92},[97,122988,122989],{"class":99,"line":100},[97,122990,122984],{},[24,122992,122993],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[138,122995,122996,122999],{},[70,122997,122998],{},"id_rsa （私钥）；",[70,123000,123001],{},"id_rsa.pub (公钥)。",[24,123003,123004],{},[469,123005,123006],{},"2.公钥上传",[24,123008,123009],{},"上传指令如下：",[87,123011,123013],{"className":121000,"code":123012,"language":121002,"meta":121003,"style":92},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[94,123014,123015],{"__ignoreMap":92},[97,123016,123017],{"class":99,"line":100},[97,123018,123012],{},[24,123020,123021],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[24,123023,123024],{},"以后再远程登录就无需录入密码了。",[48,123026,123028],{"id":123027},"_723-使用vscode优化","7.2.3 使用VScode优化",[24,123030,123031],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[24,123033,123034],{},[469,123035,123036],{},"1.准备工作",[24,123038,123039],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[24,123041,123042],{},[469,123043,123044],{},"2.为VScode安装远程开发插件",[24,123046,123047,123048,123051,123052,123055,123056,28575],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[94,123049,123050],{},"扩展：商店","的搜索栏输入",[94,123053,123054],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[94,123057,123058],{},"安装",[24,123060,123061],{},[19,123062],{"alt":92,"src":123063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[24,123065,123066],{},[469,123067,123068],{},"3.配置远程连接",[24,123070,123071,123072,123075,123076,123079],{},"步骤1：使用快捷键",[94,123073,123074],{},"ctrl + shift + p","打开命令输入窗口，并输入",[94,123077,123078],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[24,123081,123082],{},[19,123083],{"alt":92,"src":123084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[24,123086,123087,123088,28575],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[94,123089,123090],{},"Add New SSH Host",[24,123092,123093],{},[19,123094],{"alt":92,"src":123095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[24,123097,123098,123099,123102,123103,123106,123107,123110],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[94,123100,123101],{},"ssh +X ubuntu@192.168.43.164","，其中，",[94,123104,123105],{},"ubuntu","需要替换为你的登录用户名，",[94,123108,123109],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[24,123112,123113],{},[19,123114],{"alt":92,"src":123115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[24,123117,123118],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[24,123120,123121],{},[19,123122],{"alt":92,"src":123123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[24,123125,123126],{},[19,123127],{"alt":92,"src":123128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[24,123130,123131],{},[469,123132,123133],{},"4.使用",[24,123135,123136,123137,123075,123139,123141],{},"步骤1：继续使用快捷键",[94,123138,123074],{},[94,123140,123078],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[24,123143,123144],{},[19,123145],{"alt":92,"src":123146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[24,123148,123149,123150,123153],{},"或者，也可以点击侧边栏的",[94,123151,123152],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[24,123155,123156],{},[19,123157],{"alt":92,"src":123158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[24,123160,123161,123162,123165,123166,123169],{},"步骤2：选择菜单栏的",[94,123163,123164],{},"文件","下的",[94,123167,123168],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[24,123171,123172],{},[19,123173],{"alt":92,"src":123174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[24,123176,123177],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123179,123181],{"id":123180},"_73-远程桌面","7.3 远程桌面",[24,123183,123184],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[24,123186,123187],{},"我们选择使用VNC来看。",[138,123189,123190],{},[70,123191,123192],{},"安装VNC服务器：",[24,123194,123195],{},"这里以TigerVNC为例进行安装：",[87,123197,123199],{"className":117480,"code":123198,"language":117482,"meta":92,"style":92},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[94,123200,123201],{"__ignoreMap":92},[97,123202,123203,123205,123207,123209,123212],{"class":99,"line":100},[97,123204,24766],{"class":111},[97,123206,117501],{"class":118},[97,123208,24023],{"class":118},[97,123210,123211],{"class":118}," tigervnc-standalone-server",[97,123213,123214],{"class":118}," tigervnc-common\n",[138,123216,123217],{"start":195},[70,123218,123219],{},"设置VNC密码：",[24,123221,123222],{},"为VNC用户设置密码，运行以下命令：",[87,123224,123226],{"className":117480,"code":123225,"language":117482,"meta":92,"style":92},"vncpasswd\n",[94,123227,123228],{"__ignoreMap":92},[97,123229,123230],{"class":99,"line":100},[97,123231,123225],{"class":111},[138,123233,123234],{"start":241},[70,123235,123236],{},"配置VNC启动脚本:",[24,123238,123239],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[87,123241,123243],{"className":117480,"code":123242,"language":117482,"meta":92,"style":92},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[94,123244,123245,123254],{"__ignoreMap":92},[97,123246,123247,123249,123251],{"class":99,"line":100},[97,123248,101450],{"class":111},[97,123250,29406],{"class":370},[97,123252,123253],{"class":118}," ~\u002F.vnc\n",[97,123255,123256,123259],{"class":99,"line":195},[97,123257,123258],{"class":111},"nano",[97,123260,123261],{"class":118}," ~\u002F.vnc\u002Fxstartup\n",[24,123263,123264],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[87,123266,123268],{"className":117480,"code":123267,"language":117482,"meta":92,"style":92},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[94,123269,123270,123275,123283,123290],{"__ignoreMap":92},[97,123271,123272],{"class":99,"line":100},[97,123273,123274],{"class":191},"#!\u002Fbin\u002Fsh\n",[97,123276,123277,123280],{"class":99,"line":195},[97,123278,123279],{"class":370},"unset",[97,123281,123282],{"class":118}," SESSION_MANAGER\n",[97,123284,123285,123287],{"class":99,"line":241},[97,123286,123279],{"class":370},[97,123288,123289],{"class":118}," DBUS_SESSION_BUS_ADDRESS\n",[97,123291,123292],{"class":99,"line":1387},[97,123293,123294],{"class":111},"gnome-session\n",[24,123296,123297],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[138,123299,123300],{"start":1387},[70,123301,123302],{},"给予执行权限：",[24,123304,123305],{},"为xstartup文件设置执行权限：",[87,123307,123309],{"className":117480,"code":123308,"language":117482,"meta":92,"style":92},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[94,123310,123311],{"__ignoreMap":92},[97,123312,123313,123315,123318],{"class":99,"line":100},[97,123314,24801],{"class":111},[97,123316,123317],{"class":118}," +x",[97,123319,123261],{"class":118},[138,123321,123322],{"start":1393},[70,123323,123324],{},"启动VNC服务器：",[87,123326,123328],{"className":117480,"code":123327,"language":117482,"meta":92,"style":92},"vncserver -geometry 1920x1080 -localhost=0\n",[94,123329,123330],{"__ignoreMap":92},[97,123331,123332,123335,123338,123341],{"class":99,"line":100},[97,123333,123334],{"class":111},"vncserver",[97,123336,123337],{"class":370}," -geometry",[97,123339,123340],{"class":118}," 1920x1080",[97,123342,123343],{"class":370}," -localhost=0\n",[24,123345,123346],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[24,123348,123349],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[138,123351,123352],{"start":1407},[70,123353,123354],{},"查看已开启的VNC服务器：",[87,123356,123358],{"className":117480,"code":123357,"language":117482,"meta":92,"style":92},"vncserver -list\n",[94,123359,123360],{"__ignoreMap":92},[97,123361,123362,123364],{"class":99,"line":100},[97,123363,123334],{"class":111},[97,123365,123366],{"class":370}," -list\n",[24,123368,123369],{},[19,123370],{"alt":92,"src":123371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[138,123373,123374],{"start":1413},[70,123375,123376],{},"连接到VNC服务器：",[24,123378,123379],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[138,123381,123382],{"start":1504},[70,123383,123384],{},"停止VNC服务器：",[24,123386,123387],{},"如果需要停止VNC服务器，可以使用以下命令：",[87,123389,123391],{"className":117480,"code":123390,"language":117482,"meta":92,"style":92},"vncserver -kill :1\n",[94,123392,123393],{"__ignoreMap":92},[97,123394,123395,123397,123400],{"class":99,"line":100},[97,123396,123334],{"class":111},[97,123398,123399],{"class":370}," -kill",[97,123401,123402],{"class":118}," :1\n",[24,123404,123405],{},"将:1替换为你实际使用的显示编号。",[24,123407,123408],{},[19,123409],{"alt":92,"src":123410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[24,123412,123413],{},[19,123414],{"alt":92,"src":123415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123417,123419],{"id":123418},"_74-usb端口设置","7.4 USB端口设置",[24,123421,123422],{},[469,123423,123424],{},"首先先配置好权限",[87,123426,123428],{"className":117480,"code":123427,"language":117482,"meta":92,"style":92},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[94,123429,123430,123435,123448,123455,123460],{"__ignoreMap":92},[97,123431,123432],{"class":99,"line":100},[97,123433,123434],{"class":191},"# 将用户权限提高\n",[97,123436,123437,123439,123441,123443,123446],{"class":99,"line":195},[97,123438,24766],{"class":111},[97,123440,26764],{"class":118},[97,123442,26767],{"class":370},[97,123444,123445],{"class":118}," dialout",[97,123447,26772],{"class":103},[97,123449,123450,123452],{"class":99,"line":241},[97,123451,26791],{"class":111},[97,123453,123454],{"class":118}," dialout\n",[97,123456,123457],{"class":99,"line":1387},[97,123458,123459],{"class":191},"# 查看下面命令是否输出dialout（若输出才正常）\n",[97,123461,123462],{"class":99,"line":1393},[97,123463,123464],{"class":111},"groups\n",[24,123466,123467],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[48,123469,123471],{"id":123470},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[24,123473,123474,123477],{},[469,123475,123476],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[24,123479,123480,123483],{},[469,123481,123482],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[24,123485,123486],{},[469,123487,123488],{},"流程如下：",[24,123490,123491],{},"（1）.查找设备idVendor和idProduct",[24,123493,123494,123495,123498],{},"接入两个USB设备，在终端调用指令",[94,123496,123497],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[24,123500,123501],{},[19,123502],{"alt":92,"src":123503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[24,123505,123506,123507,123510],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[94,123508,123509],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[24,123512,123513],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[24,123515,123516],{},"（2）.编写映射规则",[24,123518,123519,123520,123523],{},"在",[94,123521,123522],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[87,123525,123527],{"className":117480,"code":123526,"language":117482,"meta":92,"style":92},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[94,123528,123529],{"__ignoreMap":92},[97,123530,123531,123533,123535],{"class":99,"line":100},[97,123532,24766],{"class":111},[97,123534,118767],{"class":118},[97,123536,123537],{"class":118}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[24,123539,123540],{},"输入如下内容：",[87,123542,123544],{"className":117480,"code":123543,"language":117482,"meta":92,"style":92},"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",[94,123545,123546,123576],{"__ignoreMap":92},[97,123547,123548,123551,123553,123556,123559,123562,123565,123567,123570,123573],{"class":99,"line":100},[97,123549,123550],{"class":103},"KERNEL",[97,123552,115],{"class":319},[97,123554,123555],{"class":118},"=\"ttyUSB*\",",[97,123557,123558],{"class":111}," ATTRS",[97,123560,123561],{"class":118},"{idVendor}==",[97,123563,123564],{"class":111},"\"10c4\"",[97,123566,698],{"class":111},[97,123568,123569],{"class":118}," ATTRS{idProduct}==\"ea60\",",[97,123571,123572],{"class":118}," MODE:=\"0777\",",[97,123574,123575],{"class":118}," SYMLINK+=\"mylidar\"\n",[97,123577,123578,123580,123582,123584,123586,123588,123591,123593,123596,123598],{"class":99,"line":195},[97,123579,123550],{"class":103},[97,123581,115],{"class":319},[97,123583,123555],{"class":118},[97,123585,123558],{"class":111},[97,123587,123561],{"class":118},[97,123589,123590],{"class":111},"\"1a86\"",[97,123592,698],{"class":111},[97,123594,123595],{"class":118}," ATTRS{idProduct}==\"7523\",",[97,123597,123572],{"class":118},[97,123599,123600],{"class":118}," SYMLINK+=\"mycar\"\n",[24,123602,123603],{},"代码解释：",[67,123605,123606,123609,123612,123615],{},[70,123607,123608],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[70,123610,123611],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[70,123613,123614],{},"SYMLINK是符号连接，即绑定的别名；",[70,123616,123617],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[24,123619,123620,123621,123624,123627],{},"***小提示：***",[23742,123622,123623],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[94,123625,123626],{},"\u002Fetc\u002Fudev\u002Frule.d",[23742,123628,123629],{},"目录即可。",[24,123631,123632],{},"表格 还在加载中，请等待加载完成后再尝试复制",[24,123634,123635],{},"（3）.使规则生效",[24,123637,123638],{},"在终端下输入如下指令：",[87,123640,123642],{"className":117480,"code":123641,"language":117482,"meta":92,"style":92},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[94,123643,123644,123649,123661,123672,123676,123681,123694],{"__ignoreMap":92},[97,123645,123646],{"class":99,"line":100},[97,123647,123648],{"class":191},"# Ubuntu用下方命令\n",[97,123650,123651,123653,123655,123658],{"class":99,"line":195},[97,123652,24766],{"class":111},[97,123654,120232],{"class":118},[97,123656,123657],{"class":118}," udev",[97,123659,123660],{"class":118}," reload\n",[97,123662,123663,123665,123667,123669],{"class":99,"line":241},[97,123664,24766],{"class":111},[97,123666,120232],{"class":118},[97,123668,123657],{"class":118},[97,123670,123671],{"class":118}," restart\n",[97,123673,123674],{"class":99,"line":1387},[97,123675,2591],{"emptyLinePlaceholder":249},[97,123677,123678],{"class":99,"line":1393},[97,123679,123680],{"class":191},"#Fedora用下方命令\n",[97,123682,123683,123685,123688,123691],{"class":99,"line":1407},[97,123684,24766],{"class":111},[97,123686,123687],{"class":118}," udevadm",[97,123689,123690],{"class":118}," control",[97,123692,123693],{"class":370}," --reload\n",[97,123695,123696,123698,123700],{"class":99,"line":1413},[97,123697,24766],{"class":111},[97,123699,123687],{"class":118},[97,123701,123702],{"class":118}," trigger\n",[24,123704,123705],{},"再重新插拔设备即可。",[24,123707,123708],{},"（4）.测试",[24,123710,123711],{},"终端下输入如下指令",[87,123713,123715],{"className":117480,"code":123714,"language":117482,"meta":92,"style":92},"ll \u002Fdev | grep ttyUSB\n",[94,123716,123717],{"__ignoreMap":92},[97,123718,123719,123722,123725,123727,123729],{"class":99,"line":100},[97,123720,123721],{"class":111},"ll",[97,123723,123724],{"class":118}," \u002Fdev",[97,123726,25299],{"class":319},[97,123728,30426],{"class":111},[97,123730,123731],{"class":118}," ttyUSB\n",[24,123733,123734],{},"运行结果如下：",[24,123736,123737],{},[19,123738],{"alt":92,"src":123739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[24,123741,123742,123743,123746],{},"也可以多次插拔USB设备，会发现设备端口",[94,123744,123745],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[24,123748,123749],{},[469,123750,118148],{},[24,123752,123753],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[48,123755,123757],{"id":123756},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[24,123759,123760,123762],{},[469,123761,123476],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[24,123764,123765,123767],{},[469,123766,123482],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[24,123769,123770],{},[469,123771,123488],{},[24,123773,123774],{},"（1）.查看所连接的主机USB接口的KERNELS",[24,123776,123777],{},"调用如下指令查看第一台雷达的USB信息：",[87,123779,123781],{"className":117480,"code":123780,"language":117482,"meta":92,"style":92},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[94,123782,123783,123803],{"__ignoreMap":92},[97,123784,123785,123788,123790,123793,123796,123798,123800],{"class":99,"line":100},[97,123786,123787],{"class":111},"udevadm",[97,123789,70005],{"class":118},[97,123791,123792],{"class":370}," --attribute-walk",[97,123794,123795],{"class":370}," --name=\u002Fdev\u002FttyUSB0",[97,123797,25299],{"class":319},[97,123799,30426],{"class":111},[97,123801,123802],{"class":118}," KERNELS\n",[97,123804,123805,123807,123809,123811,123814,123816,123818],{"class":99,"line":195},[97,123806,123787],{"class":111},[97,123808,70005],{"class":118},[97,123810,123792],{"class":370},[97,123812,123813],{"class":370}," --name=\u002Fdev\u002FttyACM0",[97,123815,25299],{"class":319},[97,123817,30426],{"class":111},[97,123819,123802],{"class":118},[24,123821,123822],{},[19,123823],{"alt":92,"src":123824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[24,123826,123827],{},"调用如下指令查看第二台雷达的USB信息：",[87,123829,123831],{"className":117480,"code":123830,"language":117482,"meta":92,"style":92},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[94,123832,123833],{"__ignoreMap":92},[97,123834,123835,123837,123839,123841,123844,123846,123848],{"class":99,"line":100},[97,123836,123787],{"class":111},[97,123838,70005],{"class":118},[97,123840,123792],{"class":370},[97,123842,123843],{"class":370}," --name=\u002Fdev\u002FttyUSB1",[97,123845,25299],{"class":319},[97,123847,30426],{"class":111},[97,123849,123802],{"class":118},[24,123851,123852,123853,123856,123857,123860,123861,123864],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[94,123854,123855],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[94,123858,123859],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[469,123862,123863],{},"唯一性标识","”。",[24,123866,123516],{},[24,123868,123519,123869,123871],{},[94,123870,123522],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[87,123873,123874],{"className":117480,"code":123526,"language":117482,"meta":92,"style":92},[94,123875,123876],{"__ignoreMap":92},[97,123877,123878,123880,123882],{"class":99,"line":100},[97,123879,24766],{"class":111},[97,123881,118767],{"class":118},[97,123883,123537],{"class":118},[87,123885,123887],{"className":117480,"code":123886,"language":117482,"meta":92,"style":92},"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",[94,123888,123889,123918],{"__ignoreMap":92},[97,123890,123891,123893,123895,123897,123900,123902,123905,123908,123910,123913,123915],{"class":99,"line":100},[97,123892,123550],{"class":103},[97,123894,115],{"class":319},[97,123896,123555],{"class":118},[97,123898,123899],{"class":103}," KERNELS",[97,123901,115],{"class":319},[97,123903,123904],{"class":118},"=\"1-1.3:1.0\",",[97,123906,123907],{"class":111}," MODE:",[97,123909,115],{"class":118},[97,123911,123912],{"class":111},"\"0777\"",[97,123914,698],{"class":111},[97,123916,123917],{"class":118}," SYMLINK+=\"rplidar_front\"\n",[97,123919,123920,123922,123924,123926,123928,123930,123933,123935,123937,123939,123941],{"class":99,"line":195},[97,123921,123550],{"class":103},[97,123923,115],{"class":319},[97,123925,123555],{"class":118},[97,123927,123899],{"class":103},[97,123929,115],{"class":319},[97,123931,123932],{"class":118},"=\"1-1.4:1.0\",",[97,123934,123907],{"class":111},[97,123936,115],{"class":118},[97,123938,123912],{"class":111},[97,123940,698],{"class":111},[97,123942,123943],{"class":118}," SYMLINK+=\"rplidar_back\"\n",[24,123945,123635],{},[24,123947,123638],{},[87,123949,123950],{"className":117480,"code":123641,"language":117482,"meta":92,"style":92},[94,123951,123952,123956,123966,123976,123980,123984,123994],{"__ignoreMap":92},[97,123953,123954],{"class":99,"line":100},[97,123955,123648],{"class":191},[97,123957,123958,123960,123962,123964],{"class":99,"line":195},[97,123959,24766],{"class":111},[97,123961,120232],{"class":118},[97,123963,123657],{"class":118},[97,123965,123660],{"class":118},[97,123967,123968,123970,123972,123974],{"class":99,"line":241},[97,123969,24766],{"class":111},[97,123971,120232],{"class":118},[97,123973,123657],{"class":118},[97,123975,123671],{"class":118},[97,123977,123978],{"class":99,"line":1387},[97,123979,2591],{"emptyLinePlaceholder":249},[97,123981,123982],{"class":99,"line":1393},[97,123983,123680],{"class":191},[97,123985,123986,123988,123990,123992],{"class":99,"line":1407},[97,123987,24766],{"class":111},[97,123989,123687],{"class":118},[97,123991,123690],{"class":118},[97,123993,123693],{"class":370},[97,123995,123996,123998,124000],{"class":99,"line":1413},[97,123997,24766],{"class":111},[97,123999,123687],{"class":118},[97,124001,123702],{"class":118},[24,124003,123705],{},[24,124005,123708],{},[24,124007,123711,124008,124011],{},[94,124009,124010],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[24,124013,124014],{},[19,124015],{"alt":92,"src":124016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[24,124018,124019],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[24,124021,124022,124024],{},[469,124023,118148],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[48,124026,124028],{"id":124027},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[24,124030,124031],{},"（1）.查看所连接的主机USB接口的信息",[87,124033,124035],{"className":117480,"code":124034,"language":117482,"meta":92,"style":92},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[94,124036,124037,124067],{"__ignoreMap":92},[97,124038,124039,124041,124043,124046,124048,124050,124052,124054,124057,124060,124062,124065],{"class":99,"line":100},[97,124040,123787],{"class":111},[97,124042,70005],{"class":118},[97,124044,124045],{"class":370}," -a",[97,124047,29406],{"class":370},[97,124049,28612],{"class":103},[97,124051,123787],{"class":111},[97,124053,70005],{"class":118},[97,124055,124056],{"class":370}," -q",[97,124058,124059],{"class":118}," path",[97,124061,25305],{"class":370},[97,124063,124064],{"class":118}," \u002Fdev\u002FttyACM0",[97,124066,329],{"class":103},[97,124068,124069,124071,124073,124075,124077,124079,124081,124083,124085,124087,124089,124092],{"class":99,"line":195},[97,124070,123787],{"class":111},[97,124072,70005],{"class":118},[97,124074,124045],{"class":370},[97,124076,29406],{"class":370},[97,124078,28612],{"class":103},[97,124080,123787],{"class":111},[97,124082,70005],{"class":118},[97,124084,124056],{"class":370},[97,124086,124059],{"class":118},[97,124088,25305],{"class":370},[97,124090,124091],{"class":118}," \u002Fdev\u002FttyUSB0",[97,124093,329],{"class":103},[24,124095,124096],{},[19,124097],{"alt":92,"src":124098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[24,124100,124101],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[24,124103,123516],{},[24,124105,123519,124106,123871],{},[94,124107,123522],{},[87,124109,124110],{"className":117480,"code":123526,"language":117482,"meta":92,"style":92},[94,124111,124112],{"__ignoreMap":92},[97,124113,124114,124116,124118],{"class":99,"line":100},[97,124115,24766],{"class":111},[97,124117,118767],{"class":118},[97,124119,123537],{"class":118},[87,124121,124123],{"className":117480,"code":124122,"language":117482,"meta":92,"style":92},"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",[94,124124,124125,124153,124179],{"__ignoreMap":92},[97,124126,124127,124129,124131,124134,124136,124138,124140,124142,124145,124148,124150],{"class":99,"line":100},[97,124128,123550],{"class":103},[97,124130,115],{"class":319},[97,124132,124133],{"class":118},"=\"ttyACM*\",",[97,124135,123558],{"class":111},[97,124137,123561],{"class":118},[97,124139,123590],{"class":111},[97,124141,698],{"class":111},[97,124143,124144],{"class":118}," ATTRS{idProduct}==\"55d4\",",[97,124146,124147],{"class":118}," ATTRS{serial}==\"0001\",",[97,124149,123572],{"class":118},[97,124151,124152],{"class":118}," SYMLINK+=\"ttyACM_MCU\"\n",[97,124154,124155,124157,124159,124161,124163,124165,124167,124169,124171,124174,124176],{"class":99,"line":195},[97,124156,123550],{"class":103},[97,124158,115],{"class":319},[97,124160,124133],{"class":118},[97,124162,123558],{"class":111},[97,124164,123561],{"class":118},[97,124166,123590],{"class":111},[97,124168,698],{"class":111},[97,124170,124144],{"class":118},[97,124172,124173],{"class":118}," ATTRS{serial}==\"0002\",",[97,124175,123572],{"class":118},[97,124177,124178],{"class":118}," SYMLINK+=\"ttyACM_Lidar\"\n",[97,124180,124181,124183,124185,124187,124189,124191,124193,124195,124197,124199],{"class":99,"line":241},[97,124182,123550],{"class":103},[97,124184,115],{"class":319},[97,124186,123555],{"class":118},[97,124188,123558],{"class":111},[97,124190,123561],{"class":118},[97,124192,123590],{"class":111},[97,124194,698],{"class":111},[97,124196,123595],{"class":118},[97,124198,123572],{"class":118},[97,124200,124201],{"class":118}," SYMLINK+=\"ttyUSB_IMU\"\n",[24,124203,123635],{},[24,124205,123638],{},[87,124207,124208],{"className":117480,"code":123641,"language":117482,"meta":92,"style":92},[94,124209,124210,124214,124224,124234,124238,124242,124252],{"__ignoreMap":92},[97,124211,124212],{"class":99,"line":100},[97,124213,123648],{"class":191},[97,124215,124216,124218,124220,124222],{"class":99,"line":195},[97,124217,24766],{"class":111},[97,124219,120232],{"class":118},[97,124221,123657],{"class":118},[97,124223,123660],{"class":118},[97,124225,124226,124228,124230,124232],{"class":99,"line":241},[97,124227,24766],{"class":111},[97,124229,120232],{"class":118},[97,124231,123657],{"class":118},[97,124233,123671],{"class":118},[97,124235,124236],{"class":99,"line":1387},[97,124237,2591],{"emptyLinePlaceholder":249},[97,124239,124240],{"class":99,"line":1393},[97,124241,123680],{"class":191},[97,124243,124244,124246,124248,124250],{"class":99,"line":1407},[97,124245,24766],{"class":111},[97,124247,123687],{"class":118},[97,124249,123690],{"class":118},[97,124251,123693],{"class":370},[97,124253,124254,124256,124258],{"class":99,"line":1413},[97,124255,24766],{"class":111},[97,124257,123687],{"class":118},[97,124259,123702],{"class":118},[24,124261,124262,124263],{},"再重新插拔设备即可，或者 ",[469,124264,124265],{},"直接重启系统。",[24,124267,123708],{},[24,124269,123711,124270,124011],{},[94,124271,124010],{},[24,124273,124274],{},[19,124275],{"alt":92,"src":124276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[24,124278,124019],{},[24,124280,124281,124283],{},[469,124282,118148],{}," 一些设备可能没有串口号等。",[48,124285,124287],{"id":124286},"_744-其他注意事项","7.4.4 其他注意事项",[24,124289,124290,124291,124293,124294,124297,124298,18600,124301,124304,124305,124307],{},"并非所有的USB设备端口号都是",[94,124292,123745],{},"的格式，比如Arduino的端口号可能是",[94,124295,124296],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[94,124299,124300],{},"videon",[94,124302,124303],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[94,124306,124300],{},"端口，绑定时需要关联的也是该接口。",[24,124309,124310,124311,124314,124315,124318,124319,124321,124322,124325,124326,124329,124330,124333,124334,124333,124337,124333,124340,28575],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[94,124312,124313],{},"KERNEL==\"ttyUSB*\"","修改为",[94,124316,124317],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[94,124320,124313],{},"修改为类似于",[94,124323,124324],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[94,124327,124328],{},"video[0,2,4,6]","表示可以绑定的端口为",[94,124331,124332],{},"video0","或",[94,124335,124336],{},"video2",[94,124338,124339],{},"video4",[94,124341,124342],{},"video6",[14,124344,124346],{"id":124345},"_75-挂载内网网页","7.5 挂载内网网页",[24,124348,124349],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[24,124351,124352],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[24,124354,124355],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[24,124357,124358,124359],{},"Termux 下载地址（F-Droid）：",[558,124360,124361],{"href":124361,"rel":124362},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24054],[24,124364,124365],{},"首先打开app后，先更新软件缓存：",[87,124367,124369],{"className":117480,"code":124368,"language":117482,"meta":92,"style":92},"pkg update\n",[94,124370,124371],{"__ignoreMap":92},[97,124372,124373,124376],{"class":99,"line":100},[97,124374,124375],{"class":111},"pkg",[97,124377,26432],{"class":118},[24,124379,124380],{},"然后换源",[87,124382,124384],{"className":117480,"code":124383,"language":117482,"meta":92,"style":92},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[94,124385,124386],{"__ignoreMap":92},[97,124387,124388,124390,124393],{"class":99,"line":100},[97,124389,123258],{"class":111},[97,124391,124392],{"class":103}," $PREFIX",[97,124394,124395],{"class":118},"\u002Fetc\u002Fapt\u002Fsources.list\n",[24,124397,124398],{},"将该文件内容替换为下面：",[87,124400,124402],{"className":117480,"code":124401,"language":117482,"meta":92,"style":92},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[94,124403,124404],{"__ignoreMap":92},[97,124405,124406,124409,124412,124415],{"class":99,"line":100},[97,124407,124408],{"class":111},"deb",[97,124410,124411],{"class":118}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[97,124413,124414],{"class":118}," stable",[97,124416,124417],{"class":118}," main\n",[67,124419,124420,124447],{},[70,124421,124422,124423,124425,124426],{},"如果你使用的是",[94,124424,123258],{},"编辑器：",[67,124427,124428,124435,124441],{},[70,124429,124430,124431,124434],{},"按 ",[94,124432,124433],{},"Ctrl+O"," 保存文件。",[70,124436,124430,124437,124440],{},[94,124438,124439],{},"Enter"," 确认文件名。",[70,124442,124430,124443,124446],{},[94,124444,124445],{},"Ctrl+X"," 退出编辑器。",[70,124448,124422,124449,124425,124452],{},[94,124450,124451],{},"vim",[67,124453,124454,124460],{},[70,124455,124430,124456,124459],{},[94,124457,124458],{},"Esc"," 退出编辑模式。",[70,124461,124462,124463,124465],{},"输入 ",[94,124464,119405],{}," 保存并退出。",[24,124467,124468],{},"接下来重新更新软件源：",[87,124470,124472],{"className":117480,"code":124471,"language":117482,"meta":92,"style":92},"pkg update && pkg upgrade\n",[94,124473,124474],{"__ignoreMap":92},[97,124475,124476,124478,124480,124482,124484],{"class":99,"line":100},[97,124477,124375],{"class":111},[97,124479,117531],{"class":118},[97,124481,26380],{"class":103},[97,124483,124375],{"class":111},[97,124485,117517],{"class":118},[24,124487,124488],{},"安装python：",[87,124490,124492],{"className":117480,"code":124491,"language":117482,"meta":92,"style":92},"pkg install python\n",[94,124493,124494],{"__ignoreMap":92},[97,124495,124496,124498,124500],{"class":99,"line":100},[97,124497,124375],{"class":111},[97,124499,24023],{"class":118},[97,124501,124502],{"class":118}," python\n",[24,124504,124505,26663],{},[469,124506,124507],{},"通过Termux访问设备存储",[24,124509,124510],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[87,124512,124514],{"className":117480,"code":124513,"language":117482,"meta":92,"style":92},"termux-setup-storage\n",[94,124515,124516],{"__ignoreMap":92},[97,124517,124518],{"class":99,"line":100},[97,124519,124513],{"class":111},[138,124521,124522],{},[70,124523,124524,26663,124527],{},[469,124525,124526],{},"进入HTML文件所在的目录",[138,124528,124529],{},[70,124530,124531,124532,124534],{},"使用",[94,124533,101460],{},"命令进入HTML文件所在的目录：",[87,124536,124538],{"className":117480,"code":124537,"language":117482,"meta":92,"style":92},"cd ~\u002Fyour_html_folder\n",[94,124539,124540],{"__ignoreMap":92},[97,124541,124542,124544],{"class":99,"line":100},[97,124543,101460],{"class":370},[97,124545,124546],{"class":118}," ~\u002Fyour_html_folder\n",[138,124548,124549],{"start":195},[70,124550,124551,26663,124554,124559,124576],{},[469,124552,124553],{},"启动Python HTTP服务器",[138,124555,124556],{},[70,124557,124558],{},"运行以下命令启动一个简单的HTTP服务器：",[87,124560,124562],{"className":117480,"code":124561,"language":117482,"meta":92,"style":92},"python -m http.server 8000\n",[94,124563,124564],{"__ignoreMap":92},[97,124565,124566,124568,124570,124573],{"class":99,"line":100},[97,124567,30570],{"class":111},[97,124569,101066],{"class":370},[97,124571,124572],{"class":118}," http.server",[97,124574,124575],{"class":370}," 8000\n",[138,124577,124578],{"start":241},[70,124579,124580,124581,124584],{},"这会在端口",[94,124582,124583],{},"8000","上启动一个Web服务器。",[67,124586,124587],{},[70,124588,124589],{},"启动服务器后，Termux会显示日志信息，例如：",[87,124591,124593],{"className":121000,"code":124592,"language":121002,"meta":121003,"style":92},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[94,124594,124595],{"__ignoreMap":92},[97,124596,124597],{"class":99,"line":100},[97,124598,124592],{},[67,124600,124601],{},[70,124602,124603],{},"这表示服务器已成功启动。",[24,124605,124606],{},[469,124607,124608],{},"在浏览器中访问HTML文件",[138,124610,124611],{},[70,124612,124613,26663,124616,124621],{},[469,124614,124615],{},"在同一设备上访问",[138,124617,124618],{},[70,124619,124620],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[87,124622,124625],{"className":124623,"code":124624,"language":71848,"meta":92,"style":92},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[94,124626,124627],{"__ignoreMap":92},[97,124628,124629,124632],{"class":99,"line":100},[97,124630,124631],{"class":103},"http:",[97,124633,124634],{"class":191},"\u002F\u002Flocalhost:8000\n",[67,124636,124637],{},[70,124638,124639,124640,124643],{},"如果HTML文件中有",[94,124641,124642],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124645,124647],{"id":124646},"_76-linux重点知识","7.6 Linux重点知识",[48,124649,124651],{"id":124650},"_761-关于点的说明","7.6.1 关于点的说明",[24,124653,124654],{},[19,124655],{"alt":92,"src":124656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[24,124658,124659],{},"一点本目录，两点上目录",[48,124661,124663],{"id":124662},"_762-目录","7.6.2 目录",[160,124665,124667],{"id":124666},"_7621-系统启动必须","7.6.2.1 系统启动必须",[24,124669,124670],{},[469,124671,124672],{},"\u002Fboot:",[24,124674,124675],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[24,124677,124678],{},[469,124679,124680],{},"\u002Fetc:",[24,124682,124683],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[24,124685,124686],{},[469,124687,124688],{},"\u002Flib：",[24,124690,124691],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[24,124693,124694],{},[469,124695,124696],{},"\u002Fsys:",[24,124698,124699],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[160,124701,124703],{"id":124702},"_7622-指令集合","7.6.2.2 指令集合",[24,124705,124706],{},[469,124707,124708],{},"\u002Fbin:",[24,124710,124711],{},"为二进制文件的缩写，存放最经常使用的命令",[24,124713,124714],{},[469,124715,124716],{},"\u002Fsbin:",[24,124718,124719],{},"只有系统管理员才能使用的程序和指令",[160,124721,124723],{"id":124722},"_7623-外部文件管理","7.6.2.3 外部文件管理",[24,124725,124726],{},[469,124727,124728],{},"\u002Fdev:",[24,124730,124731],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[24,124733,124734],{},[469,124735,124736],{},"\u002Fmedia:",[24,124738,124739],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[24,124741,124742],{},[469,124743,124744],{},"\u002Fmnt:",[24,124746,124747],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[160,124749,124751],{"id":124750},"_7624-临时文件","7.6.2.4 临时文件",[24,124753,124754],{},[469,124755,124756],{},"\u002Frun:",[24,124758,124759],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[24,124761,124762],{},[469,124763,124764],{},"\u002Flost+found:",[24,124766,124767],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[24,124769,124770],{},[469,124771,124772],{},"\u002Ftmp:",[24,124774,124775],{},"这个目录是用来存放一些临时文件的",[160,124777,124779],{"id":124778},"_7625-账户","7.6.2.5 账户",[24,124781,124782],{},[469,124783,124784],{},"\u002Froot：",[24,124786,124787],{},"系统管理员的用户主目录",[24,124789,124790,26663],{},[469,124791,124792],{},"\u002Fhome",[24,124794,124795],{},"用户的主目录，以用户的账号命名的",[24,124797,124798,26663],{},[469,124799,124800],{},"\u002Fusr",[24,124802,124803],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[24,124805,124806],{},[469,124807,124808],{},"\u002Fusr\u002Fbin：",[24,124810,124811],{},"系统用户使用的应用程序与指令",[24,124813,124814],{},[469,124815,124816],{},"\u002Fusr\u002Fsbin：",[24,124818,124819],{},"超级用户使用的比较高级的管理程序和系统守护程序",[24,124821,124822],{},[469,124823,124824],{},"\u002Fusr\u002Fsrc：",[24,124826,124827],{},"内核源代码默认的放置目录",[160,124829,124831],{"id":124830},"_7626-运行过程要用","7.6.2.6 运行过程要用",[24,124833,124834],{},[469,124835,124836],{},"\u002Fvar：",[24,124838,124839],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[24,124841,124842],{},[469,124843,124844],{},"\u002Fproc:",[24,124846,124847,124848,124851],{},"管理 ",[469,124849,124850],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[160,124853,124855],{"id":124854},"_7627-扩展用的","7.6.2.7 扩展用的",[24,124857,124858],{},[469,124859,124860],{},"\u002Fopt:",[24,124862,124863],{},"默认是空的，我们安装额外软件可以放在这个里面",[24,124865,124866],{},[469,124867,124868],{},"\u002Fsrv:",[24,124870,124871],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[48,124873,124875],{"id":124874},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[24,124877,124878],{},[19,124879],{"alt":92,"src":124880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[24,124882,124883],{},"windows-->linux:",[24,124885,124886],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[24,124888,124889],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[24,124891,124892],{},"linux传输文件到windows",[24,124894,124895],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[48,124897,124899],{"id":124898},"_764-易忘知识","7.6.4 易忘知识",[24,124901,124902],{},"操作系统内核查看",[87,124904,124905],{"className":117480,"code":121474,"language":117482,"meta":92,"style":92},[94,124906,124907],{"__ignoreMap":92},[97,124908,124909,124911],{"class":99,"line":100},[97,124910,70388],{"class":111},[97,124912,121483],{"class":370},[24,124914,124915],{},[19,124916],{"alt":92,"src":124917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[24,124919,124920],{},[19,124921],{"alt":92,"src":124922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[87,124924,124926],{"className":117480,"code":124925,"language":117482,"meta":92,"style":92},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[94,124927,124928,124940],{"__ignoreMap":92},[97,124929,124930,124932,124935,124938],{"class":99,"line":100},[97,124931,121691],{"class":111},[97,124933,124934],{"class":118}," mvtest",[97,124936,124937],{"class":118}," mvtest2",[97,124939,2865],{"class":103},[97,124941,124942],{"class":99,"line":195},[97,124943,124944],{"class":111},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[24,124946,124947],{},[19,124948],{"alt":92,"src":124949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[24,124951,124952],{},[19,124953],{"alt":92,"src":124954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[24,124956,124957,124958,124961],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[94,124959,124960],{},"du -a"," 可以快速查看磁盘使用细节。",[48,124963,124965],{"id":124964},"_765-vim","7.6.5 Vim",[24,124967,124968],{},[19,124969],{"alt":92,"src":124970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[24,124972,124973],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[24,124975,124976],{},"一开始进去为命令模式，此时点击输入的字母为命令",[24,124978,124979],{},[469,124980,124981],{},"1.命令模式：",[24,124983,124984],{},"i 切换到输入模式，在光标当前位置开始输入文本",[24,124986,124987],{},"x 删除当前光标所在处的字符",[24,124989,124990],{},"：切换到底线命令模式，以在最底一行输入命令",[24,124992,124993],{},"a 进行插入模式，在光标下一个位置输入文本",[24,124995,124996],{},"o 在当前的下方插入一个新行，并进入插入模式",[24,124998,124999],{},"0 在当前行的上方插入一个新行，并进入插入模式",[24,125001,125002],{},"dd 剪切当前行",[24,125004,125005],{},"yy 复制当前行",[24,125007,125008],{},"p 粘贴剪贴板内容到光标下方",[24,125010,125011],{},"P 粘贴剪贴板内容到光标上方",[24,125013,125014],{},"u 撤销上一次操作",[24,125016,125017],{},"ctrl+r 重做上一次操作",[24,125019,125020,125022],{},[1115,125021],{}," 保存文件",[24,125024,125025,125027],{},[965,125026],{}," 退出Vim编辑器",[24,125029,125030,125032],{},[965,125031],{},"! 强制退出Vim编辑器，不保存修改",[24,125034,125035],{},[469,125036,125037],{},"2.输入模式：",[24,125039,125040],{},[19,125041],{"alt":92,"src":125042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[24,125044,125045],{},[469,125046,125047],{},"3.底线命令模式：",[24,125049,125050],{},[19,125051],{"alt":92,"src":125052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[24,125054,125055],{},"按下esc可以退出底线命令模式",[48,125057,125059],{"id":125058},"_766-apt","7.6.6 apt",[24,125061,125062],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[48,125064,125066],{"id":125065},"_767-home与root的区别","7.6.7 home与root的区别",[24,125068,125069],{},[19,125070],{"alt":92,"src":125071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[24,125073,125074],{},[19,125075],{"alt":92,"src":125076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[24,125078,125079],{},[19,125080],{"alt":92,"src":125081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[24,125083,125084],{},[19,125085],{"alt":92,"src":125086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[48,125088,125090],{"id":125089},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[24,125092,125093],{},[558,125094,125095],{"href":125095,"rel":125096},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24054],[138,125098,125099,125102],{},[70,125100,125101],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[70,125103,125104],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[24,125106,125107],{},[19,125108],{"alt":92,"src":125109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[24,125111,125112],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[24,125114,125115],{},[19,125116],{"alt":92,"src":125117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[87,125119,125121],{"className":121000,"code":125120,"language":121002,"meta":121003,"style":92},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[94,125122,125123,125128],{"__ignoreMap":92},[97,125124,125125],{"class":99,"line":100},[97,125126,125127],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[97,125129,125130],{"class":99,"line":195},[97,125131,125132],{},".\u002Fpycharm.sh\n",[24,125134,125135],{},"3️⃣创建.desktop文件",[24,125137,125138],{},[469,125139,125140],{},"原理：",[67,125142,125143,125153],{},[70,125144,125145,125146,125152],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[469,125147,125148,125151],{},[94,125149,125150],{},".desktop"," 文件"," 来识别应用。",[70,125154,125155,125157,125158],{},[94,125156,125150],{}," 文件相当于一个“应用注册表”，告诉系统：",[67,125159,125160,125163,125166,125169,125172],{},[70,125161,125162],{},"应用名字（Name）",[70,125164,125165],{},"图标（Icon）",[70,125167,125168],{},"执行命令（Exec）",[70,125170,125171],{},"分类（Categories）",[70,125173,125174],{},"是否需要终端（Terminal）",[87,125176,125178],{"className":121000,"code":125177,"language":121002,"meta":121003,"style":92},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[94,125179,125180,125185],{"__ignoreMap":92},[97,125181,125182],{"class":99,"line":100},[97,125183,125184],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[97,125186,125187],{"class":99,"line":195},[97,125188,125189],{},"nano pycharm.desktop\n",[24,125191,125192],{},"nano是一个命令行下的编辑器，也可以使用vim",[87,125194,125196],{"className":121000,"code":125195,"language":121002,"meta":121003,"style":92},"[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",[94,125197,125198,125203,125208,125213,125218,125223,125228,125233,125238,125243],{"__ignoreMap":92},[97,125199,125200],{"class":99,"line":100},[97,125201,125202],{},"[Desktop Entry]\n",[97,125204,125205],{"class":99,"line":195},[97,125206,125207],{},"Version=1.0\n",[97,125209,125210],{"class":99,"line":241},[97,125211,125212],{},"Type=Application\n",[97,125214,125215],{"class":99,"line":1387},[97,125216,125217],{},"Name=PyCharm\n",[97,125219,125220],{"class":99,"line":1393},[97,125221,125222],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[97,125224,125225],{"class":99,"line":1407},[97,125226,125227],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[97,125229,125230],{"class":99,"line":1413},[97,125231,125232],{},"Comment=JetBrains PyCharm IDE\n",[97,125234,125235],{"class":99,"line":1504},[97,125236,125237],{},"Categories=Development;IDE;\n",[97,125239,125240],{"class":99,"line":1510},[97,125241,125242],{},"Terminal=false\n",[97,125244,125245],{"class":99,"line":1522},[97,125246,125247],{},"StartupWMClass=jetbrains-pycharm\n",[67,125249,125250,125256,125262,125268],{},[70,125251,125252,125255],{},[94,125253,125254],{},"Exec"," → 点击图标时执行的命令",[70,125257,125258,125261],{},[94,125259,125260],{},"Icon"," → 显示在菜单和桌面上的图标",[70,125263,125264,125267],{},[94,125265,125266],{},"Terminal=false"," → 不打开终端",[70,125269,125270,125273],{},[94,125271,125272],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125275,125276,125277],"blockquote",{},[24,125278,125279,125280,125282,125283],{},"可以理解成 ",[94,125281,125150],{}," 文件是 Linux 的 ",[469,125284,125285],{},"快捷方式配置文件",[24,125287,125288],{},"4️⃣设置可执行权限",[87,125290,125292],{"className":121000,"code":125291,"language":121002,"meta":121003,"style":92},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[94,125293,125294],{"__ignoreMap":92},[97,125295,125296],{"class":99,"line":100},[97,125297,125291],{},[24,125299,125300],{},"5️⃣桌面图标启动的话如下：",[87,125302,125304],{"className":121000,"code":125303,"language":121002,"meta":121003,"style":92},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[94,125305,125306,125311],{"__ignoreMap":92},[97,125307,125308],{"class":99,"line":100},[97,125309,125310],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[97,125312,125313],{"class":99,"line":195},[97,125314,125315],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[138,125317,125318],{"start":241},[70,125319,125320],{},"下载Appimage文件实现软件的安装",[24,125322,125323],{},"1️⃣先下载appimage",[24,125325,125326],{},[558,125327,125328],{"href":125328,"rel":125329},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24054],[24,125331,125332],{},[19,125333],{"alt":92,"src":125334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[24,125336,125337],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[24,125339,125340],{},[19,125341],{"alt":92,"src":125342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[24,125344,125345],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[24,125347,125348],{},[19,125349],{"alt":92,"src":125350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[24,125352,125353],{},[19,125354],{"alt":92,"src":125355},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[24,125357,125358,125359,125362],{},"3️⃣给他们放在",[94,125360,125361],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[24,125364,125365],{},"4️⃣给软件执行权限",[87,125367,125369],{"className":121000,"code":125368,"language":121002,"meta":121003,"style":92},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[94,125370,125371,125376],{"__ignoreMap":92},[97,125372,125373],{"class":99,"line":100},[97,125374,125375],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[97,125377,125378],{"class":99,"line":195},[97,125379,125380],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[24,125382,125383],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[87,125385,125387],{"className":117480,"code":125386,"language":117482,"meta":92,"style":92},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[94,125388,125389,125396,125403,125409],{"__ignoreMap":92},[97,125390,125391,125393],{"class":99,"line":100},[97,125392,101460],{"class":370},[97,125394,125395],{"class":118}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[97,125397,125398,125400],{"class":99,"line":195},[97,125399,101467],{"class":111},[97,125401,125402],{"class":118}," .\u002Fqqmusic.desktop\n",[97,125404,125405,125407],{"class":99,"line":241},[97,125406,124451],{"class":111},[97,125408,125402],{"class":118},[97,125410,125411,125413,125415,125417],{"class":99,"line":1387},[97,125412,24766],{"class":111},[97,125414,24769],{"class":118},[97,125416,123317],{"class":118},[97,125418,125402],{"class":118},[24,125420,125421,125423],{},[94,125422,101467],{},"：一个 Linux 命令，主要功能是：",[67,125425,125426,125429],{},[70,125427,125428],{},"如果文件不存在，就创建一个新的空文件",[70,125430,125431],{},"如果文件已存在，就更新该文件的最后修改时间",[87,125433,125435],{"className":121000,"code":125434,"language":121002,"meta":121003,"style":92},"[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",[94,125436,125437,125441,125446,125451,125456,125460,125465],{"__ignoreMap":92},[97,125438,125439],{"class":99,"line":100},[97,125440,125202],{},[97,125442,125443],{"class":99,"line":195},[97,125444,125445],{},"Name=QQ音乐\n",[97,125447,125448],{"class":99,"line":241},[97,125449,125450],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[97,125452,125453],{"class":99,"line":1387},[97,125454,125455],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[97,125457,125458],{"class":99,"line":1393},[97,125459,125212],{},[97,125461,125462],{"class":99,"line":1407},[97,125463,125464],{},"Categories=Audio;Music;Player;\n",[97,125466,125467],{"class":99,"line":1413},[97,125468,125469],{},"Comment=QQ Music Client for Linux\n",[24,125471,125472],{},"将文件复制进去",[24,125474,125475],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[24,125477,125478],{},[19,125479],{"alt":92,"src":125480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[24,125482,125483],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[24,125485,125486],{},[19,125487],{"alt":92,"src":125488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[24,125490,125491,125492,125495,125496,125499],{},"如果你用的不是KDE，那么也可以直接修改",[94,125493,125494],{},"qqmuic.desktop","：在exec的末尾加上",[94,125497,125498],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[87,125501,125503],{"className":121000,"code":125502,"language":121002,"meta":121003,"style":92},"[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",[94,125504,125505,125509,125513,125518,125522,125526,125530],{"__ignoreMap":92},[97,125506,125507],{"class":99,"line":100},[97,125508,125202],{},[97,125510,125511],{"class":99,"line":195},[97,125512,125445],{},[97,125514,125515],{"class":99,"line":241},[97,125516,125517],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[97,125519,125520],{"class":99,"line":1387},[97,125521,125455],{},[97,125523,125524],{"class":99,"line":1393},[97,125525,125212],{},[97,125527,125528],{"class":99,"line":1407},[97,125529,125464],{},[97,125531,125532],{"class":99,"line":1413},[97,125533,125469],{},[24,125535,125536],{},[19,125537],{"alt":92,"src":125538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[24,125540,125541],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[87,125543,125545],{"className":121000,"code":125544,"language":121002,"meta":121003,"style":92},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[94,125546,125547],{"__ignoreMap":92},[97,125548,125549],{"class":99,"line":100},[97,125550,125544],{},[138,125552,125553],{"start":1387},[70,125554,125555],{},"去Flathub上安装软件",[24,125557,125558],{},[558,125559,125560],{"href":125560,"rel":125561},"https:\u002F\u002Fflathub.org\u002F",[24054],[24,125563,125564],{},"1️⃣去上面的官网搜索软件+下载软件",[24,125566,125567],{},[19,125568],{"alt":92,"src":125569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[87,125571,125573],{"className":121000,"code":125572,"language":121002,"meta":121003,"style":92},"flatpak install flathub com.obsproject.Studio\n",[94,125574,125575],{"__ignoreMap":92},[97,125576,125577],{"class":99,"line":100},[97,125578,125572],{},[24,125580,125581],{},[19,125582],{"alt":92,"src":125583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[24,125585,125586],{},"2️⃣运行软件",[24,125588,125589],{},"a.官方方式：",[24,125591,125592],{},[19,125593],{"alt":92,"src":125594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[87,125596,125597],{"className":121000,"code":125572,"language":121002,"meta":121003,"style":92},[94,125598,125599],{"__ignoreMap":92},[97,125600,125601],{"class":99,"line":100},[97,125602,125572],{},[24,125604,125605],{},"b.当普通软件运行：",[24,125607,125608],{},[19,125609],{"alt":92,"src":125610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[24,125612,125613],{},[19,125614],{"alt":92,"src":125615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[231,125617,125618],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":92,"searchDepth":195,"depth":195,"links":125620},[125621,125622,125627,125628,125634,125635],{"id":122353,"depth":195,"text":122354},{"id":122695,"depth":195,"text":122696,"children":125623},[125624,125625,125626],{"id":122699,"depth":241,"text":122700},{"id":122766,"depth":241,"text":122767},{"id":123027,"depth":241,"text":123028},{"id":123180,"depth":195,"text":123181},{"id":123418,"depth":195,"text":123419,"children":125629},[125630,125631,125632,125633],{"id":123470,"depth":241,"text":123471},{"id":123756,"depth":241,"text":123757},{"id":124027,"depth":241,"text":124028},{"id":124286,"depth":241,"text":124287},{"id":124345,"depth":195,"text":124346},{"id":124646,"depth":195,"text":124647,"children":125636},[125637,125638,125639,125640,125641,125642,125643,125644],{"id":124650,"depth":241,"text":124651},{"id":124662,"depth":241,"text":124663},{"id":124874,"depth":241,"text":124875},{"id":124898,"depth":241,"text":124899},{"id":124964,"depth":241,"text":124965},{"id":125058,"depth":241,"text":125059},{"id":125065,"depth":241,"text":125066},{"id":125089,"depth":241,"text":125090},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122345,"description":246},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125651,"title":125652,"body":125653,"description":246,"extension":247,"meta":125657,"navigation":249,"path":125658,"seo":125659,"stem":125660,"__hash__":125661},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125654,"toc":125655},[],{"title":92,"searchDepth":195,"depth":195,"links":125656},[],{"category":30453},"\u002Fwiki\u002F2025-01-27-linux",{"title":125652,"description":246},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125663,"title":125664,"body":125665,"description":125669,"extension":247,"meta":126060,"navigation":249,"path":126061,"seo":126062,"stem":126063,"__hash__":126064},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125666,"toc":126058},[125667,125670,125674,125691,125694,125747,125751,125753,125793,125802,125806,125809,126050,126055],[24,125668,125669],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125671,125673],{"id":125672},"_1ubuntu环境配置","1.Ubuntu环境配置",[138,125675,125676,125679,125682,125685,125688],{},[70,125677,125678],{},"ubuntu环境换源",[70,125680,125681],{},"安装cuda",[70,125683,125684],{},"安装miniconda",[70,125686,125687],{},"安装pytorch",[70,125689,125690],{},"安装genesis",[24,125692,125693],{},"参考链接：",[87,125695,125697],{"className":24011,"code":125696,"language":24013,"meta":92,"style":92},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[94,125698,125699],{"__ignoreMap":92},[97,125700,125701,125704,125707,125710,125712,125715,125718,125720,125723,125726,125728,125731,125734,125736,125739,125742,125744],{"class":99,"line":100},[97,125702,125703],{"class":111},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[97,125705,125706],{"class":118},"=blogdetail",[97,125708,125709],{"class":103},"&sharetype",[97,125711,115],{"class":319},[97,125713,125714],{"class":118},"blogdetail",[97,125716,125717],{"class":103},"&sharerId",[97,125719,115],{"class":319},[97,125721,125722],{"class":118},"144728092",[97,125724,125725],{"class":103},"&sharerefer",[97,125727,115],{"class":319},[97,125729,125730],{"class":118},"PC",[97,125732,125733],{"class":103},"&sharesource",[97,125735,115],{"class":319},[97,125737,125738],{"class":118},"qq_69379513",[97,125740,125741],{"class":103},"&sharefrom",[97,125743,115],{"class":319},[97,125745,125746],{"class":118},"from_link\n",[10,125748,125750],{"id":125749},"_2genesis-报错issue","2.Genesis 报错issue",[24,125752,125693],{},[87,125754,125755],{"className":24011,"code":125696,"language":24013,"meta":92,"style":92},[94,125756,125757],{"__ignoreMap":92},[97,125758,125759,125761,125763,125765,125767,125769,125771,125773,125775,125777,125779,125781,125783,125785,125787,125789,125791],{"class":99,"line":100},[97,125760,125703],{"class":111},[97,125762,125706],{"class":118},[97,125764,125709],{"class":103},[97,125766,115],{"class":319},[97,125768,125714],{"class":118},[97,125770,125717],{"class":103},[97,125772,115],{"class":319},[97,125774,125722],{"class":118},[97,125776,125725],{"class":103},[97,125778,115],{"class":319},[97,125780,125730],{"class":118},[97,125782,125733],{"class":103},[97,125784,115],{"class":319},[97,125786,125738],{"class":118},[97,125788,125741],{"class":103},[97,125790,115],{"class":319},[97,125792,125746],{"class":118},[87,125794,125796],{"className":24011,"code":125795,"language":24013,"meta":92,"style":92},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[94,125797,125798],{"__ignoreMap":92},[97,125799,125800],{"class":99,"line":100},[97,125801,125795],{"class":111},[10,125803,125805],{"id":125804},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[24,125807,125808],{},"hello_robot.py",[87,125810,125812],{"className":30568,"code":125811,"language":30570,"meta":92,"style":92},"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",[94,125813,125814,125820,125835,125839,125851,125863,125867,125880,125884,125903,125913,125923,125937,125941,125945,125950,125954,125964,125971,125985,125992,126002,126007,126011,126029,126034,126038,126045],{"__ignoreMap":92},[97,125815,125816,125818],{"class":99,"line":100},[97,125817,30582],{"class":319},[97,125819,45495],{"class":103},[97,125821,125822,125825,125828,125830,125832],{"class":99,"line":195},[97,125823,125824],{"class":103},"os.environ[",[97,125826,125827],{"class":118},"'PYOPENGL_PLATFORM'",[97,125829,4634],{"class":103},[97,125831,115],{"class":319},[97,125833,125834],{"class":118}," 'glx'\n",[97,125836,125837],{"class":99,"line":241},[97,125838,2591],{"emptyLinePlaceholder":249},[97,125840,125841,125843,125846,125848],{"class":99,"line":1387},[97,125842,30582],{"class":319},[97,125844,125845],{"class":103}," genesis ",[97,125847,31573],{"class":319},[97,125849,125850],{"class":103}," gs\n",[97,125852,125853,125855,125858,125860],{"class":99,"line":1393},[97,125854,30927],{"class":319},[97,125856,125857],{"class":103}," pynput ",[97,125859,30582],{"class":319},[97,125861,125862],{"class":103}," keyboard\n",[97,125864,125865],{"class":99,"line":1407},[97,125866,2591],{"emptyLinePlaceholder":249},[97,125868,125869,125872,125875,125877],{"class":99,"line":1413},[97,125870,125871],{"class":103},"gs.init(",[97,125873,125874],{"class":5407},"backend",[97,125876,115],{"class":319},[97,125878,125879],{"class":103},"gs.gpu)\n",[97,125881,125882],{"class":99,"line":1504},[97,125883,2591],{"emptyLinePlaceholder":249},[97,125885,125886,125889,125891,125894,125897,125899,125901],{"class":99,"line":1510},[97,125887,125888],{"class":103},"scene ",[97,125890,115],{"class":319},[97,125892,125893],{"class":103}," gs.Scene(",[97,125895,125896],{"class":5407},"show_viewer",[97,125898,115],{"class":319},[97,125900,31666],{"class":370},[97,125902,329],{"class":103},[97,125904,125905,125908,125910],{"class":99,"line":1522},[97,125906,125907],{"class":103},"plane ",[97,125909,115],{"class":319},[97,125911,125912],{"class":103}," scene.add_entity(gs.morphs.Plane())\n",[97,125914,125915,125918,125920],{"class":99,"line":1804},[97,125916,125917],{"class":103},"franka ",[97,125919,115],{"class":319},[97,125921,125922],{"class":103}," scene.add_entity(\n",[97,125924,125925,125928,125930,125932,125935],{"class":99,"line":1809},[97,125926,125927],{"class":103},"    gs.morphs.MJCF(",[97,125929,45544],{"class":5407},[97,125931,115],{"class":319},[97,125933,125934],{"class":118},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[97,125936,38237],{"class":103},[97,125938,125939],{"class":99,"line":1815},[97,125940,329],{"class":103},[97,125942,125943],{"class":99,"line":1820},[97,125944,2591],{"emptyLinePlaceholder":249},[97,125946,125947],{"class":99,"line":1834},[97,125948,125949],{"class":103},"scene.build()\n",[97,125951,125952],{"class":99,"line":1839},[97,125953,2591],{"emptyLinePlaceholder":249},[97,125955,125956,125958,125961],{"class":99,"line":1845},[97,125957,32137],{"class":319},[97,125959,125960],{"class":111}," on_press",[97,125962,125963],{"class":103},"(key):\n",[97,125965,125966,125969],{"class":99,"line":1866},[97,125967,125968],{"class":319},"    try",[97,125970,3930],{"class":103},[97,125972,125973,125975,125978,125980,125983],{"class":99,"line":1871},[97,125974,2688],{"class":319},[97,125976,125977],{"class":103}," key.char ",[97,125979,3140],{"class":319},[97,125981,125982],{"class":118}," 'q'",[97,125984,3930],{"class":103},[97,125986,125987,125989],{"class":99,"line":1885},[97,125988,15922],{"class":319},[97,125990,125991],{"class":370}," False\n",[97,125993,125994,125997,126000],{"class":99,"line":1890},[97,125995,125996],{"class":319},"    except",[97,125998,125999],{"class":370}," AttributeError",[97,126001,3930],{"class":103},[97,126003,126004],{"class":99,"line":1919},[97,126005,126006],{"class":319},"        pass\n",[97,126008,126009],{"class":99,"line":1924},[97,126010,2591],{"emptyLinePlaceholder":249},[97,126012,126013,126016,126018,126021,126024,126026],{"class":99,"line":1941},[97,126014,126015],{"class":103},"listener ",[97,126017,115],{"class":319},[97,126019,126020],{"class":103}," keyboard.Listener(",[97,126022,126023],{"class":5407},"on_press",[97,126025,115],{"class":319},[97,126027,126028],{"class":103},"on_press)\n",[97,126030,126031],{"class":99,"line":1946},[97,126032,126033],{"class":103},"listener.start()\n",[97,126035,126036],{"class":99,"line":1951},[97,126037,2591],{"emptyLinePlaceholder":249},[97,126039,126040,126042],{"class":99,"line":1956},[97,126041,108847],{"class":319},[97,126043,126044],{"class":103}," listener.running:\n",[97,126046,126047],{"class":99,"line":1970},[97,126048,126049],{"class":103},"    scene.step()\n",[24,126051,126052],{},[19,126053],{"alt":92,"src":126054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[231,126056,126057],{},"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":92,"searchDepth":195,"depth":195,"links":126059},[],{"category":23567},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125664,"description":125669},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126066,"title":126067,"body":126068,"description":246,"extension":247,"meta":126083,"navigation":249,"path":126084,"seo":126085,"stem":126086,"__hash__":126087},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126069,"toc":126080},[126070,126073,126077],[10,126071,126067],{"id":126072},"_1-基础知识",[14,126074,126076],{"id":126075},"_11-js的组成","1.1 js的组成",[24,126078,126079],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":92,"searchDepth":195,"depth":195,"links":126081},[126082],{"id":126075,"depth":195,"text":126076},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126067,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126089,"title":126090,"body":126091,"description":246,"extension":247,"meta":126230,"navigation":249,"path":126231,"seo":126232,"stem":126233,"__hash__":126234},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126092,"toc":126218},[126093,126096,126100,126103,126107,126117,126121,126124,126127,126130,126134,126141,126147,126151,126157,126168,126172,126175,126179,126182,126186,126189,126193,126196,126200,126203,126206,126209,126212,126215],[10,126094,126090],{"id":126095},"_2-vscode必备内容",[14,126097,126099],{"id":126098},"_21-标签分类","2.1 标签分类",[24,126101,126102],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126104,126106],{"id":126105},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[24,126108,126109,126110,126112,126113,126116],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[94,126111,546],{}," 然后按 ",[94,126114,126115],{},"Tab","，快速自动生成基本结构。",[14,126118,126120],{"id":126119},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[24,126122,126123],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[24,126125,126126],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[24,126128,126129],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126131,126133],{"id":126132},"_24-视图缩放","2.4 视图缩放",[24,126135,126136,126137,126140],{},"缩放视图 ",[94,126138,126139],{},"ctrl+"," 可实现代码增大。",[24,126142,126143,126146],{},[94,126144,126145],{},"ctrl-"," 可实现代码减小。",[14,126148,126150],{"id":126149},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[24,126152,126153,126154,28575],{},"VSCode 新建文件快捷键为 ",[94,126155,126156],{},"ctrl+N",[24,126158,126159,126160,126163,126164,126167],{},"保存快捷键为 ",[94,126161,126162],{},"ctrl+S","，将文本保存为 ",[94,126165,126166],{},".html"," 文件。",[14,126169,126171],{"id":126170},"_26-auto-rename-tag","2.6 Auto Rename Tag",[24,126173,126174],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126176,126178],{"id":126177},"_27-vscode-icons","2.7 vscode-icons",[24,126180,126181],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126183,126185],{"id":126184},"_28-easy-less","2.8 Easy LESS",[24,126187,126188],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126190,126192],{"id":126191},"_29-会了吧插件","2.9 会了吧插件",[24,126194,126195],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126197,126199],{"id":126198},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[24,126201,126202],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[24,126204,126205],{},"②选定多个相同的单词:ctrl+D",[24,126207,126208],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[24,126210,126211],{},"④全局替换某些单词:ctrl+h",[24,126213,126214],{},"⑤快速定位到某一行:ctrl+g",[24,126216,126217],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":92,"searchDepth":195,"depth":195,"links":126219},[126220,126221,126222,126223,126224,126225,126226,126227,126228,126229],{"id":126098,"depth":195,"text":126099},{"id":126105,"depth":195,"text":126106},{"id":126119,"depth":195,"text":126120},{"id":126132,"depth":195,"text":126133},{"id":126149,"depth":195,"text":126150},{"id":126170,"depth":195,"text":126171},{"id":126177,"depth":195,"text":126178},{"id":126184,"depth":195,"text":126185},{"id":126191,"depth":195,"text":126192},{"id":126198,"depth":195,"text":126199},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126090,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126236,"title":126237,"body":126238,"description":246,"extension":247,"meta":126397,"navigation":249,"path":126398,"seo":126399,"stem":126400,"__hash__":126401},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126239,"toc":126389},[126240,126243,126247,126257,126263,126269,126273,126282,126286,126291,126294,126297,126301,126304,126314,126323,126332,126341,126351,126358,126363,126368,126381],[10,126241,126237],{"id":126242},"_3-html文本与容器标签",[14,126244,126246],{"id":126245},"_31-标题标签","3.1 标题标签",[24,126248,126249,126252,126253,126256],{},[94,126250,126251],{},"\u003Ch1>","我是一级标签",[94,126254,126255],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[24,126258,126259,126252,126261],{},[94,126260,126251],{},[94,126262,126255],{},[24,126264,123519,126265,126268],{},[94,126266,126267],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126270,126272],{"id":126271},"_32-段落标签","3.2 段落标签",[24,126274,126275,126278,126279],{},[94,126276,126277],{},"\u003Cp>","....",[94,126280,126281],{},"\u003C\u002Fp>",[14,126283,126285],{"id":126284},"_33-换行标签","3.3 换行标签",[24,126287,126288],{},[94,126289,126290],{},"\u003Cbr \u002F>",[24,126292,126293],{},"具有强制换行的作用",[24,126295,126296],{},"单标签",[14,126298,126300],{"id":126299},"_34-文本格式化标签","3.4 文本格式化标签",[24,126302,126303],{},"提供粗体、斜体和下划线等效果",[24,126305,126306,126307,82723,126310,126313],{},"加粗：",[94,126308,126309],{},"\u003Cstrong>...\u003C\u002Fstrong>",[94,126311,126312],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[24,126315,126316,126317,82723,126320,126313],{},"斜体：",[94,126318,126319],{},"\u003Cem>...\u003C\u002Fem>",[94,126321,126322],{},"\u003Ci>...\u003C\u002Fi>",[24,126324,126325,126326,82723,126329,126313],{},"删除线：",[94,126327,126328],{},"\u003Cdel>...\u003C\u002Fdel>",[94,126330,126331],{},"\u003Cs>...\u003C\u002Fs>",[24,126333,126334,126335,82723,126338,126313],{},"下划线：",[94,126336,126337],{},"\u003Cins>...\u003C\u002Fins>",[94,126339,126340],{},"\u003Cu>...\u003C\u002Fu>",[14,126342,126344,126345,18600,126348,102877],{"id":126343},"_35-div和span标签","3.5 ",[94,126346,126347],{},"\u003Cdiv>",[94,126349,126350],{},"\u003Cspan>",[24,126352,126353,101202,126355,126357],{},[94,126354,126347],{},[94,126356,126350],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[24,126359,126360],{},[94,126361,126362],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[24,126364,126365],{},[94,126366,126367],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[24,126369,126370,126371,126373,126374,126376,126377,126380],{},"两者特点：①",[94,126372,126347],{}," 标签用来布局，但一行通常只放一个 ",[94,126375,126347],{},"。可以理解为一个大盒子，独占一行，在 ",[94,126378,126379],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[24,126382,77433,126383,126385,126386,126388],{},[94,126384,126350],{}," 标签也可用于布局，一行可以放多个 ",[94,126387,126350],{},"，可理解为小盒子。",{"title":92,"searchDepth":195,"depth":195,"links":126390},[126391,126392,126393,126394,126395],{"id":126245,"depth":195,"text":126246},{"id":126271,"depth":195,"text":126272},{"id":126284,"depth":195,"text":126285},{"id":126299,"depth":195,"text":126300},{"id":126343,"depth":195,"text":126396},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126237,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126403,"title":126404,"body":126405,"description":246,"extension":247,"meta":126601,"navigation":249,"path":126602,"seo":126603,"stem":126604,"__hash__":126605},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126406,"toc":126593},[126407,126410,126414,126417,126423,126430,126436,126442,126445,126448,126451,126454,126457,126460,126463,126467,126470,126473,126476,126482,126488,126494,126501,126505,126511,126517,126520,126523,126529,126535,126541,126544,126547,126551,126554,126564,126570,126574,126583,126587,126590],[10,126408,126404],{"id":126409},"_4-html图像与链接",[14,126411,126413],{"id":126412},"_41-图像标签","4.1 图像标签",[24,126415,126416],{},"（1）标签",[24,126418,126419,126422],{},[94,126420,126421],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[24,126424,126425,126426,126429],{},"src是",[94,126427,126428],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[24,126431,126432,126433],{},"alt:文本，替换文本。图像不能显示的文字 ",[94,126434,126435],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[24,126437,126438,126439],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[94,126440,126441],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[24,126443,126444],{},"width:像素，设置图像的宽度",[24,126446,126447],{},"height:像素，设置图像的高度",[24,126449,126450],{},"border：像素，设置图像的边框粗细",[24,126452,126453],{},"（2）图像标签属性的注意点：",[24,126455,126456],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[24,126458,126459],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[24,126461,126462],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126464,126466],{"id":126465},"_42-路径注意要点","4.2 路径注意要点：",[24,126468,126469],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[24,126471,126472],{},"（2）根目录：就是打开文件夹的第一层根目录",[24,126474,126475],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[24,126477,126478,126479],{},"①同一级路径：图像文件位于HTML文件同一级，如",[94,126480,126481],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[24,126483,126484,126485],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[94,126486,126487],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[24,126489,126490,126491],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[94,126492,126493],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[24,126495,126496,126497,571],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[558,126498,126499],{"href":126499,"rel":126500},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24054],[14,126502,126504],{"id":126503},"_43-超链接标签","4.3 超链接标签",[24,126506,126507,126510],{},[94,126508,126509],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[24,126512,126513,126514],{},"①语法格式：",[94,126515,126516],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[24,126518,126519],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[24,126521,126522],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[24,126524,126525,126526],{},"③链接分类：外部链接：",[94,126527,126528],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[24,126530,126531,126532],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[94,126533,126534],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[24,126536,126537,126538],{},"空链接：如果当时没有确定链接目标时，",[94,126539,126540],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[24,126542,126543],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[24,126545,126546],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126548,126550],{"id":126549},"_44-锚点链接","4.4 锚点链接",[24,126552,126553],{},"点我们点击链接，可以快速定位到页面中的某个位置",[24,126555,126556,126557,126560,126561],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[94,126558,126559],{},"\u003Ca href=\"#two\">","第二级",[94,126562,126563],{},"\u003C\u002Fa>",[24,126565,126566,126567],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[94,126568,126569],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126571,126573],{"id":126572},"_45-注释标签","4.5 注释标签",[24,126575,126576,126579,126580],{},[94,126577,126578],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[94,126581,126582],{},"ctrl+\u002F",[14,126584,126586],{"id":126585},"_46-特殊字符","4.6 特殊字符",[24,126588,126589],{},"可以实现添加多个空格",[19,126591],{"style":21,"src":126592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":92,"searchDepth":195,"depth":195,"links":126594},[126595,126596,126597,126598,126599,126600],{"id":126412,"depth":195,"text":126413},{"id":126465,"depth":195,"text":126466},{"id":126503,"depth":195,"text":126504},{"id":126549,"depth":195,"text":126550},{"id":126572,"depth":195,"text":126573},{"id":126585,"depth":195,"text":126586},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126404,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126607,"title":126608,"body":126609,"description":246,"extension":247,"meta":126900,"navigation":249,"path":126901,"seo":126902,"stem":126903,"__hash__":126904},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126610,"toc":126891},[126611,126614,126618,126621,126624,126627,126630,126633,126636,126639,126642,126645,126665,126671,126675,126678,126681,126684,126687,126690,126693,126697,126700,126703,126706,126709,126722,126727,126730,126733,126746,126749,126752,126755,126758,126761,126765,126768,126775,126778,126781,126784,126787,126790,126796,126799,126802,126808,126811,126814,126817,126823,126826,126829,126843,126850,126853,126856,126863,126872,126875,126878,126881,126885,126888],[10,126612,126608],{"id":126613},"_5-html表格列表与表单",[14,126615,126617],{"id":126616},"_51-表格标签","5.1 表格标签",[24,126619,126620],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[24,126622,126623],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[24,126625,126626],{},"②表格基本语法：",[19,126628],{"style":21,"src":126629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[24,126631,126632],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[19,126634],{"style":21,"src":126635},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[24,126637,126638],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[19,126640],{"style":21,"src":126641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[24,126643,126644],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[24,126646,126647,126650,126651,126653,126654,126657,126658,126660,126661,126664],{},[94,126648,126649],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[94,126652,126649],{},"内部必须拥有",[94,126655,126656],{},"\u003Ctr>","标签，一般位于第一行，",[94,126659,126649],{},"比",[94,126662,126663],{},"\u003Cth>","范围广",[24,126666,126667,126670],{},[94,126668,126669],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,126672,126674],{"id":126673},"_52-合并单元格","5.2 合并单元格",[24,126676,126677],{},"（1）合并单元格方式：",[24,126679,126680],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[24,126682,126683],{},"②跨列合并：colspan=\"合并单元格的个数\"",[24,126685,126686],{},"（2）目标单元格：",[24,126688,126689],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[24,126691,126692],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,126694,126696],{"id":126695},"_53-列表标签","5.3 列表标签",[24,126698,126699],{},"（1）分类：无序列表、有序列表、自定义列表",[24,126701,126702],{},"①无序列表：",[19,126704],{"style":21,"src":126705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[24,126707,126708],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[24,126710,126711,126714,126715,126718,126719,126721],{},[94,126712,126713],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[94,126716,126717],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[94,126720,126713],{},"中输入其他标签或文字是不对的",[24,126723,126724,126726],{},[94,126725,126717],{},"之间相当于一个容器，可以容纳所有元素",[24,126728,126729],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[24,126731,126732],{},"在css中去除前边的小圆点采用如下代码:",[87,126734,126736],{"className":182,"code":126735,"language":184,"meta":92,"style":92},"list-style: none;\n",[94,126737,126738],{"__ignoreMap":92},[97,126739,126740,126743],{"class":99,"line":100},[97,126741,126742],{"class":107},"list-style",[97,126744,126745],{"class":103},": none;\n",[24,126747,126748],{},"②有序列表：",[19,126750],{"style":21,"src":126751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[24,126753,126754],{},"③自定义列表：",[19,126756],{"style":21,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[19,126759],{"style":21,"src":126760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,126762,126764],{"id":126763},"_54-表单标签","5.4 表单标签",[24,126766,126767],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[24,126769,126770,126771,126774],{},"（1）表单域：包含单元素的区域，",[94,126772,126773],{},"\u003Cform>","标签可以实现信息的收集和传递。",[19,126776],{"style":21,"src":126777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[24,126779,126780],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[24,126782,126783],{},"表单元素提交必须有name属性",[24,126785,126786],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[24,126788,126789],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[24,126791,77410,126792,126795],{},[94,126793,126794],{},"\u003Cinput>","输入表单元素",[19,126797],{"style":21,"src":126798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[19,126800],{"style":21,"src":126801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[24,126803,126804,126805],{},"单选按钮：",[94,126806,126807],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[19,126809],{"style":21,"src":126810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[24,126812,126813],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[19,126815],{"style":21,"src":126816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[24,126818,126819,126822],{},[469,126820,126821],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[24,126824,126825],{},"②select下拉表单元素：可以节约页面控件",[19,126827],{"style":21,"src":126828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[24,126830,126831,13986,126833,126836,126837,126839,126840,126842],{},[469,126832,352],{},[94,126834,126835],{},"\u003Cselect>","中至少包含一对",[94,126838,102898],{},"；在",[94,126841,102898],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[24,126844,126845,126846,126849],{},"③",[94,126847,126848],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[19,126851],{"style":21,"src":126852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[24,126854,126855],{},"3行20列",[14,126857,126859,126860,102877],{"id":126858},"_55-lable标签","5.5 ",[94,126861,126862],{},"\u003Clable>",[24,126864,126865,126866,126868,126869,126871],{},"它不是表单标签，但常常与表单标签搭配使用，",[94,126867,126862],{},"标签用于绑定一个表单标签，当点击",[94,126870,126862],{},"标签内的文本",[24,126873,126874],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[19,126876],{"style":21,"src":126877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[19,126879],{"style":21,"src":126880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,126882,126884],{"id":126883},"_56-实例","5.6 实例",[19,126886],{"style":21,"src":126887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[231,126889,126890],{},"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":92,"searchDepth":195,"depth":195,"links":126892},[126893,126894,126895,126896,126897,126899],{"id":126616,"depth":195,"text":126617},{"id":126673,"depth":195,"text":126674},{"id":126695,"depth":195,"text":126696},{"id":126763,"depth":195,"text":126764},{"id":126858,"depth":195,"text":126898},"5.5 \u003Clable>标签",{"id":126883,"depth":195,"text":126884},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126608,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126906,"title":126907,"body":126908,"description":246,"extension":247,"meta":127457,"navigation":249,"path":127458,"seo":127459,"stem":127460,"__hash__":127461},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126909,"toc":127432},[126910,126913,126917,126920,126923,126927,126930,126933,126936,126939,126942,126945,126948,126952,126955,126959,126962,126965,126968,126972,126975,126978,126981,126987,126990,126993,126996,126999,127002,127005,127008,127041,127045,127048,127051,127054,127058,127061,127064,127067,127070,127073,127077,127080,127083,127086,127090,127093,127097,127100,127104,127107,127112,127116,127119,127123,127126,127129,127132,127135,127162,127165,127169,127172,127175,127180,127183,127186,127190,127193,127198,127201,127204,127207,127211,127214,127217,127220,127224,127227,127230,127233,127237,127241,127244,127284,127287,127291,127298,127301,127305,127308,127354,127358,127361,127364,127367,127395,127399,127402,127429],[10,126911,126907],{"id":126912},"_6-css语法与文本样式",[14,126914,126916],{"id":126915},"_61-css语法规范","6.1 css语法规范",[24,126918,126919],{},"由两部分组成，选择器及一条或多条声明",[19,126921],{"style":21,"src":126922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[24,126924,126925],{},[469,126926,352],{},[24,126928,126929],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[24,126931,126932],{},"②属性与属性值以“键值对”的形式出现",[24,126934,126935],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[24,126937,126938],{},"④属性和属性值之间用英文“;”分开",[19,126940],{"style":21,"src":126941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[19,126943],{"style":21,"src":126944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[19,126946],{"style":21,"src":126947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126949,126951],{"id":126950},"_62-css选择器","6.2 css选择器",[24,126953,126954],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[48,126956,126958],{"id":126957},"_621-标签选择器","6.2.1 标签选择器",[24,126960,126961],{},"①优点：能快速为页面中同类型的标签统一设置样式",[24,126963,126964],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[19,126966],{"style":21,"src":126967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[48,126969,126971],{"id":126970},"_622-类选择器","6.2.2 类选择器",[24,126973,126974],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[24,126976,126977],{},"②样例",[19,126979],{"style":21,"src":126980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[24,126982,126983,126984,126986],{},"③ ",[469,126985,126821],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[24,126988,126989],{},"可以理解为给这个标签起了个名字，来表示；",[24,126991,126992],{},"长名称或词组可以使用横线来为选择器命名；",[24,126994,126995],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[24,126997,126998],{},"命名要有意义；",[19,127000],{"style":21,"src":127001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[24,127003,127004],{},"类选择器也可以指定特殊的元素p.center{}",[24,127006,127007],{},"p.center和.center都对",[87,127009,127011],{"className":182,"code":127010,"language":184,"meta":92,"style":92},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[94,127012,127013,127018,127027,127037],{"__ignoreMap":92},[97,127014,127015],{"class":99,"line":100},[97,127016,127017],{"class":191},"\u002F* 类选择器指定特殊元素 *\u002F\n",[97,127019,127020,127022,127025],{"class":99,"line":195},[97,127021,24],{"class":107},[97,127023,127024],{"class":111},".center",[97,127026,15762],{"class":103},[97,127028,127029,127031,127033,127035],{"class":99,"line":241},[97,127030,70710],{"class":370},[97,127032,51621],{"class":103},[97,127034,51776],{"class":370},[97,127036,1483],{"class":103},[97,127038,127039],{"class":99,"line":1387},[97,127040,1757],{"class":103},[48,127042,127044],{"id":127043},"_623-多类名使用","6.2.3 多类名使用",[24,127046,127047],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[19,127049],{"style":21,"src":127050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[24,127052,127053],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[48,127055,127057],{"id":127056},"_624-id选择器","6.2.4 id选择器",[24,127059,127060],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[24,127062,127063],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[19,127065],{"style":21,"src":127066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[24,127068,127069],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[24,127071,127072],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[48,127074,127076],{"id":127075},"_625-通配符选择器","6.2.5 通配符选择器",[24,127078,127079],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[24,127081,127082],{},"* {",[24,127084,127085],{},"color=\"red\"}",[48,127087,127089],{"id":127088},"_626-总结","6.2.6 总结",[19,127091],{"style":21,"src":127092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127094,127096],{"id":127095},"_63-css字体属性","6.3 css字体属性",[24,127098,127099],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[48,127101,127103],{"id":127102},"_631-字体系列","6.3.1 字体系列",[24,127105,127106],{},"font-family: '宋体';",[24,127108,127109,127111],{},[469,127110,352],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[48,127113,127115],{"id":127114},"_632-字体大小","6.3.2 字体大小",[24,127117,127118],{},"font-size: 20px",[24,127120,127121,26663],{},[469,127122,126821],{},[24,127124,127125],{},"①px（像素）大小是网页的最常用单位",[24,127127,127128],{},"②谷歌浏览器默认为16px",[24,127130,127131],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[24,127133,127134],{},"④可以给body指定整个页面的大小：会自动引用",[87,127136,127138],{"className":182,"code":127137,"language":184,"meta":92,"style":92},"body {\n  font-size: 16px;\n}\n",[94,127139,127140,127146,127158],{"__ignoreMap":92},[97,127141,127142,127144],{"class":99,"line":100},[97,127143,51984],{"class":107},[97,127145,15762],{"class":103},[97,127147,127148,127150,127152,127154,127156],{"class":99,"line":195},[97,127149,70810],{"class":370},[97,127151,51621],{"class":103},[97,127153,921],{"class":370},[97,127155,51676],{"class":319},[97,127157,1483],{"class":103},[97,127159,127160],{"class":99,"line":241},[97,127161,1757],{"class":103},[24,127163,127164],{},"⑤标题标签比较特殊，需要单独指定大小",[48,127166,127168],{"id":127167},"_633-字体粗细","6.3.3 字体粗细",[24,127170,127171],{},"font-weight: bold;",[24,127173,127174],{},"font-weight: 100；",[24,127176,127177,127179],{},[469,127178,352],{}," ①粗体文字变细：尽量别用normal，多用数字",[24,127181,127182],{},"font-weight= 400;",[24,127184,127185],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[48,127187,127189],{"id":127188},"_634-文字样式","6.3.4 文字样式",[24,127191,127192],{},"font-style: normal；",[24,127194,127195,26663],{},[469,127196,127197],{},"属性值",[24,127199,127200],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[24,127202,127203],{},"②italic：浏览器会显示斜体的字体样式",[19,127205],{"style":21,"src":127206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[48,127208,127210],{"id":127209},"_635-字体符合属性","6.3.5 字体符合属性",[19,127212],{"style":21,"src":127213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[19,127215],{"style":21,"src":127216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[24,127218,127219],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[24,127221,127222,26663],{},[469,127223,126821],{},[24,127225,127226],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[24,127228,127229],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[24,127231,127232],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127234,127236],{"id":127235},"_64-css-test文本属性","6.4 css test文本属性",[48,127238,127240],{"id":127239},"_641-文本颜色","6.4.1 文本颜色",[24,127242,127243],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[87,127245,127247],{"className":182,"code":127246,"language":184,"meta":92,"style":92},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[94,127248,127249,127254,127260,127270,127275,127280],{"__ignoreMap":92},[97,127250,127251],{"class":99,"line":100},[97,127252,127253],{"class":191},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[97,127255,127256,127258],{"class":99,"line":195},[97,127257,24],{"class":107},[97,127259,15762],{"class":103},[97,127261,127262,127264,127266,127268],{"class":99,"line":241},[97,127263,71089],{"class":370},[97,127265,51621],{"class":103},[97,127267,57605],{"class":370},[97,127269,1483],{"class":103},[97,127271,127272],{"class":99,"line":1387},[97,127273,127274],{"class":191},"  \u002F* color: #ff0000; *\u002F\n",[97,127276,127277],{"class":99,"line":1393},[97,127278,127279],{"class":191},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[97,127281,127282],{"class":99,"line":1407},[97,127283,1757],{"class":103},[19,127285],{"style":21,"src":127286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[48,127288,127290],{"id":127289},"_642-对齐文本","6.4.2 对齐文本",[24,127292,127293,127294,127297],{},"text-align属于用于设置元素内文本内容的 ",[469,127295,127296],{},"水平对齐"," 方式",[24,127299,127300],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[48,127302,127304],{"id":127303},"_643-装饰文本","6.4.3 装饰文本",[24,127306,127307],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[87,127309,127311],{"className":182,"code":127310,"language":184,"meta":92,"style":92},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[94,127312,127313,127319,127329,127333,127339,127350],{"__ignoreMap":92},[97,127314,127315,127317],{"class":99,"line":100},[97,127316,558],{"class":107},[97,127318,15762],{"class":103},[97,127320,127321,127323,127325,127327],{"class":99,"line":195},[97,127322,70686],{"class":370},[97,127324,51621],{"class":103},[97,127326,54921],{"class":370},[97,127328,1483],{"class":103},[97,127330,127331],{"class":99,"line":241},[97,127332,1757],{"class":103},[97,127334,127335,127337],{"class":99,"line":1387},[97,127336,24],{"class":107},[97,127338,15762],{"class":103},[97,127340,127341,127343,127345,127348],{"class":99,"line":1393},[97,127342,70686],{"class":370},[97,127344,51621],{"class":103},[97,127346,127347],{"class":370},"underline",[97,127349,1483],{"class":103},[97,127351,127352],{"class":99,"line":1407},[97,127353,1757],{"class":103},[48,127355,127357],{"id":127356},"_644-文本缩进","6.4.4 文本缩进",[24,127359,127360],{},"实现文本的第一行首行缩进自己指定的距离",[24,127362,127363],{},"20px往右边走；-20px往左边走",[24,127365,127366],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[87,127368,127370],{"className":182,"code":127369,"language":184,"meta":92,"style":92},"p {\n  text-indent: 2em;\n}\n",[94,127371,127372,127378,127391],{"__ignoreMap":92},[97,127373,127374,127376],{"class":99,"line":100},[97,127375,24],{"class":107},[97,127377,15762],{"class":103},[97,127379,127380,127383,127385,127387,127389],{"class":99,"line":195},[97,127381,127382],{"class":370},"  text-indent",[97,127384,51621],{"class":103},[97,127386,398],{"class":370},[97,127388,23742],{"class":319},[97,127390,1483],{"class":103},[97,127392,127393],{"class":99,"line":241},[97,127394,1757],{"class":103},[48,127396,127398],{"id":127397},"_645-行间距","6.4.5 行间距",[24,127400,127401],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[87,127403,127405],{"className":182,"code":127404,"language":184,"meta":92,"style":92},"p {\n  line-height: 1.6;\n}\n",[94,127406,127407,127413,127425],{"__ignoreMap":92},[97,127408,127409,127411],{"class":99,"line":100},[97,127410,24],{"class":107},[97,127412,15762],{"class":103},[97,127414,127415,127418,127420,127423],{"class":99,"line":195},[97,127416,127417],{"class":370},"  line-height",[97,127419,51621],{"class":103},[97,127421,127422],{"class":370},"1.6",[97,127424,1483],{"class":103},[97,127426,127427],{"class":99,"line":241},[97,127428,1757],{"class":103},[231,127430,127431],{},"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":92,"searchDepth":195,"depth":195,"links":127433},[127434,127435,127443,127450],{"id":126915,"depth":195,"text":126916},{"id":126950,"depth":195,"text":126951,"children":127436},[127437,127438,127439,127440,127441,127442],{"id":126957,"depth":241,"text":126958},{"id":126970,"depth":241,"text":126971},{"id":127043,"depth":241,"text":127044},{"id":127056,"depth":241,"text":127057},{"id":127075,"depth":241,"text":127076},{"id":127088,"depth":241,"text":127089},{"id":127095,"depth":195,"text":127096,"children":127444},[127445,127446,127447,127448,127449],{"id":127102,"depth":241,"text":127103},{"id":127114,"depth":241,"text":127115},{"id":127167,"depth":241,"text":127168},{"id":127188,"depth":241,"text":127189},{"id":127209,"depth":241,"text":127210},{"id":127235,"depth":195,"text":127236,"children":127451},[127452,127453,127454,127455,127456],{"id":127239,"depth":241,"text":127240},{"id":127289,"depth":241,"text":127290},{"id":127303,"depth":241,"text":127304},{"id":127356,"depth":241,"text":127357},{"id":127397,"depth":241,"text":127398},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126907,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127463,"title":127464,"body":127465,"description":246,"extension":247,"meta":128112,"navigation":249,"path":128113,"seo":128114,"stem":128115,"__hash__":128116},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127466,"toc":128093},[127467,127470,127474,127478,127536,127540,127550,127553,127556,127560,127585,127589,127592,127595,127598,127601,127604,127608,127611,127614,127656,127659,127685,127691,127694,127698,127702,127708,127711,127714,127717,127720,127723,127726,127771,127775,127778,127781,127785,127789,127818,127821,127826,127829,127832,127835,127838,127842,127846,127849,127851,127854,127858,127861,127865,127868,127871,127874,127878,127882,127888,127898,127901,127904,127907,127910,127913,128036,128044,128052,128090],[10,127468,127464],{"id":127469},"_7-css引入方式与选择器进阶",[14,127471,127473],{"id":127472},"_71-css引入方式","7.1 css引入方式",[48,127475,127477],{"id":127476},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[87,127479,127481],{"className":89,"code":127480,"language":91,"meta":92,"style":92},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[94,127482,127483,127491,127498,127510,127523,127528],{"__ignoreMap":92},[97,127484,127485,127487,127489],{"class":99,"line":100},[97,127486,104],{"class":103},[97,127488,231],{"class":107},[97,127490,130],{"class":103},[97,127492,127493,127496],{"class":99,"line":195},[97,127494,127495],{"class":107},"  h1",[97,127497,15762],{"class":103},[97,127499,127500,127503,127505,127508],{"class":99,"line":241},[97,127501,127502],{"class":370},"    color",[97,127504,51621],{"class":103},[97,127506,127507],{"class":370},"blue",[97,127509,1483],{"class":103},[97,127511,127512,127515,127517,127519,127521],{"class":99,"line":1387},[97,127513,127514],{"class":370},"    font-size",[97,127516,51621],{"class":103},[97,127518,1120],{"class":370},[97,127520,51676],{"class":319},[97,127522,1483],{"class":103},[97,127524,127525],{"class":99,"line":1393},[97,127526,127527],{"class":103},"  }\n",[97,127529,127530,127532,127534],{"class":99,"line":1407},[97,127531,51969],{"class":103},[97,127533,231],{"class":107},[97,127535,130],{"class":103},[24,127537,127538,26663],{},[469,127539,126821],{},[24,127541,77410,127542,127545,127546,127549],{},[94,127543,127544],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[94,127547,127548],{},"\u003Chead>","标签中",[24,127551,127552],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[24,127554,127555],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[48,127557,127559],{"id":127558},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[87,127561,127563],{"className":89,"code":127562,"language":91,"meta":92,"style":92},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[94,127564,127565],{"__ignoreMap":92},[97,127566,127567,127569,127571,127573,127575,127578,127581,127583],{"class":99,"line":100},[97,127568,104],{"class":103},[97,127570,24],{"class":107},[97,127572,62810],{"class":111},[97,127574,115],{"class":103},[97,127576,127577],{"class":118},"\"color: red; font-size: 16px;\"",[97,127579,127580],{"class":103},">这是一个段落\u003C\u002F",[97,127582,24],{"class":107},[97,127584,130],{"class":103},[24,127586,127587,26663],{},[469,127588,126821],{},[24,127590,127591],{},"①style其实就是标签的属性",[24,127593,127594],{},"②在双引号中间，写法要符合css规范",[24,127596,127597],{},"③可以控制当前的标签设置样式",[24,127599,127600],{},"④书写繁琐，简单时才用",[24,127602,127603],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[48,127605,127607],{"id":127606},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[24,127609,127610],{},"使用最多，单独建一个css文件，然后html引用",[24,127612,127613],{},"①css文件部分： style.css",[87,127615,127617],{"className":182,"code":127616,"language":184,"meta":92,"style":92},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[94,127618,127619,127624,127630,127640,127652],{"__ignoreMap":92},[97,127620,127621],{"class":99,"line":100},[97,127622,127623],{"class":191},"\u002F* style.css *\u002F\n",[97,127625,127626,127628],{"class":99,"line":195},[97,127627,10],{"class":107},[97,127629,15762],{"class":103},[97,127631,127632,127634,127636,127638],{"class":99,"line":241},[97,127633,71089],{"class":370},[97,127635,51621],{"class":103},[97,127637,127507],{"class":370},[97,127639,1483],{"class":103},[97,127641,127642,127644,127646,127648,127650],{"class":99,"line":1387},[97,127643,70810],{"class":370},[97,127645,51621],{"class":103},[97,127647,1120],{"class":370},[97,127649,51676],{"class":319},[97,127651,1483],{"class":103},[97,127653,127654],{"class":99,"line":1393},[97,127655,1757],{"class":103},[24,127657,127658],{},"②html部分",[87,127660,127662],{"className":89,"code":127661,"language":91,"meta":92,"style":92},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[94,127663,127664],{"__ignoreMap":92},[97,127665,127666,127668,127670,127672,127674,127676,127678,127680,127683],{"class":99,"line":100},[97,127667,104],{"class":103},[97,127669,69189],{"class":107},[97,127671,69192],{"class":111},[97,127673,115],{"class":103},[97,127675,69197],{"class":118},[97,127677,61241],{"class":111},[97,127679,115],{"class":103},[97,127681,127682],{"class":118},"\"style.css\"",[97,127684,130],{"class":103},[24,127686,127687,127690],{},[94,127688,127689],{},"\u003Chr>","水平线标签（但是不常用！）",[24,127692,127693],{},"ctrl+0回到页面原来大小",[14,127695,127697],{"id":127696},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[48,127699,127701],{"id":127700},"_721-快速生成html","7.2.1 快速生成html",[24,127703,127704,127705],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[94,127706,127707],{},"\u003Cdiv>``\u003C\u002Fdiv>",[24,127709,127710],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[24,127712,127713],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[24,127715,127716],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[24,127718,127719],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[24,127721,127722],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[24,127724,127725],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[87,127727,127729],{"className":89,"code":127728,"language":91,"meta":92,"style":92},"\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",[94,127730,127731,127736,127741,127746,127751,127756,127761,127766],{"__ignoreMap":92},[97,127732,127733],{"class":99,"line":100},[97,127734,127735],{"class":191},"\u003C!-- Emmet 语法示例 -->\n",[97,127737,127738],{"class":99,"line":195},[97,127739,127740],{"class":191},"\u003C!-- div*3        → 生成3个div -->\n",[97,127742,127743],{"class":99,"line":241},[97,127744,127745],{"class":191},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[97,127747,127748],{"class":99,"line":1387},[97,127749,127750],{"class":191},"\u003C!-- div+p        → 兄弟div和p -->\n",[97,127752,127753],{"class":99,"line":1393},[97,127754,127755],{"class":191},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[97,127757,127758],{"class":99,"line":1407},[97,127759,127760],{"class":191},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[97,127762,127763],{"class":99,"line":1413},[97,127764,127765],{"class":191},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[97,127767,127768],{"class":99,"line":1504},[97,127769,127770],{"class":191},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[48,127772,127774],{"id":127773},"_722-快速生成css","7.2.2 快速生成css",[24,127776,127777],{},"简写开头",[24,127779,127780],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127782,127784],{"id":127783},"_73-css复合选择器","7.3 css复合选择器",[48,127786,127788],{"id":127787},"_731-后代选择器","7.3.1 后代选择器",[87,127790,127792],{"className":182,"code":127791,"language":184,"meta":92,"style":92},".parent .child {\n  color: blue;\n}\n",[94,127793,127794,127804,127814],{"__ignoreMap":92},[97,127795,127796,127799,127802],{"class":99,"line":100},[97,127797,127798],{"class":111},".parent",[97,127800,127801],{"class":111}," .child",[97,127803,15762],{"class":103},[97,127805,127806,127808,127810,127812],{"class":99,"line":195},[97,127807,71089],{"class":370},[97,127809,51621],{"class":103},[97,127811,127507],{"class":370},[97,127813,1483],{"class":103},[97,127815,127816],{"class":99,"line":241},[97,127817,1757],{"class":103},[24,127819,127820],{},"元素1 元素2 {样式声明}",[24,127822,127823],{},[469,127824,127825],{},"注意点:",[24,127827,127828],{},"①元素1和元素2中间用空格隔开",[24,127830,127831],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[24,127833,127834],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[24,127836,127837],{},"④元素1和元素2可以是任意基础选择器",[48,127839,127841],{"id":127840},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[24,127843,127844],{},[469,127845,127825],{},[24,127847,127848],{},"①元素1和元素2中间用大于号隔开",[24,127850,127831],{},[24,127852,127853],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[48,127855,127857],{"id":127856},"_733-并集选择器","7.3.3 并集选择器",[24,127859,127860],{},"元素1，元素2 {样式声明}",[24,127862,127863],{},[469,127864,127825],{},[24,127866,127867],{},"①元素1和元素2中间用逗号隔开",[24,127869,127870],{},"②逗号可以理解为和的意思",[24,127872,127873],{},"③并集选择器通常用于集体声明",[48,127875,127877],{"id":127876},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[24,127879,127880],{},[469,127881,127825],{},[24,127883,127884,127885,127887],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69189,127886],{},"－:visited－:hover－:active。",[24,127889,127890,127891,127894,127895,25930],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127892,127893],"hover",{}," 、 ",[127896,127897],"first-child",{},[24,127899,127900],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[24,127902,127903],{},"link对没访问的进行设置",[24,127905,127906],{},"vistied对已访问的进行改变",[24,127908,127909],{},"hover鼠标经过就会变",[24,127911,127912],{},"active常按(点)就会变",[87,127914,127916],{"className":182,"code":127915,"language":184,"meta":92,"style":92},"\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",[94,127917,127918,127923,127932,127942,127952,127956,127965,127976,127980,127988,127998,128008,128012,128021,128032],{"__ignoreMap":92},[97,127919,127920],{"class":99,"line":100},[97,127921,127922],{"class":191},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[97,127924,127925,127927,127930],{"class":99,"line":195},[97,127926,558],{"class":107},[97,127928,127929],{"class":111},":link",[97,127931,15762],{"class":103},[97,127933,127934,127936,127938,127940],{"class":99,"line":241},[97,127935,71089],{"class":370},[97,127937,51621],{"class":103},[97,127939,62553],{"class":370},[97,127941,1483],{"class":103},[97,127943,127944,127946,127948,127950],{"class":99,"line":1387},[97,127945,70686],{"class":370},[97,127947,51621],{"class":103},[97,127949,54921],{"class":370},[97,127951,1483],{"class":103},[97,127953,127954],{"class":99,"line":1393},[97,127955,1757],{"class":103},[97,127957,127958,127960,127963],{"class":99,"line":1407},[97,127959,558],{"class":107},[97,127961,127962],{"class":111},":visited",[97,127964,15762],{"class":103},[97,127966,127967,127969,127971,127974],{"class":99,"line":1413},[97,127968,71089],{"class":370},[97,127970,51621],{"class":103},[97,127972,127973],{"class":370},"purple",[97,127975,1483],{"class":103},[97,127977,127978],{"class":99,"line":1504},[97,127979,1757],{"class":103},[97,127981,127982,127984,127986],{"class":99,"line":1510},[97,127983,558],{"class":107},[97,127985,61124],{"class":111},[97,127987,15762],{"class":103},[97,127989,127990,127992,127994,127996],{"class":99,"line":1522},[97,127991,71089],{"class":370},[97,127993,51621],{"class":103},[97,127995,55073],{"class":370},[97,127997,1483],{"class":103},[97,127999,128000,128002,128004,128006],{"class":99,"line":1804},[97,128001,70686],{"class":370},[97,128003,51621],{"class":103},[97,128005,127347],{"class":370},[97,128007,1483],{"class":103},[97,128009,128010],{"class":99,"line":1809},[97,128011,1757],{"class":103},[97,128013,128014,128016,128019],{"class":99,"line":1815},[97,128015,558],{"class":107},[97,128017,128018],{"class":111},":active",[97,128020,15762],{"class":103},[97,128022,128023,128025,128027,128030],{"class":99,"line":1820},[97,128024,71089],{"class":370},[97,128026,51621],{"class":103},[97,128028,128029],{"class":370},"green",[97,128031,1483],{"class":103},[97,128033,128034],{"class":99,"line":1834},[97,128035,1757],{"class":103},[48,128037,128039,128040,128043],{"id":128038},"_735-伪类选择器","7.3.5 ",[128041,128042],"focus",{},"伪类选择器",[24,128045,128046,128048,128049,128051],{},[128041,128047],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[94,128050,126794],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[87,128053,128055],{"className":182,"code":128054,"language":184,"meta":92,"style":92},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[94,128056,128057,128065,128076,128086],{"__ignoreMap":92},[97,128058,128059,128061,128063],{"class":99,"line":100},[97,128060,54005],{"class":107},[97,128062,62084],{"class":111},[97,128064,15762],{"class":103},[97,128066,128067,128070,128072,128074],{"class":99,"line":195},[97,128068,128069],{"class":370},"  border-color",[97,128071,51621],{"class":103},[97,128073,55073],{"class":370},[97,128075,1483],{"class":103},[97,128077,128078,128080,128082,128084],{"class":99,"line":241},[97,128079,70982],{"class":370},[97,128081,51621],{"class":103},[97,128083,54921],{"class":370},[97,128085,1483],{"class":103},[97,128087,128088],{"class":99,"line":1387},[97,128089,1757],{"class":103},[231,128091,128092],{},"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":92,"searchDepth":195,"depth":195,"links":128094},[128095,128100,128104],{"id":127472,"depth":195,"text":127473,"children":128096},[128097,128098,128099],{"id":127476,"depth":241,"text":127477},{"id":127558,"depth":241,"text":127559},{"id":127606,"depth":241,"text":127607},{"id":127696,"depth":195,"text":127697,"children":128101},[128102,128103],{"id":127700,"depth":241,"text":127701},{"id":127773,"depth":241,"text":127774},{"id":127783,"depth":195,"text":127784,"children":128105},[128106,128107,128108,128109,128110],{"id":127787,"depth":241,"text":127788},{"id":127840,"depth":241,"text":127841},{"id":127856,"depth":241,"text":127857},{"id":127876,"depth":241,"text":127877},{"id":128038,"depth":241,"text":128111},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127464,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128118,"title":128119,"body":128120,"description":246,"extension":247,"meta":130043,"navigation":249,"path":130044,"seo":130045,"stem":130046,"__hash__":130047},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128121,"toc":130017},[128122,128125,128129,128138,128142,128168,128173,128176,128179,128182,128185,128189,128192,128202,128210,128214,128249,128254,128257,128260,128263,128266,128270,128273,128282,128286,128299,128304,128307,128310,128313,128317,128320,128324,128327,128382,128385,128416,128419,128473,128477,128480,128646,128769,128772,128775,128778,128781,128785,128788,128792,128795,128798,128802,128805,128836,128863,128891,128894,128898,128924,128967,128971,129065,129068,129095,129098,129101,129104,129107,129110,129113,129116,129119,129122,129126,129183,129210,129214,129262,129266,129307,129309,129312,129315,129318,129321,129325,129417,129420,129423,129426,129430,129553,129754,129758,129762,129765,129768,129771,129775,129778,129781,129806,129809,129812,129815,129818,129821,129825,129833,129895,129898,129956,129959,129962,129965,129968,129971,129974,129977,130014],[10,128123,128119],{"id":128124},"_8-css显示模式与背景特性",[14,128126,128128],{"id":128127},"_81-css元素显示模式","8.1 css元素显示模式",[24,128130,128131,128132,128134,128135,128137],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[94,128133,126347],{},"自己占一行，比如一行可以放多个",[94,128136,126350],{},"，HTML 元素一般分为块元素和行内元素两种类型",[48,128139,128141],{"id":128140},"_811-块元素","8.1.1 块元素",[24,128143,128144,128145,128147,128148,532,128151,532,128153,532,128155,532,128158,532,128161,128164,128165,128167],{},"常见的块元素有",[94,128146,126251],{},"~",[94,128149,128150],{},"\u003Ch6>",[94,128152,126277],{},[94,128154,126347],{},[94,128156,128157],{},"\u003Cul>",[94,128159,128160],{},"\u003Col>",[94,128162,128163],{},"\u003Cli>","等，其中 ",[94,128166,126347],{}," 标签是最典型的块元素",[24,128169,128170],{},[469,128171,128172],{},"块级元素的特点：",[24,128174,128175],{},"① 比较霸道，自己独占一行。",[24,128177,128178],{},"② 高度，宽度、外边距以及内边距都可以控制。",[24,128180,128181],{},"③ 宽度默认是容器（父级宽度）的100%。",[24,128183,128184],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[24,128186,128187],{},[469,128188,352],{},[24,128190,128191],{},"①文字类的元素内不能使用块级元素",[24,128193,77433,128194,128196,128197,128199,128200],{},[94,128195,126277],{}," 标签主要用于存放文字，因此 ",[94,128198,126277],{}," 里面不能放块级元素，特别是不能放",[94,128201,126347],{},[24,128203,128204,128205,128147,128207,128209],{},"⑥同理， ",[94,128206,126251],{},[94,128208,128150],{},"等都是文字类块级标签，里面也不能放其他块级元素",[48,128211,128213],{"id":128212},"_812-行内元素","8.1.2 行内元素",[24,128215,128216,128217,532,128219,532,128222,532,128225,532,128228,532,128231,532,128234,532,128237,532,128240,532,128243,128245,128246,128248],{},"常见的行内元素有 ",[94,128218,126509],{},[94,128220,128221],{},"\u003Cstrong>",[94,128223,128224],{},"\u003Cb>",[94,128226,128227],{},"\u003Cem>",[94,128229,128230],{},"\u003Ci>",[94,128232,128233],{},"\u003Cdel>",[94,128235,128236],{},"\u003Cs>",[94,128238,128239],{},"\u003Cins>",[94,128241,128242],{},"\u003Cu>",[94,128244,126350],{}," 等，其中 ",[94,128247,126350],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[24,128250,128251],{},[469,128252,128253],{},"特点：",[24,128255,128256],{},"① 相邻行内元素在一行上，一行可以显示多个。",[24,128258,128259],{},"② 高、宽直接设置是无效的。",[24,128261,128262],{},"③ 默认宽度就是它本身内容的宽度。",[24,128264,128265],{},"④ 行内元素只能容纳文本或其他行内元素。",[24,128267,128268],{},[469,128269,352],{},[24,128271,128272],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[24,128274,128275,128276,128278,128279,128281],{},"②特殊情况链接 ",[94,128277,126509],{}," 里面可以放块级元素，但是给 ",[94,128280,126509],{}," 转换一下块级模式最安全",[48,128283,128285],{"id":128284},"_813-行内块元素","8.1.3 行内块元素",[24,128287,128288,128289,532,128292,532,128295,128298],{},"在行内元素中有几个特殊的标签 —— ",[94,128290,128291],{},"\u003Cimg \u002F>",[94,128293,128294],{},"\u003Cinput \u002F>",[94,128296,128297],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[24,128300,128301],{},[469,128302,128303],{},"行内块元素的特点：",[24,128305,128306],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[24,128308,128309],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[24,128311,128312],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[48,128314,128316],{"id":128315},"_814-总结","8.1.4 总结",[19,128318],{"style":21,"src":128319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[48,128321,128323],{"id":128322},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[24,128325,128326],{},"①转换为块元素：display:block;",[87,128328,128330],{"className":182,"code":128329,"language":184,"meta":92,"style":92},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[94,128331,128332,128337,128343,128354,128366,128378],{"__ignoreMap":92},[97,128333,128334],{"class":99,"line":100},[97,128335,128336],{"class":191},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[97,128338,128339,128341],{"class":99,"line":195},[97,128340,558],{"class":107},[97,128342,15762],{"class":103},[97,128344,128345,128348,128350,128352],{"class":99,"line":241},[97,128346,128347],{"class":370},"  display",[97,128349,51621],{"class":103},[97,128351,61053],{"class":370},[97,128353,1483],{"class":103},[97,128355,128356,128358,128360,128362,128364],{"class":99,"line":1387},[97,128357,70752],{"class":370},[97,128359,51621],{"class":103},[97,128361,631],{"class":370},[97,128363,51676],{"class":319},[97,128365,1483],{"class":103},[97,128367,128368,128370,128372,128374,128376],{"class":99,"line":1393},[97,128369,70972],{"class":370},[97,128371,51621],{"class":103},[97,128373,721],{"class":370},[97,128375,51676],{"class":319},[97,128377,1483],{"class":103},[97,128379,128380],{"class":99,"line":1407},[97,128381,1757],{"class":103},[24,128383,128384],{},"②转换为行内元素：display:inline;",[87,128386,128388],{"className":182,"code":128387,"language":184,"meta":92,"style":92},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[94,128389,128390,128395,128401,128412],{"__ignoreMap":92},[97,128391,128392],{"class":99,"line":100},[97,128393,128394],{"class":191},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[97,128396,128397,128399],{"class":99,"line":195},[97,128398,51795],{"class":107},[97,128400,15762],{"class":103},[97,128402,128403,128405,128407,128410],{"class":99,"line":241},[97,128404,128347],{"class":370},[97,128406,51621],{"class":103},[97,128408,128409],{"class":370},"inline",[97,128411,1483],{"class":103},[97,128413,128414],{"class":99,"line":1387},[97,128415,1757],{"class":103},[24,128417,128418],{},"③转换为行内块：display:inline-block;",[87,128420,128422],{"className":182,"code":128421,"language":184,"meta":92,"style":92},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[94,128423,128424,128429,128435,128445,128457,128469],{"__ignoreMap":92},[97,128425,128426],{"class":99,"line":100},[97,128427,128428],{"class":191},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[97,128430,128431,128433],{"class":99,"line":195},[97,128432,97],{"class":107},[97,128434,15762],{"class":103},[97,128436,128437,128439,128441,128443],{"class":99,"line":241},[97,128438,128347],{"class":370},[97,128440,51621],{"class":103},[97,128442,72567],{"class":370},[97,128444,1483],{"class":103},[97,128446,128447,128449,128451,128453,128455],{"class":99,"line":1387},[97,128448,70752],{"class":370},[97,128450,51621],{"class":103},[97,128452,932],{"class":370},[97,128454,51676],{"class":319},[97,128456,1483],{"class":103},[97,128458,128459,128461,128463,128465,128467],{"class":99,"line":1393},[97,128460,70972],{"class":370},[97,128462,51621],{"class":103},[97,128464,1270],{"class":370},[97,128466,51676],{"class":319},[97,128468,1483],{"class":103},[97,128470,128471],{"class":99,"line":1407},[97,128472,1757],{"class":103},[48,128474,128476],{"id":128475},"_816-小米侧边栏","8.1.6 小米侧边栏",[19,128478],{"style":21,"src":128479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[87,128481,128483],{"className":89,"code":128482,"language":91,"meta":92,"style":92},"\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",[94,128484,128485,128490,128505,128524,128543,128562,128581,128600,128619,128638],{"__ignoreMap":92},[97,128486,128487],{"class":99,"line":100},[97,128488,128489],{"class":191},"\u003C!-- 小米侧边栏案例 -->\n",[97,128491,128492,128494,128496,128498,128500,128503],{"class":99,"line":195},[97,128493,104],{"class":103},[97,128495,51795],{"class":107},[97,128497,53670],{"class":111},[97,128499,115],{"class":103},[97,128501,128502],{"class":118},"\"sidebar\"",[97,128504,130],{"class":103},[97,128506,128507,128509,128511,128513,128515,128517,128520,128522],{"class":99,"line":241},[97,128508,52328],{"class":103},[97,128510,558],{"class":107},[97,128512,61241],{"class":111},[97,128514,115],{"class":103},[97,128516,61246],{"class":118},[97,128518,128519],{"class":103},">手机 电话卡\u003C\u002F",[97,128521,558],{"class":107},[97,128523,130],{"class":103},[97,128525,128526,128528,128530,128532,128534,128536,128539,128541],{"class":99,"line":1387},[97,128527,52328],{"class":103},[97,128529,558],{"class":107},[97,128531,61241],{"class":111},[97,128533,115],{"class":103},[97,128535,61246],{"class":118},[97,128537,128538],{"class":103},">电视 盒子\u003C\u002F",[97,128540,558],{"class":107},[97,128542,130],{"class":103},[97,128544,128545,128547,128549,128551,128553,128555,128558,128560],{"class":99,"line":1393},[97,128546,52328],{"class":103},[97,128548,558],{"class":107},[97,128550,61241],{"class":111},[97,128552,115],{"class":103},[97,128554,61246],{"class":118},[97,128556,128557],{"class":103},">笔记本 平板\u003C\u002F",[97,128559,558],{"class":107},[97,128561,130],{"class":103},[97,128563,128564,128566,128568,128570,128572,128574,128577,128579],{"class":99,"line":1407},[97,128565,52328],{"class":103},[97,128567,558],{"class":107},[97,128569,61241],{"class":111},[97,128571,115],{"class":103},[97,128573,61246],{"class":118},[97,128575,128576],{"class":103},">出行 穿戴\u003C\u002F",[97,128578,558],{"class":107},[97,128580,130],{"class":103},[97,128582,128583,128585,128587,128589,128591,128593,128596,128598],{"class":99,"line":1413},[97,128584,52328],{"class":103},[97,128586,558],{"class":107},[97,128588,61241],{"class":111},[97,128590,115],{"class":103},[97,128592,61246],{"class":118},[97,128594,128595],{"class":103},">智能 路由器\u003C\u002F",[97,128597,558],{"class":107},[97,128599,130],{"class":103},[97,128601,128602,128604,128606,128608,128610,128612,128615,128617],{"class":99,"line":1504},[97,128603,52328],{"class":103},[97,128605,558],{"class":107},[97,128607,61241],{"class":111},[97,128609,115],{"class":103},[97,128611,61246],{"class":118},[97,128613,128614],{"class":103},">健康 儿童\u003C\u002F",[97,128616,558],{"class":107},[97,128618,130],{"class":103},[97,128620,128621,128623,128625,128627,128629,128631,128634,128636],{"class":99,"line":1510},[97,128622,52328],{"class":103},[97,128624,558],{"class":107},[97,128626,61241],{"class":111},[97,128628,115],{"class":103},[97,128630,61246],{"class":118},[97,128632,128633],{"class":103},">耳机 音响\u003C\u002F",[97,128635,558],{"class":107},[97,128637,130],{"class":103},[97,128639,128640,128642,128644],{"class":99,"line":1522},[97,128641,51969],{"class":103},[97,128643,51795],{"class":107},[97,128645,130],{"class":103},[87,128647,128649],{"className":182,"code":128648,"language":184,"meta":92,"style":92},".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",[94,128650,128651,128660,128670,128683,128695,128707,128719,128729,128740,128744,128754,128765],{"__ignoreMap":92},[97,128652,128653,128656,128658],{"class":99,"line":100},[97,128654,128655],{"class":111},".sidebar",[97,128657,1591],{"class":107},[97,128659,15762],{"class":103},[97,128661,128662,128664,128666,128668],{"class":99,"line":195},[97,128663,128347],{"class":370},[97,128665,51621],{"class":103},[97,128667,61053],{"class":370},[97,128669,1483],{"class":103},[97,128671,128672,128674,128676,128679,128681],{"class":99,"line":241},[97,128673,70752],{"class":370},[97,128675,51621],{"class":103},[97,128677,128678],{"class":370},"234",[97,128680,51676],{"class":319},[97,128682,1483],{"class":103},[97,128684,128685,128687,128689,128691,128693],{"class":99,"line":1387},[97,128686,70972],{"class":370},[97,128688,51621],{"class":103},[97,128690,772],{"class":370},[97,128692,51676],{"class":319},[97,128694,1483],{"class":103},[97,128696,128697,128699,128701,128703,128705],{"class":99,"line":1393},[97,128698,127417],{"class":370},[97,128700,51621],{"class":103},[97,128702,772],{"class":370},[97,128704,51676],{"class":319},[97,128706,1483],{"class":103},[97,128708,128709,128711,128713,128715,128717],{"class":99,"line":1407},[97,128710,71007],{"class":370},[97,128712,51621],{"class":103},[97,128714,1270],{"class":370},[97,128716,51676],{"class":319},[97,128718,1483],{"class":103},[97,128720,128721,128723,128725,128727],{"class":99,"line":1413},[97,128722,71089],{"class":370},[97,128724,51621],{"class":103},[97,128726,61026],{"class":370},[97,128728,1483],{"class":103},[97,128730,128731,128733,128735,128738],{"class":99,"line":1504},[97,128732,71062],{"class":370},[97,128734,51621],{"class":103},[97,128736,128737],{"class":370},"#55585a",[97,128739,1483],{"class":103},[97,128741,128742],{"class":99,"line":1510},[97,128743,1757],{"class":103},[97,128745,128746,128748,128750,128752],{"class":99,"line":1522},[97,128747,128655],{"class":111},[97,128749,1591],{"class":107},[97,128751,61124],{"class":111},[97,128753,15762],{"class":103},[97,128755,128756,128758,128760,128763],{"class":99,"line":1804},[97,128757,71062],{"class":370},[97,128759,51621],{"class":103},[97,128761,128762],{"class":370},"#ff6700",[97,128764,1483],{"class":103},[97,128766,128767],{"class":99,"line":1809},[97,128768,1757],{"class":103},[19,128770],{"style":21,"src":128771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[24,128773,128774],{},"行高=盒子高度：实现文字的垂直居中",[24,128776,128777],{},"原理讲解：",[19,128779],{"style":21,"src":128780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128782,128784],{"id":128783},"_82-css背景","8.2 css背景",[24,128786,128787],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[48,128789,128791],{"id":128790},"_821-背景颜色","8.2.1 背景颜色",[24,128793,128794],{},"background-color:颜色值;",[24,128796,128797],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[48,128799,128801],{"id":128800},"_822-背景图片","8.2.2 背景图片",[24,128803,128804],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[87,128806,128808],{"className":182,"code":128807,"language":184,"meta":92,"style":92},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[94,128809,128810,128816,128832],{"__ignoreMap":92},[97,128811,128812,128814],{"class":99,"line":100},[97,128813,51795],{"class":107},[97,128815,15762],{"class":103},[97,128817,128818,128821,128823,128825,128827,128830],{"class":99,"line":195},[97,128819,128820],{"class":370},"  background-image",[97,128822,51621],{"class":103},[97,128824,61910],{"class":370},[97,128826,323],{"class":103},[97,128828,128829],{"class":5407},"images\u002Fbg.png",[97,128831,2910],{"class":103},[97,128833,128834],{"class":99,"line":241},[97,128835,1757],{"class":103},[457,128837,128838,128847],{},[460,128839,128840],{},[463,128841,128842,128845],{},[466,128843,128844],{"align":23925},"参数值",[466,128846,102880],{"align":23925},[504,128848,128849,128856],{},[463,128850,128851,128853],{},[509,128852,54921],{"align":23925},[509,128854,128855],{"align":23925},"无背景图（默认的）",[463,128857,128858,128860],{},[509,128859,61910],{"align":23925},[509,128861,128862],{"align":23925},"使用绝对或相对地址指定背景图像",[87,128864,128865],{"className":182,"code":128807,"language":184,"meta":92,"style":92},[94,128866,128867,128873,128887],{"__ignoreMap":92},[97,128868,128869,128871],{"class":99,"line":100},[97,128870,51795],{"class":107},[97,128872,15762],{"class":103},[97,128874,128875,128877,128879,128881,128883,128885],{"class":99,"line":195},[97,128876,128820],{"class":370},[97,128878,51621],{"class":103},[97,128880,61910],{"class":370},[97,128882,323],{"class":103},[97,128884,128829],{"class":5407},[97,128886,2910],{"class":103},[97,128888,128889],{"class":99,"line":241},[97,128890,1757],{"class":103},[24,128892,128893],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[48,128895,128897],{"id":128896},"_823-背景平铺","8.2.3 背景平铺",[87,128899,128901],{"className":182,"code":128900,"language":184,"meta":92,"style":92},"div {\n  background-repeat: no-repeat;\n}\n",[94,128902,128903,128909,128920],{"__ignoreMap":92},[97,128904,128905,128907],{"class":99,"line":100},[97,128906,51795],{"class":107},[97,128908,15762],{"class":103},[97,128910,128911,128914,128916,128918],{"class":99,"line":195},[97,128912,128913],{"class":370},"  background-repeat",[97,128915,51621],{"class":103},[97,128917,61920],{"class":370},[97,128919,1483],{"class":103},[97,128921,128922],{"class":99,"line":241},[97,128923,1757],{"class":103},[457,128925,128926,128934],{},[460,128927,128928],{},[463,128929,128930,128932],{},[466,128931,128844],{"align":23925},[466,128933,102880],{"align":23925},[504,128935,128936,128944,128951,128959],{},[463,128937,128938,128941],{},[509,128939,128940],{"align":23925},"repeat",[509,128942,128943],{"align":23925},"背景图像在纵向和横向上平铺（默认的）",[463,128945,128946,128948],{},[509,128947,61920],{"align":23925},[509,128949,128950],{"align":23925},"背景图像不平铺",[463,128952,128953,128956],{},[509,128954,128955],{"align":23925},"repeat-x",[509,128957,128958],{"align":23925},"背景图像在横向上平铺",[463,128960,128961,128964],{},[509,128962,128963],{"align":23925},"repeat-y",[509,128965,128966],{"align":23925},"背景图像在纵向平铺",[48,128968,128970],{"id":128969},"_824-背景图片位置","8.2.4 背景图片位置",[87,128972,128974],{"className":182,"code":128973,"language":184,"meta":92,"style":92},"\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",[94,128975,128976,128981,128987,129001,129005,129010,129016,129032,129036,129041,129047,129061],{"__ignoreMap":92},[97,128977,128978],{"class":99,"line":100},[97,128979,128980],{"class":191},"\u002F* 方位名词 *\u002F\n",[97,128982,128983,128985],{"class":99,"line":195},[97,128984,51795],{"class":107},[97,128986,15762],{"class":103},[97,128988,128989,128992,128994,128996,128999],{"class":99,"line":241},[97,128990,128991],{"class":370},"  background-position",[97,128993,51621],{"class":103},[97,128995,51776],{"class":370},[97,128997,128998],{"class":370}," top",[97,129000,1483],{"class":103},[97,129002,129003],{"class":99,"line":1387},[97,129004,1757],{"class":103},[97,129006,129007],{"class":99,"line":1393},[97,129008,129009],{"class":191},"\u002F* 精确单位 *\u002F\n",[97,129011,129012,129014],{"class":99,"line":1407},[97,129013,51795],{"class":107},[97,129015,15762],{"class":103},[97,129017,129018,129020,129022,129024,129026,129028,129030],{"class":99,"line":1413},[97,129019,128991],{"class":370},[97,129021,51621],{"class":103},[97,129023,1020],{"class":370},[97,129025,51676],{"class":319},[97,129027,57688],{"class":370},[97,129029,51676],{"class":319},[97,129031,1483],{"class":103},[97,129033,129034],{"class":99,"line":1504},[97,129035,1757],{"class":103},[97,129037,129038],{"class":99,"line":1510},[97,129039,129040],{"class":191},"\u002F* 混合单位 *\u002F\n",[97,129042,129043,129045],{"class":99,"line":1522},[97,129044,51795],{"class":107},[97,129046,15762],{"class":103},[97,129048,129049,129051,129053,129055,129057,129059],{"class":99,"line":1804},[97,129050,128991],{"class":370},[97,129052,51621],{"class":103},[97,129054,1020],{"class":370},[97,129056,51676],{"class":319},[97,129058,17334],{"class":370},[97,129060,1483],{"class":103},[97,129062,129063],{"class":99,"line":1809},[97,129064,1757],{"class":103},[24,129066,129067],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[457,129069,129070,129078],{},[460,129071,129072],{},[463,129073,129074,129076],{},[466,129075,128844],{"align":23925},[466,129077,26059],{"align":23925},[504,129079,129080,129087],{},[463,129081,129082,129084],{},[509,129083,52152],{"align":23925},[509,129085,129086],{"align":23925},"百分数|由浮点数和单位标识符组成的长度值",[463,129088,129089,129092],{},[509,129090,129091],{"align":23925},"position",[509,129093,129094],{"align":23925},"top|center|bottom|left|center|right 方位名词",[24,129096,129097],{},"其他说明：",[24,129099,129100],{},"①参数是方位名词",[24,129102,129103],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[24,129105,129106],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[24,129108,129109],{},"②参数是精确单位",[24,129111,129112],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[24,129114,129115],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[24,129117,129118],{},"③参数是混合单位",[24,129120,129121],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[48,129123,129125],{"id":129124},"_825-背景图片固定","8.2.5 背景图片固定",[87,129127,129129],{"className":182,"code":129128,"language":184,"meta":92,"style":92},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[94,129130,129131,129136,129142,129154,129158,129163,129169,129179],{"__ignoreMap":92},[97,129132,129133],{"class":99,"line":100},[97,129134,129135],{"class":191},"\u002F* 背景滚动（默认） *\u002F\n",[97,129137,129138,129140],{"class":99,"line":195},[97,129139,51795],{"class":107},[97,129141,15762],{"class":103},[97,129143,129144,129147,129149,129152],{"class":99,"line":241},[97,129145,129146],{"class":370},"  background-attachment",[97,129148,51621],{"class":103},[97,129150,129151],{"class":370},"scroll",[97,129153,1483],{"class":103},[97,129155,129156],{"class":99,"line":1387},[97,129157,1757],{"class":103},[97,129159,129160],{"class":99,"line":1393},[97,129161,129162],{"class":191},"\u002F* 背景固定 *\u002F\n",[97,129164,129165,129167],{"class":99,"line":1407},[97,129166,51795],{"class":107},[97,129168,15762],{"class":103},[97,129170,129171,129173,129175,129177],{"class":99,"line":1413},[97,129172,129146],{"class":370},[97,129174,51621],{"class":103},[97,129176,86417],{"class":370},[97,129178,1483],{"class":103},[97,129180,129181],{"class":99,"line":1504},[97,129182,1757],{"class":103},[457,129184,129185,129194],{},[460,129186,129187],{},[463,129188,129189,129192],{},[466,129190,129191],{"align":23925},"参数",[466,129193,102880],{"align":23925},[504,129195,129196,129203],{},[463,129197,129198,129200],{},[509,129199,129151],{"align":23925},[509,129201,129202],{"align":23925},"背景图像是随对象内容滚动",[463,129204,129205,129207],{},[509,129206,86417],{"align":23925},[509,129208,129209],{"align":23925},"背景图像固定",[48,129211,129213],{"id":129212},"_826-背景样式合写","8.2.6 背景样式合写",[87,129215,129217],{"className":182,"code":129216,"language":184,"meta":92,"style":92},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[94,129218,129219,129224,129230,129258],{"__ignoreMap":92},[97,129220,129221],{"class":99,"line":100},[97,129222,129223],{"class":191},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[97,129225,129226,129228],{"class":99,"line":195},[97,129227,51795],{"class":107},[97,129229,15762],{"class":103},[97,129231,129232,129234,129236,129238,129241,129243,129245,129247,129249,129252,129254,129256],{"class":99,"line":241},[97,129233,70795],{"class":370},[97,129235,51621],{"class":103},[97,129237,61026],{"class":370},[97,129239,129240],{"class":370}," url",[97,129242,323],{"class":103},[97,129244,128829],{"class":5407},[97,129246,13905],{"class":103},[97,129248,61920],{"class":370},[97,129250,129251],{"class":370}," fixed",[97,129253,17334],{"class":370},[97,129255,128998],{"class":370},[97,129257,1483],{"class":103},[97,129259,129260],{"class":99,"line":1387},[97,129261,1757],{"class":103},[48,129263,129265],{"id":129264},"_827-背景色半透明","8.2.7 背景色半透明",[87,129267,129269],{"className":182,"code":129268,"language":184,"meta":92,"style":92},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[94,129270,129271,129277,129303],{"__ignoreMap":92},[97,129272,129273,129275],{"class":99,"line":100},[97,129274,51795],{"class":107},[97,129276,15762],{"class":103},[97,129278,129279,129281,129283,129285,129287,129289,129291,129293,129295,129297,129299,129301],{"class":99,"line":195},[97,129280,70795],{"class":370},[97,129282,51621],{"class":103},[97,129284,55294],{"class":370},[97,129286,323],{"class":103},[97,129288,511],{"class":370},[97,129290,12626],{"class":103},[97,129292,511],{"class":370},[97,129294,12626],{"class":103},[97,129296,511],{"class":370},[97,129298,12626],{"class":103},[97,129300,100705],{"class":370},[97,129302,2910],{"class":103},[97,129304,129305],{"class":99,"line":241},[97,129306,1757],{"class":103},[24,129308,99580],{},[24,129310,129311],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[24,129313,129314],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[24,129316,129317],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[24,129319,129320],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[48,129322,129324],{"id":129323},"_828-总结","8.2.8 总结",[457,129326,129327,129338],{},[460,129328,129329],{},[463,129330,129331,129334,129336],{},[466,129332,129333],{"align":23925},"属性",[466,129335,102880],{"align":23925},[466,129337,472],{"align":23925},[504,129339,129340,129351,129362,129373,129384,129395,129406],{},[463,129341,129342,129345,129348],{},[509,129343,129344],{"align":23925},"background-color",[509,129346,129347],{"align":23925},"背景颜色",[509,129349,129350],{"align":23925},"预定义的颜色值\u002F十六进制\u002FRGB代码",[463,129352,129353,129356,129359],{},[509,129354,129355],{"align":23925},"background-image",[509,129357,129358],{"align":23925},"背景图片",[509,129360,129361],{"align":23925},"url(图片路径)",[463,129363,129364,129367,129370],{},[509,129365,129366],{"align":23925},"background-repeat",[509,129368,129369],{"align":23925},"是否平铺",[509,129371,129372],{"align":23925},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[463,129374,129375,129378,129381],{},[509,129376,129377],{"align":23925},"background-position",[509,129379,129380],{"align":23925},"背景位置",[509,129382,129383],{"align":23925},"length\u002Fposition 分别是x和y坐标",[463,129385,129386,129389,129392],{},[509,129387,129388],{"align":23925},"background-attachment",[509,129390,129391],{"align":23925},"背景附着",[509,129393,129394],{"align":23925},"scroll(背景滚动) \u002Ffixed (背景固定)",[463,129396,129397,129400,129403],{},[509,129398,129399],{"align":23925},"背景简写",[509,129401,129402],{"align":23925},"书写更简单",[509,129404,129405],{"align":23925},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[463,129407,129408,129411,129414],{},[509,129409,129410],{"align":23925},"背景半透明",[509,129412,129413],{"align":23925},"背景颜色半透明",[509,129415,129416],{"align":23925},"background: rgba(0,0,0.3); 后面必须是4个值",[24,129418,129419],{},"颜色渐变：",[19,129421],{"style":21,"src":129422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[19,129424],{"style":21,"src":129425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[48,129427,129429],{"id":129428},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[87,129431,129433],{"className":89,"code":129432,"language":91,"meta":92,"style":92},"\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",[94,129434,129435,129450,129469,129488,129507,129526,129545],{"__ignoreMap":92},[97,129436,129437,129439,129441,129443,129445,129448],{"class":99,"line":100},[97,129438,104],{"class":103},[97,129440,51795],{"class":107},[97,129442,53670],{"class":111},[97,129444,115],{"class":103},[97,129446,129447],{"class":118},"\"nav\"",[97,129449,130],{"class":103},[97,129451,129452,129454,129456,129458,129460,129462,129465,129467],{"class":99,"line":195},[97,129453,52328],{"class":103},[97,129455,558],{"class":107},[97,129457,61241],{"class":111},[97,129459,115],{"class":103},[97,129461,61246],{"class":118},[97,129463,129464],{"class":103},">五彩导航1\u003C\u002F",[97,129466,558],{"class":107},[97,129468,130],{"class":103},[97,129470,129471,129473,129475,129477,129479,129481,129484,129486],{"class":99,"line":241},[97,129472,52328],{"class":103},[97,129474,558],{"class":107},[97,129476,61241],{"class":111},[97,129478,115],{"class":103},[97,129480,61246],{"class":118},[97,129482,129483],{"class":103},">五彩导航2\u003C\u002F",[97,129485,558],{"class":107},[97,129487,130],{"class":103},[97,129489,129490,129492,129494,129496,129498,129500,129503,129505],{"class":99,"line":1387},[97,129491,52328],{"class":103},[97,129493,558],{"class":107},[97,129495,61241],{"class":111},[97,129497,115],{"class":103},[97,129499,61246],{"class":118},[97,129501,129502],{"class":103},">五彩导航3\u003C\u002F",[97,129504,558],{"class":107},[97,129506,130],{"class":103},[97,129508,129509,129511,129513,129515,129517,129519,129522,129524],{"class":99,"line":1393},[97,129510,52328],{"class":103},[97,129512,558],{"class":107},[97,129514,61241],{"class":111},[97,129516,115],{"class":103},[97,129518,61246],{"class":118},[97,129520,129521],{"class":103},">五彩导航4\u003C\u002F",[97,129523,558],{"class":107},[97,129525,130],{"class":103},[97,129527,129528,129530,129532,129534,129536,129538,129541,129543],{"class":99,"line":1407},[97,129529,52328],{"class":103},[97,129531,558],{"class":107},[97,129533,61241],{"class":111},[97,129535,115],{"class":103},[97,129537,61246],{"class":118},[97,129539,129540],{"class":103},">五彩导航5\u003C\u002F",[97,129542,558],{"class":107},[97,129544,130],{"class":103},[97,129546,129547,129549,129551],{"class":99,"line":1413},[97,129548,51969],{"class":103},[97,129550,51795],{"class":107},[97,129552,130],{"class":103},[87,129554,129556],{"className":182,"code":129555,"language":184,"meta":92,"style":92},".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",[94,129557,129558,129567,129577,129589,129601,129611,129623,129633,129637,129662,129685,129708,129731],{"__ignoreMap":92},[97,129559,129560,129563,129565],{"class":99,"line":100},[97,129561,129562],{"class":111},".nav",[97,129564,1591],{"class":107},[97,129566,15762],{"class":103},[97,129568,129569,129571,129573,129575],{"class":99,"line":195},[97,129570,128347],{"class":370},[97,129572,51621],{"class":103},[97,129574,72567],{"class":370},[97,129576,1483],{"class":103},[97,129578,129579,129581,129583,129585,129587],{"class":99,"line":241},[97,129580,70752],{"class":370},[97,129582,51621],{"class":103},[97,129584,1137],{"class":370},[97,129586,51676],{"class":319},[97,129588,1483],{"class":103},[97,129590,129591,129593,129595,129597,129599],{"class":99,"line":1387},[97,129592,70972],{"class":370},[97,129594,51621],{"class":103},[97,129596,1176],{"class":370},[97,129598,51676],{"class":319},[97,129600,1483],{"class":103},[97,129602,129603,129605,129607,129609],{"class":99,"line":1393},[97,129604,70710],{"class":370},[97,129606,51621],{"class":103},[97,129608,51776],{"class":370},[97,129610,1483],{"class":103},[97,129612,129613,129615,129617,129619,129621],{"class":99,"line":1407},[97,129614,127417],{"class":370},[97,129616,51621],{"class":103},[97,129618,1176],{"class":370},[97,129620,51676],{"class":319},[97,129622,1483],{"class":103},[97,129624,129625,129627,129629,129631],{"class":99,"line":1413},[97,129626,71089],{"class":370},[97,129628,51621],{"class":103},[97,129630,61026],{"class":370},[97,129632,1483],{"class":103},[97,129634,129635],{"class":99,"line":1504},[97,129636,1757],{"class":103},[97,129638,129639,129641,129643,129646,129648,129650,129653,129655,129657,129659],{"class":99,"line":1510},[97,129640,129562],{"class":111},[97,129642,1591],{"class":107},[97,129644,129645],{"class":111},":nth-child",[97,129647,323],{"class":103},[97,129649,537],{"class":370},[97,129651,129652],{"class":103},") { ",[97,129654,129344],{"class":370},[97,129656,51621],{"class":103},[97,129658,128762],{"class":370},[97,129660,129661],{"class":103},"; }\n",[97,129663,129664,129666,129668,129670,129672,129674,129676,129678,129680,129683],{"class":99,"line":1522},[97,129665,129562],{"class":111},[97,129667,1591],{"class":107},[97,129669,129645],{"class":111},[97,129671,323],{"class":103},[97,129673,398],{"class":370},[97,129675,129652],{"class":103},[97,129677,129344],{"class":370},[97,129679,51621],{"class":103},[97,129681,129682],{"class":370},"#ff0000",[97,129684,129661],{"class":103},[97,129686,129687,129689,129691,129693,129695,129697,129699,129701,129703,129706],{"class":99,"line":1804},[97,129688,129562],{"class":111},[97,129690,1591],{"class":107},[97,129692,129645],{"class":111},[97,129694,323],{"class":103},[97,129696,392],{"class":370},[97,129698,129652],{"class":103},[97,129700,129344],{"class":370},[97,129702,51621],{"class":103},[97,129704,129705],{"class":370},"#00a4ff",[97,129707,129661],{"class":103},[97,129709,129710,129712,129714,129716,129718,129720,129722,129724,129726,129729],{"class":99,"line":1809},[97,129711,129562],{"class":111},[97,129713,1591],{"class":107},[97,129715,129645],{"class":111},[97,129717,323],{"class":103},[97,129719,613],{"class":370},[97,129721,129652],{"class":103},[97,129723,129344],{"class":370},[97,129725,51621],{"class":103},[97,129727,129728],{"class":370},"#ff00ff",[97,129730,129661],{"class":103},[97,129732,129733,129735,129737,129739,129741,129743,129745,129747,129749,129752],{"class":99,"line":1815},[97,129734,129562],{"class":111},[97,129736,1591],{"class":107},[97,129738,129645],{"class":111},[97,129740,323],{"class":103},[97,129742,639],{"class":370},[97,129744,129652],{"class":103},[97,129746,129344],{"class":370},[97,129748,51621],{"class":103},[97,129750,129751],{"class":370},"#00ff00",[97,129753,129661],{"class":103},[14,129755,129757],{"id":129756},"_83-css三大特性","8.3 css三大特性",[48,129759,129761],{"id":129760},"_831-层叠性","8.3.1 层叠性",[24,129763,129764],{},"为了解决样式冲突问题",[24,129766,129767],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[24,129769,129770],{},"   ②样式不冲突，不会层叠",[48,129772,129774],{"id":129773},"_832-继承性","8.3.2 继承性",[24,129776,129777],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[24,129779,129780],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[87,129782,129784],{"className":182,"code":129783,"language":184,"meta":92,"style":92},"p {\n  color: #333;\n}\n",[94,129785,129786,129792,129802],{"__ignoreMap":92},[97,129787,129788,129790],{"class":99,"line":100},[97,129789,24],{"class":107},[97,129791,15762],{"class":103},[97,129793,129794,129796,129798,129800],{"class":99,"line":195},[97,129795,71089],{"class":370},[97,129797,51621],{"class":103},[97,129799,62553],{"class":370},[97,129801,1483],{"class":103},[97,129803,129804],{"class":99,"line":241},[97,129805,1757],{"class":103},[19,129807],{"style":21,"src":129808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[24,129810,129811],{},"解释：①行高可以跟单位也可以不跟单位",[24,129813,129814],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[24,129816,129817],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[24,129819,129820],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[48,129822,129824],{"id":129823},"_833-优先级","8.3.3 优先级",[138,129826,129827,129830],{},[70,129828,129829],{},"选择器相同，则执行层叠性",[70,129831,129832],{},"选择器不同，则根据选择器权重执行",[457,129834,129835,129845],{},[460,129836,129837],{},[463,129838,129839,129842],{},[466,129840,129841],{"align":23925},"选择器",[466,129843,129844],{"align":23925},"选择器权重",[504,129846,129847,129855,129863,129871,129879,129887],{},[463,129848,129849,129852],{},[509,129850,129851],{"align":23925},"继承 或者*",[509,129853,129854],{"align":23925},"0，0，0，0",[463,129856,129857,129860],{},[509,129858,129859],{"align":23925},"标签选择器",[509,129861,129862],{"align":23925},"0，0，0，1",[463,129864,129865,129868],{},[509,129866,129867],{"align":23925},"类选择器，伪类选择器",[509,129869,129870],{"align":23925},"0，0，1，0",[463,129872,129873,129876],{},[509,129874,129875],{"align":23925},"ID选择器",[509,129877,129878],{"align":23925},"0，1，0，0",[463,129880,129881,129884],{},[509,129882,129883],{"align":23925},"行内样式",[509,129885,129886],{"align":23925},"1，0，0，0",[463,129888,129889,129892],{},[509,129890,129891],{"align":23925},"！important",[509,129893,129894],{"align":23925},"无穷大",[24,129896,129897],{},"! important用法：",[87,129899,129901],{"className":182,"code":129900,"language":184,"meta":92,"style":92},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[94,129902,129903,129908,129914,129927,129931,129936,129942,129952],{"__ignoreMap":92},[97,129904,129905],{"class":99,"line":100},[97,129906,129907],{"class":191},"\u002F* !important 拥有最高优先级 *\u002F\n",[97,129909,129910,129912],{"class":99,"line":195},[97,129911,51795],{"class":107},[97,129913,15762],{"class":103},[97,129915,129916,129918,129920,129922,129925],{"class":99,"line":241},[97,129917,71089],{"class":370},[97,129919,51621],{"class":103},[97,129921,51829],{"class":370},[97,129923,129924],{"class":319}," !important",[97,129926,1483],{"class":103},[97,129928,129929],{"class":99,"line":1387},[97,129930,1757],{"class":103},[97,129932,129933],{"class":99,"line":1393},[97,129934,129935],{"class":191},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[97,129937,129938,129940],{"class":99,"line":1407},[97,129939,51795],{"class":107},[97,129941,15762],{"class":103},[97,129943,129944,129946,129948,129950],{"class":99,"line":1413},[97,129945,71089],{"class":370},[97,129947,51621],{"class":103},[97,129949,57605],{"class":370},[97,129951,1483],{"class":103},[97,129953,129954],{"class":99,"line":1504},[97,129955,1757],{"class":103},[24,129957,129958],{},"优先级注意点：",[24,129960,129961],{},"①权重是有4组数字组成,但是不会有进位",[24,129963,129964],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[24,129966,129967],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[24,129969,129970],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[24,129972,129973],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[24,129975,129976],{},"⑥复合选择器",[457,129978,129979,129989],{},[460,129980,129981],{},[463,129982,129983,129986],{},[466,129984,129985],{"align":23925},"div ul li",[466,129987,129988],{"align":23925},"0,0,0,3",[504,129990,129991,129999,130007],{},[463,129992,129993,129996],{},[509,129994,129995],{"align":23925},".nav ul li",[509,129997,129998],{"align":23925},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[463,130000,130001,130004],{},[509,130002,130003],{"align":23925},"a:hover",[509,130005,130006],{"align":23925},"0,0,1,1",[463,130008,130009,130012],{},[509,130010,130011],{"align":23925},".nav a",[509,130013,130006],{"align":23925},[231,130015,130016],{},"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":92,"searchDepth":195,"depth":195,"links":130018},[130019,130027,130038],{"id":128127,"depth":195,"text":128128,"children":130020},[130021,130022,130023,130024,130025,130026],{"id":128140,"depth":241,"text":128141},{"id":128212,"depth":241,"text":128213},{"id":128284,"depth":241,"text":128285},{"id":128315,"depth":241,"text":128316},{"id":128322,"depth":241,"text":128323},{"id":128475,"depth":241,"text":128476},{"id":128783,"depth":195,"text":128784,"children":130028},[130029,130030,130031,130032,130033,130034,130035,130036,130037],{"id":128790,"depth":241,"text":128791},{"id":128800,"depth":241,"text":128801},{"id":128896,"depth":241,"text":128897},{"id":128969,"depth":241,"text":128970},{"id":129124,"depth":241,"text":129125},{"id":129212,"depth":241,"text":129213},{"id":129264,"depth":241,"text":129265},{"id":129323,"depth":241,"text":129324},{"id":129428,"depth":241,"text":129429},{"id":129756,"depth":195,"text":129757,"children":130039},[130040,130041,130042],{"id":129760,"depth":241,"text":129761},{"id":129773,"depth":241,"text":129774},{"id":129823,"depth":241,"text":129824},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128119,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130049,"title":130050,"body":130051,"description":246,"extension":247,"meta":131641,"navigation":249,"path":131642,"seo":131643,"stem":131644,"__hash__":131645},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130052,"toc":131620},[130053,130056,130060,130063,130066,130069,130072,130075,130078,130081,130085,130093,130130,130166,130169,130183,130188,130222,130225,130318,130323,130326,130356,130359,130364,130372,130376,130383,130429,130473,130478,130481,130484,130487,130490,130493,130496,130498,130501,130505,130510,130554,130559,130562,130565,130602,130607,130610,130613,130616,130619,130651,130654,130657,130660,130692,130695,130698,130701,130705,130708,130740,130743,130747,130767,130770,130778,130781,130785,130790,130793,130825,130830,130833,130871,130875,130880,130883,130886,130917,130920,130937,130942,130994,131054,131059,131113,131151,131155,131159,131162,131166,131174,131177,131179,131190,131195,131243,131277,131280,131283,131286,131289,131333,131336,131339,131342,131345,131348,131351,131395,131398,131401,131404,131407,131410,131413,131419,131422,131466,131469,131472,131475,131478,131481,131525,131528,131530,131533,131537,131541,131579,131583,131586,131589,131593,131601,131605,131608,131611,131614,131617],[10,130054,130050],{"id":130055},"_9-css盒模型浮动与切图",[14,130057,130059],{"id":130058},"_91-盒子模型","9.1 盒子模型",[24,130061,130062],{},"利用盒子来设计网页",[24,130064,130065],{},"盒子包含：边框、外边距、内边距、实际内容",[24,130067,130068],{},"网页布局设置：",[24,130070,130071],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[24,130073,130074],{},"②利用css设置好盒子样式，然后摆放到相应位置",[24,130076,130077],{},"③往盒子里装内容",[19,130079],{"style":21,"src":130080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[48,130082,130084],{"id":130083},"_911-边框border","9.1.1 边框（border）",[138,130086,130087,130090],{},[70,130088,130089],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[70,130091,130092],{},"语法",[87,130094,130096],{"className":182,"code":130095,"language":184,"meta":92,"style":92},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[94,130097,130098,130103,130109,130126],{"__ignoreMap":92},[97,130099,130100],{"class":99,"line":100},[97,130101,130102],{"class":191},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[97,130104,130105,130107],{"class":99,"line":195},[97,130106,51795],{"class":107},[97,130108,15762],{"class":103},[97,130110,130111,130113,130115,130117,130119,130121,130124],{"class":99,"line":241},[97,130112,71080],{"class":370},[97,130114,51621],{"class":103},[97,130116,537],{"class":370},[97,130118,51676],{"class":319},[97,130120,51705],{"class":370},[97,130122,130123],{"class":370}," #ccc",[97,130125,1483],{"class":103},[97,130127,130128],{"class":99,"line":1387},[97,130129,1757],{"class":103},[457,130131,130132,130140],{},[460,130133,130134],{},[463,130135,130136,130138],{},[466,130137,129333],{"align":23925},[466,130139,102880],{"align":23925},[504,130141,130142,130150,130158],{},[463,130143,130144,130147],{},[509,130145,130146],{"align":23925},"border-width",[509,130148,130149],{"align":23925},"定义边框粗细，单位是px",[463,130151,130152,130155],{},[509,130153,130154],{"align":23925},"border-style",[509,130156,130157],{"align":23925},"边框的样式",[463,130159,130160,130163],{},[509,130161,130162],{"align":23925},"border-color",[509,130164,130165],{"align":23925},"边框的颜色",[24,130167,130168],{},"边框样式 border-style 可以设置如下值：",[67,130170,130171,130174,130177,130180],{},[70,130172,130173],{},"none：没有边框即忽略所有边框的宽度（默认值）",[70,130175,130176],{},"solid：边框为单实线(最为常用的)",[70,130178,130179],{},"dashed：边框为虚线",[70,130181,130182],{},"dotted：边框为点线",[138,130184,130185],{"start":241},[70,130186,130187],{},"边框的合写分写",[87,130189,130190],{"className":182,"code":130095,"language":184,"meta":92,"style":92},[94,130191,130192,130196,130202,130218],{"__ignoreMap":92},[97,130193,130194],{"class":99,"line":100},[97,130195,130102],{"class":191},[97,130197,130198,130200],{"class":99,"line":195},[97,130199,51795],{"class":107},[97,130201,15762],{"class":103},[97,130203,130204,130206,130208,130210,130212,130214,130216],{"class":99,"line":241},[97,130205,71080],{"class":370},[97,130207,51621],{"class":103},[97,130209,537],{"class":370},[97,130211,51676],{"class":319},[97,130213,51705],{"class":370},[97,130215,130123],{"class":370},[97,130217,1483],{"class":103},[97,130219,130220],{"class":99,"line":1387},[97,130221,1757],{"class":103},[24,130223,130224],{},"边框分开写法：",[87,130226,130228],{"className":182,"code":130227,"language":184,"meta":92,"style":92},"\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",[94,130229,130230,130235,130241,130259,130277,130296,130314],{"__ignoreMap":92},[97,130231,130232],{"class":99,"line":100},[97,130233,130234],{"class":191},"\u002F* 边框分开写法 *\u002F\n",[97,130236,130237,130239],{"class":99,"line":195},[97,130238,51795],{"class":107},[97,130240,15762],{"class":103},[97,130242,130243,130246,130248,130250,130252,130254,130257],{"class":99,"line":241},[97,130244,130245],{"class":370},"  border-top",[97,130247,51621],{"class":103},[97,130249,537],{"class":370},[97,130251,51676],{"class":319},[97,130253,51705],{"class":370},[97,130255,130256],{"class":370}," #000",[97,130258,1483],{"class":103},[97,130260,130261,130264,130266,130268,130270,130272,130275],{"class":99,"line":1387},[97,130262,130263],{"class":370},"  border-right",[97,130265,51621],{"class":103},[97,130267,398],{"class":370},[97,130269,51676],{"class":319},[97,130271,62425],{"class":370},[97,130273,130274],{"class":370}," #333",[97,130276,1483],{"class":103},[97,130278,130279,130282,130284,130286,130288,130291,130294],{"class":99,"line":1393},[97,130280,130281],{"class":370},"  border-bottom",[97,130283,51621],{"class":103},[97,130285,392],{"class":370},[97,130287,51676],{"class":319},[97,130289,130290],{"class":370}," dotted",[97,130292,130293],{"class":370}," #666",[97,130295,1483],{"class":103},[97,130297,130298,130301,130303,130305,130307,130309,130312],{"class":99,"line":1407},[97,130299,130300],{"class":370},"  border-left",[97,130302,51621],{"class":103},[97,130304,537],{"class":370},[97,130306,51676],{"class":319},[97,130308,51705],{"class":370},[97,130310,130311],{"class":370}," #999",[97,130313,1483],{"class":103},[97,130315,130316],{"class":99,"line":1413},[97,130317,1757],{"class":103},[138,130319,130320],{"start":1387},[70,130321,130322],{},"表格的细线边框",[24,130324,130325],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[87,130327,130329],{"className":182,"code":130328,"language":184,"meta":92,"style":92},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[94,130330,130331,130336,130342,130352],{"__ignoreMap":92},[97,130332,130333],{"class":99,"line":100},[97,130334,130335],{"class":191},"\u002F* 表格细线边框合并 *\u002F\n",[97,130337,130338,130340],{"class":99,"line":195},[97,130339,457],{"class":107},[97,130341,15762],{"class":103},[97,130343,130344,130346,130348,130350],{"class":99,"line":241},[97,130345,70762],{"class":370},[97,130347,51621],{"class":103},[97,130349,65219],{"class":370},[97,130351,1483],{"class":103},[97,130353,130354],{"class":99,"line":1387},[97,130355,1757],{"class":103},[24,130357,130358],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[138,130360,130361],{"start":1393},[70,130362,130363],{},"解决边框额外增加盒子的实际大小的方法：",[67,130365,130366,130369],{},[70,130367,130368],{},"测量盒子大小的时候,不量边框",[70,130370,130371],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[48,130373,130375],{"id":130374},"_912-内边距","9.1.2 内边距",[138,130377,130378,130381],{},[70,130379,130380],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[70,130382,130092],{},[457,130384,130385,130395],{},[460,130386,130387],{},[463,130388,130389,130392],{},[466,130390,130391],{"align":23925},"值的个数",[466,130393,130394],{"align":23925},"表达意思",[504,130396,130397,130405,130413,130421],{},[463,130398,130399,130402],{},[509,130400,130401],{"align":23925},"padding: 5px;",[509,130403,130404],{"align":23925},"1个值，代表上下左右都有5个元素",[463,130406,130407,130410],{},[509,130408,130409],{"align":23925},"padding: 5px 10px;",[509,130411,130412],{"align":23925},"2个值，代表上下内边距为5像素，左右内边距为10像素",[463,130414,130415,130418],{},[509,130416,130417],{"align":23925},"padding: 5px 10px 20px;",[509,130419,130420],{"align":23925},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[463,130422,130423,130426],{},[509,130424,130425],{"align":23925},"padding: 5px 10px 20px 30px;",[509,130427,130428],{"align":23925},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[457,130430,130431,130439],{},[460,130432,130433],{},[463,130434,130435,130437],{},[466,130436,129333],{"align":23925},[466,130438,102880],{"align":23925},[504,130440,130441,130449,130457,130465],{},[463,130442,130443,130446],{},[509,130444,130445],{"align":23925},"padding-left",[509,130447,130448],{"align":23925},"左内边距",[463,130450,130451,130454],{},[509,130452,130453],{"align":23925},"padding-right",[509,130455,130456],{"align":23925},"右内边距",[463,130458,130459,130462],{},[509,130460,130461],{"align":23925},"padding-top",[509,130463,130464],{"align":23925},"上内边距",[463,130466,130467,130470],{},[509,130468,130469],{"align":23925},"padding-bottom",[509,130471,130472],{"align":23925},"下内边距",[138,130474,130475],{"start":241},[70,130476,130477],{},"内边距会影响盒子的实际大小",[24,130479,130480],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[24,130482,130483],{},"①内容和边框有了距离，添加了内边距",[24,130485,130486],{},"②padding影响了盒子实际大小",[24,130488,130489],{},"内边距对盒子大小的影响：",[24,130491,130492],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[24,130494,130495],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[24,130497,95404],{},[24,130499,130500],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[48,130502,130504],{"id":130503},"_913-外边距","9.1.3 外边距",[138,130506,130507],{},[70,130508,130509],{},"控制盒子与盒子之间的距离",[457,130511,130512,130520],{},[460,130513,130514],{},[463,130515,130516,130518],{},[466,130517,129333],{"align":23925},[466,130519,102880],{"align":23925},[504,130521,130522,130530,130538,130546],{},[463,130523,130524,130527],{},[509,130525,130526],{"align":23925},"margin-left",[509,130528,130529],{"align":23925},"左外边距",[463,130531,130532,130535],{},[509,130533,130534],{"align":23925},"margin-right",[509,130536,130537],{"align":23925},"右外边距",[463,130539,130540,130543],{},[509,130541,130542],{"align":23925},"margin-top",[509,130544,130545],{"align":23925},"上外边距",[463,130547,130548,130551],{},[509,130549,130550],{"align":23925},"margin-bottom",[509,130552,130553],{"align":23925},"下外边距",[138,130555,130556],{"start":195},[70,130557,130558],{},"外边距可以让块级盒子水平居中的两个条件：",[24,130560,130561],{},"①盒子必须指定了宽度（width）",[24,130563,130564],{},"②盒子左右的外边距都设置为 auto",[87,130566,130568],{"className":182,"code":130567,"language":184,"meta":92,"style":92},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[94,130569,130570,130575,130582,130598],{"__ignoreMap":92},[97,130571,130572],{"class":99,"line":100},[97,130573,130574],{"class":191},"\u002F* margin 复合写法（同上） *\u002F\n",[97,130576,130577,130580],{"class":99,"line":195},[97,130578,130579],{"class":111},".box",[97,130581,15762],{"class":103},[97,130583,130584,130586,130588,130590,130592,130595],{"class":99,"line":241},[97,130585,70654],{"class":370},[97,130587,51621],{"class":103},[97,130589,511],{"class":370},[97,130591,51740],{"class":370},[97,130593,130594],{"class":103},";  ",[97,130596,130597],{"class":191},"\u002F* 块级盒子水平居中 *\u002F\n",[97,130599,130600],{"class":99,"line":1387},[97,130601,1757],{"class":103},[138,130603,130604],{"start":241},[70,130605,130606],{},"外边距塌陷问题",[24,130608,130609],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[19,130611],{"style":21,"src":130612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[24,130614,130615],{},"解决方案：",[24,130617,130618],{},"①可以为父亲元素定义上边距",[87,130620,130621],{"className":182,"code":130567,"language":184,"meta":92,"style":92},[94,130622,130623,130627,130633,130647],{"__ignoreMap":92},[97,130624,130625],{"class":99,"line":100},[97,130626,130574],{"class":191},[97,130628,130629,130631],{"class":99,"line":195},[97,130630,130579],{"class":111},[97,130632,15762],{"class":103},[97,130634,130635,130637,130639,130641,130643,130645],{"class":99,"line":241},[97,130636,70654],{"class":370},[97,130638,51621],{"class":103},[97,130640,511],{"class":370},[97,130642,51740],{"class":370},[97,130644,130594],{"class":103},[97,130646,130597],{"class":191},[97,130648,130649],{"class":99,"line":1387},[97,130650,1757],{"class":103},[24,130652,130653],{},"②可以为父亲元素定义上内边距",[24,130655,130656],{},"③可以为父亲元素添加overflow:hidden",[19,130658],{"style":21,"src":130659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[87,130661,130662],{"className":182,"code":130567,"language":184,"meta":92,"style":92},[94,130663,130664,130668,130674,130688],{"__ignoreMap":92},[97,130665,130666],{"class":99,"line":100},[97,130667,130574],{"class":191},[97,130669,130670,130672],{"class":99,"line":195},[97,130671,130579],{"class":111},[97,130673,15762],{"class":103},[97,130675,130676,130678,130680,130682,130684,130686],{"class":99,"line":241},[97,130677,70654],{"class":370},[97,130679,51621],{"class":103},[97,130681,511],{"class":370},[97,130683,51740],{"class":370},[97,130685,130594],{"class":103},[97,130687,130597],{"class":191},[97,130689,130690],{"class":99,"line":1387},[97,130691,1757],{"class":103},[19,130693],{"style":21,"src":130694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[24,130696,130697],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[24,130699,130700],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[48,130702,130704],{"id":130703},"_914-清除内外边距","9.1.4 清除内外边距",[24,130706,130707],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[87,130709,130710],{"className":182,"code":130567,"language":184,"meta":92,"style":92},[94,130711,130712,130716,130722,130736],{"__ignoreMap":92},[97,130713,130714],{"class":99,"line":100},[97,130715,130574],{"class":191},[97,130717,130718,130720],{"class":99,"line":195},[97,130719,130579],{"class":111},[97,130721,15762],{"class":103},[97,130723,130724,130726,130728,130730,130732,130734],{"class":99,"line":241},[97,130725,70654],{"class":370},[97,130727,51621],{"class":103},[97,130729,511],{"class":370},[97,130731,51740],{"class":370},[97,130733,130594],{"class":103},[97,130735,130597],{"class":191},[97,130737,130738],{"class":99,"line":1387},[97,130739,1757],{"class":103},[24,130741,130742],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[48,130744,130746],{"id":130745},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[67,130748,130749,130752,130755,130758,130761,130764],{},[70,130750,130751],{},"文件→打开 ：可以打开我们要测量的图片",[70,130753,130754],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[70,130756,130757],{},"右击标尺，把里面的单位改为像素",[70,130759,130760],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[70,130762,130763],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[70,130765,130766],{},"用选区拖动 可以测量大小",[19,130768],{"style":21,"src":130769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[67,130771,130772,130775],{},[70,130773,130774],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[70,130776,130777],{},"吸管取色工具",[19,130779],{"style":21,"src":130780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[48,130782,130784],{"id":130783},"_916-案例","9.1.6 案例",[138,130786,130787],{},[70,130788,130789],{},"小米商品",[19,130791],{"style":21,"src":130792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[87,130794,130795],{"className":182,"code":130567,"language":184,"meta":92,"style":92},[94,130796,130797,130801,130807,130821],{"__ignoreMap":92},[97,130798,130799],{"class":99,"line":100},[97,130800,130574],{"class":191},[97,130802,130803,130805],{"class":99,"line":195},[97,130804,130579],{"class":111},[97,130806,15762],{"class":103},[97,130808,130809,130811,130813,130815,130817,130819],{"class":99,"line":241},[97,130810,70654],{"class":370},[97,130812,51621],{"class":103},[97,130814,511],{"class":370},[97,130816,51740],{"class":370},[97,130818,130594],{"class":103},[97,130820,130597],{"class":191},[97,130822,130823],{"class":99,"line":1387},[97,130824,1757],{"class":103},[138,130826,130827],{"start":195},[70,130828,130829],{},"快报模块",[19,130831],{"style":21,"src":130832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[87,130834,130836],{"className":89,"code":130835,"language":91,"meta":92,"style":92},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[94,130837,130838,130843,130858,130863],{"__ignoreMap":92},[97,130839,130840],{"class":99,"line":100},[97,130841,130842],{"class":191},"\u003C!-- HTML 代码示例 -->\n",[97,130844,130845,130847,130849,130851,130853,130856],{"class":99,"line":195},[97,130846,104],{"class":103},[97,130848,51795],{"class":107},[97,130850,53670],{"class":111},[97,130852,115],{"class":103},[97,130854,130855],{"class":118},"\"example\"",[97,130857,130],{"class":103},[97,130859,130860],{"class":99,"line":241},[97,130861,130862],{"class":103},"  示例内容\n",[97,130864,130865,130867,130869],{"class":99,"line":1387},[97,130866,51969],{"class":103},[97,130868,51795],{"class":107},[97,130870,130],{"class":103},[48,130872,130874],{"id":130873},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[138,130876,130877],{},[70,130878,130879],{},"圆角边框",[24,130881,130882],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[19,130884],{"style":21,"src":130885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[87,130887,130889],{"className":182,"code":130888,"language":184,"meta":92,"style":92},"div {\n  border: 1px solid #ccc;\n}\n",[94,130890,130891,130897,130913],{"__ignoreMap":92},[97,130892,130893,130895],{"class":99,"line":100},[97,130894,51795],{"class":107},[97,130896,15762],{"class":103},[97,130898,130899,130901,130903,130905,130907,130909,130911],{"class":99,"line":195},[97,130900,71080],{"class":370},[97,130902,51621],{"class":103},[97,130904,537],{"class":370},[97,130906,51676],{"class":319},[97,130908,51705],{"class":370},[97,130910,130123],{"class":370},[97,130912,1483],{"class":103},[97,130914,130915],{"class":99,"line":241},[97,130916,1757],{"class":103},[24,130918,130919],{},"解释:",[67,130921,130922,130925,130928,130931,130934],{},[70,130923,130924],{},"参数值可以为数值或百分比的形式",[70,130926,130927],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[70,130929,130930],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[70,130932,130933],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[70,130935,130936],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[138,130938,130939],{"start":195},[70,130940,130941],{},"盒子阴影",[87,130943,130945],{"className":182,"code":130944,"language":184,"meta":92,"style":92},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[94,130946,130947,130953,130990],{"__ignoreMap":92},[97,130948,130949,130951],{"class":99,"line":100},[97,130950,51795],{"class":107},[97,130952,15762],{"class":103},[97,130954,130955,130958,130960,130962,130964,130966,130968,130970,130972,130974,130976,130978,130980,130982,130984,130986,130988],{"class":99,"line":195},[97,130956,130957],{"class":370},"  box-shadow",[97,130959,51621],{"class":103},[97,130961,511],{"class":370},[97,130963,14946],{"class":370},[97,130965,51676],{"class":319},[97,130967,2229],{"class":370},[97,130969,51676],{"class":319},[97,130971,78951],{"class":370},[97,130973,323],{"class":103},[97,130975,511],{"class":370},[97,130977,12626],{"class":103},[97,130979,511],{"class":370},[97,130981,12626],{"class":103},[97,130983,511],{"class":370},[97,130985,12626],{"class":103},[97,130987,86394],{"class":370},[97,130989,2910],{"class":103},[97,130991,130992],{"class":99,"line":241},[97,130993,1757],{"class":103},[457,130995,130996,131004],{},[460,130997,130998],{},[463,130999,131000,131002],{},[466,131001,472],{"align":23925},[466,131003,27679],{"align":23925},[504,131005,131006,131014,131022,131030,131038,131046],{},[463,131007,131008,131011],{},[509,131009,131010],{"align":23925},"h-shadow",[509,131012,131013],{"align":23925},"必需,水平阴影的位置,允许负值",[463,131015,131016,131019],{},[509,131017,131018],{"align":23925},"v-shadow",[509,131020,131021],{"align":23925},"必需,垂直阴影的位置,允许负值",[463,131023,131024,131027],{},[509,131025,131026],{"align":23925},"blur",[509,131028,131029],{"align":23925},"可选,模糊距离,就是影子的虚实",[463,131031,131032,131035],{},[509,131033,131034],{"align":23925},"spread",[509,131036,131037],{"align":23925},"可选,阴影尺寸",[463,131039,131040,131043],{},[509,131041,131042],{"align":23925},"color",[509,131044,131045],{"align":23925},"可选,阴影的颜色",[463,131047,131048,131051],{},[509,131049,131050],{"align":23925},"inset",[509,131052,131053],{"align":23925},"可选,将外部阴影(outset)改为内部阴影",[138,131055,131056],{"start":241},[70,131057,131058],{},"文字阴影",[87,131060,131062],{"className":182,"code":131061,"language":184,"meta":92,"style":92},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[94,131063,131064,131070,131109],{"__ignoreMap":92},[97,131065,131066,131068],{"class":99,"line":100},[97,131067,24],{"class":107},[97,131069,15762],{"class":103},[97,131071,131072,131075,131077,131079,131081,131083,131085,131087,131089,131091,131093,131095,131097,131099,131101,131103,131105,131107],{"class":99,"line":195},[97,131073,131074],{"class":370},"  text-shadow",[97,131076,51621],{"class":103},[97,131078,537],{"class":370},[97,131080,51676],{"class":319},[97,131082,25308],{"class":370},[97,131084,51676],{"class":319},[97,131086,14946],{"class":370},[97,131088,51676],{"class":319},[97,131090,78951],{"class":370},[97,131092,323],{"class":103},[97,131094,511],{"class":370},[97,131096,12626],{"class":103},[97,131098,511],{"class":370},[97,131100,12626],{"class":103},[97,131102,511],{"class":370},[97,131104,12626],{"class":103},[97,131106,100705],{"class":370},[97,131108,2910],{"class":103},[97,131110,131111],{"class":99,"line":241},[97,131112,1757],{"class":103},[457,131114,131115,131123],{},[460,131116,131117],{},[463,131118,131119,131121],{},[466,131120,472],{"align":23925},[466,131122,27679],{"align":23925},[504,131124,131125,131131,131138,131145],{},[463,131126,131127,131129],{},[509,131128,131010],{"align":23925},[509,131130,131013],{"align":23925},[463,131132,131133,131135],{},[509,131134,131018],{"align":23925},[509,131136,131137],{"align":23925},"必需,垂直阴影位置,允许负值",[463,131139,131140,131142],{},[509,131141,131026],{"align":23925},[509,131143,131144],{"align":23925},"可选,模糊的距离",[463,131146,131147,131149],{},[509,131148,131042],{"align":23925},[509,131150,131045],{"align":23925},[14,131152,131154],{"id":131153},"_92-浮动","9.2 浮动",[48,131156,131158],{"id":131157},"_921-浮动介绍","9.2.1 浮动介绍",[24,131160,131161],{},"在16.2中详细介绍",[48,131163,131165],{"id":131164},"_922-清除浮动","9.2.2 清除浮动",[138,131167,131168,131171],{},[70,131169,131170],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[70,131172,131173],{},"清除浮动的本质",[24,131175,131176],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[24,131178,9216],{},[67,131180,131181,131184,131187],{},[70,131182,131183],{},"如果父盒子本身有高度，则不需要清除浮动",[70,131185,131186],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[70,131188,131189],{},"父级有了高度，就不会影响下面的标准流了",[138,131191,131192],{"start":241},[70,131193,131194],{},"清除浮动样式",[87,131196,131198],{"className":182,"code":131197,"language":184,"meta":92,"style":92},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[94,131199,131200,131207,131218,131222,131229,131239],{"__ignoreMap":92},[97,131201,131202,131205],{"class":99,"line":100},[97,131203,131204],{"class":111},".left",[97,131206,15762],{"class":103},[97,131208,131209,131212,131214,131216],{"class":99,"line":195},[97,131210,131211],{"class":370},"  float",[97,131213,51621],{"class":103},[97,131215,23925],{"class":370},[97,131217,1483],{"class":103},[97,131219,131220],{"class":99,"line":241},[97,131221,1757],{"class":103},[97,131223,131224,131227],{"class":99,"line":1387},[97,131225,131226],{"class":111},".right",[97,131228,15762],{"class":103},[97,131230,131231,131233,131235,131237],{"class":99,"line":1393},[97,131232,131211],{"class":370},[97,131234,51621],{"class":103},[97,131236,72706],{"class":370},[97,131238,1483],{"class":103},[97,131240,131241],{"class":99,"line":1407},[97,131242,1757],{"class":103},[457,131244,131245,131253],{},[460,131246,131247],{},[463,131248,131249,131251],{},[466,131250,127197],{"align":23925},[466,131252,27679],{"align":23925},[504,131254,131255,131262,131269],{},[463,131256,131257,131259],{},[509,131258,23925],{"align":23925},[509,131260,131261],{"align":23925},"不允许左侧有浮动元素（清除左侧浮动的影响）",[463,131263,131264,131266],{},[509,131265,72706],{"align":23925},[509,131267,131268],{"align":23925},"不允许右侧有浮动元素（清除右侧浮动的影响）",[463,131270,131271,131274],{},[509,131272,131273],{"align":23925},"both",[509,131275,131276],{"align":23925},"同时清除左右侧浮动的影响",[24,131278,131279],{},"法一",[24,131281,131282],{},"额外标签法也称为隔墙法",[24,131284,131285],{},"使用方式：",[24,131287,131288],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[87,131290,131291],{"className":182,"code":131197,"language":184,"meta":92,"style":92},[94,131292,131293,131299,131309,131313,131319,131329],{"__ignoreMap":92},[97,131294,131295,131297],{"class":99,"line":100},[97,131296,131204],{"class":111},[97,131298,15762],{"class":103},[97,131300,131301,131303,131305,131307],{"class":99,"line":195},[97,131302,131211],{"class":370},[97,131304,51621],{"class":103},[97,131306,23925],{"class":370},[97,131308,1483],{"class":103},[97,131310,131311],{"class":99,"line":241},[97,131312,1757],{"class":103},[97,131314,131315,131317],{"class":99,"line":1387},[97,131316,131226],{"class":111},[97,131318,15762],{"class":103},[97,131320,131321,131323,131325,131327],{"class":99,"line":1393},[97,131322,131211],{"class":370},[97,131324,51621],{"class":103},[97,131326,72706],{"class":370},[97,131328,1483],{"class":103},[97,131330,131331],{"class":99,"line":1407},[97,131332,1757],{"class":103},[24,131334,131335],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[24,131337,131338],{},"优点： 通俗易懂，书写方便",[24,131340,131341],{},"缺点： 添加许多无意义的标签，结构化较差",[24,131343,131344],{},"注意： 要求这个新的空标签必须是块级元素。",[24,131346,131347],{},"法二",[24,131349,131350],{},"父级添加overflow属性",[87,131352,131353],{"className":182,"code":131197,"language":184,"meta":92,"style":92},[94,131354,131355,131361,131371,131375,131381,131391],{"__ignoreMap":92},[97,131356,131357,131359],{"class":99,"line":100},[97,131358,131204],{"class":111},[97,131360,15762],{"class":103},[97,131362,131363,131365,131367,131369],{"class":99,"line":195},[97,131364,131211],{"class":370},[97,131366,51621],{"class":103},[97,131368,23925],{"class":370},[97,131370,1483],{"class":103},[97,131372,131373],{"class":99,"line":241},[97,131374,1757],{"class":103},[97,131376,131377,131379],{"class":99,"line":1387},[97,131378,131226],{"class":111},[97,131380,15762],{"class":103},[97,131382,131383,131385,131387,131389],{"class":99,"line":1393},[97,131384,131211],{"class":370},[97,131386,51621],{"class":103},[97,131388,72706],{"class":370},[97,131390,1483],{"class":103},[97,131392,131393],{"class":99,"line":1407},[97,131394,1757],{"class":103},[24,131396,131397],{},"overflow: hidden;",[24,131399,131400],{},"优点：代码简洁",[24,131402,131403],{},"缺点：无法显示溢出的部分",[24,131405,131406],{},"注意：是给父元素添加代码",[24,131408,131409],{},"法三",[24,131411,131412],{},"父级添加after伪元素",[24,131414,131415,131418],{},[131416,131417],"after",{}," 方式是额外标签法的升级版",[24,131420,131421],{},"使用的时候复制就可以",[87,131423,131424],{"className":182,"code":131197,"language":184,"meta":92,"style":92},[94,131425,131426,131432,131442,131446,131452,131462],{"__ignoreMap":92},[97,131427,131428,131430],{"class":99,"line":100},[97,131429,131204],{"class":111},[97,131431,15762],{"class":103},[97,131433,131434,131436,131438,131440],{"class":99,"line":195},[97,131435,131211],{"class":370},[97,131437,51621],{"class":103},[97,131439,23925],{"class":370},[97,131441,1483],{"class":103},[97,131443,131444],{"class":99,"line":241},[97,131445,1757],{"class":103},[97,131447,131448,131450],{"class":99,"line":1387},[97,131449,131226],{"class":111},[97,131451,15762],{"class":103},[97,131453,131454,131456,131458,131460],{"class":99,"line":1393},[97,131455,131211],{"class":370},[97,131457,51621],{"class":103},[97,131459,72706],{"class":370},[97,131461,1483],{"class":103},[97,131463,131464],{"class":99,"line":1407},[97,131465,1757],{"class":103},[24,131467,131468],{},"优点：没有增加标签，结构更简单",[24,131470,131471],{},"缺点：照顾低版本浏览器",[24,131473,131474],{},"代表网站： 百度、淘宝网、网易等",[24,131476,131477],{},"法四",[24,131479,131480],{},"父级添加双伪元素",[87,131482,131483],{"className":182,"code":131197,"language":184,"meta":92,"style":92},[94,131484,131485,131491,131501,131505,131511,131521],{"__ignoreMap":92},[97,131486,131487,131489],{"class":99,"line":100},[97,131488,131204],{"class":111},[97,131490,15762],{"class":103},[97,131492,131493,131495,131497,131499],{"class":99,"line":195},[97,131494,131211],{"class":370},[97,131496,51621],{"class":103},[97,131498,23925],{"class":370},[97,131500,1483],{"class":103},[97,131502,131503],{"class":99,"line":241},[97,131504,1757],{"class":103},[97,131506,131507,131509],{"class":99,"line":1387},[97,131508,131226],{"class":111},[97,131510,15762],{"class":103},[97,131512,131513,131515,131517,131519],{"class":99,"line":1393},[97,131514,131211],{"class":370},[97,131516,51621],{"class":103},[97,131518,72706],{"class":370},[97,131520,1483],{"class":103},[97,131522,131523],{"class":99,"line":1407},[97,131524,1757],{"class":103},[24,131526,131527],{},"优点：代码更简洁",[24,131529,131471],{},[24,131531,131532],{},"代表网站：小米、腾讯等",[14,131534,131536],{"id":131535},"_93-ps切图","9.3 PS切图",[48,131538,131540],{"id":131539},"_931-常见图片格式","9.3.1 常见图片格式",[457,131542,131543,131553],{},[460,131544,131545],{},[463,131546,131547,131550],{},[466,131548,131549],{"align":23925},"jpg图像格式",[466,131551,131552],{"align":23925},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[504,131554,131555,131563,131571],{},[463,131556,131557,131560],{},[509,131558,131559],{"align":23925},"gif图像格式",[509,131561,131562],{"align":23925},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[463,131564,131565,131568],{},[509,131566,131567],{"align":23925},"png图像格式",[509,131569,131570],{"align":23925},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[463,131572,131573,131576],{},[509,131574,131575],{"align":23925},"PSD图像格式",[509,131577,131578],{"align":23925},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[48,131580,131582],{"id":131581},"_932-图层切图","9.3.2 图层切图",[24,131584,131585],{},"最简单的切图方式：右击图层 → 导出 → 切片",[24,131587,131588],{},"按住shift选中两个图层->图层菜单->合并图层",[48,131590,131592],{"id":131591},"_933-切片切图","9.3.3 切片切图",[67,131594,131595,131598],{},[70,131596,131597],{},"利用切片工具手动划出",[70,131599,131600],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[48,131602,131604],{"id":131603},"_934-切图步骤","9.3.4 切图步骤",[24,131606,131607],{},"用切片工具选中：",[19,131609],{"style":21,"src":131610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[24,131612,131613],{},"文件 -> 导出",[19,131615],{"style":21,"src":131616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[231,131618,131619],{},"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":92,"searchDepth":195,"depth":195,"links":131621},[131622,131631,131635],{"id":130058,"depth":195,"text":130059,"children":131623},[131624,131625,131626,131627,131628,131629,131630],{"id":130083,"depth":241,"text":130084},{"id":130374,"depth":241,"text":130375},{"id":130503,"depth":241,"text":130504},{"id":130703,"depth":241,"text":130704},{"id":130745,"depth":241,"text":130746},{"id":130783,"depth":241,"text":130784},{"id":130873,"depth":241,"text":130874},{"id":131153,"depth":195,"text":131154,"children":131632},[131633,131634],{"id":131157,"depth":241,"text":131158},{"id":131164,"depth":241,"text":131165},{"id":131535,"depth":195,"text":131536,"children":131636},[131637,131638,131639,131640],{"id":131539,"depth":241,"text":131540},{"id":131581,"depth":241,"text":131582},{"id":131591,"depth":241,"text":131592},{"id":131603,"depth":241,"text":131604},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130050,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131647,"title":131648,"body":131649,"description":246,"extension":247,"meta":132290,"navigation":249,"path":132291,"seo":132292,"stem":132293,"__hash__":132294},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131650,"toc":132278},[131651,131654,131658,131684,131718,131722,131726,131729,131771,131778,131788,131796,131798,131801,131804,131807,131814,131828,131832,131835,131864,131868,131871,131885,131889,131892,131920,131924,131927,131953,131957,131962,131995,132000,132028,132032,132049,132095,132100,132144,132161,132268,132276],[10,131652,131648],{"id":131653},"_10-css规范与学成在线案例",[14,131655,131657],{"id":131656},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[138,131659,131660,131666,131672,131678],{},[70,131661,131662,131665],{},[469,131663,131664],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[70,131667,131668,131671],{},[469,131669,131670],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[70,131673,131674,131677],{},[469,131675,131676],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[70,131679,131680,131683],{},[469,131681,131682],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[87,131685,131686],{"className":182,"code":130095,"language":184,"meta":92,"style":92},[94,131687,131688,131692,131698,131714],{"__ignoreMap":92},[97,131689,131690],{"class":99,"line":100},[97,131691,130102],{"class":191},[97,131693,131694,131696],{"class":99,"line":195},[97,131695,51795],{"class":107},[97,131697,15762],{"class":103},[97,131699,131700,131702,131704,131706,131708,131710,131712],{"class":99,"line":241},[97,131701,71080],{"class":370},[97,131703,51621],{"class":103},[97,131705,537],{"class":370},[97,131707,51676],{"class":319},[97,131709,51705],{"class":370},[97,131711,130123],{"class":370},[97,131713,1483],{"class":103},[97,131715,131716],{"class":99,"line":1387},[97,131717,1757],{"class":103},[14,131719,131721],{"id":131720},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[48,131723,131725],{"id":131724},"_1021-header头部制作","10.2.1 header头部制作",[19,131727],{"style":21,"src":131728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[67,131730,131731,131738,131745,131751,131758,131765],{},[70,131732,131733,131734,131737],{},"1号是版心盒子 ",[469,131735,131736],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[70,131739,131740,131741,131744],{},"版心盒子 里面包含 2号盒子 ",[469,131742,131743],{},"logo"," 图标",[70,131746,131747,131748,131750],{},"版心盒子 里面包含 3号盒子 ",[469,131749,53897],{}," 导航栏",[70,131752,131753,131754,131757],{},"版心盒子 里面包含 4号盒子 ",[469,131755,131756],{},"search"," 搜索框",[70,131759,131760,131761,131764],{},"版心盒子 里面包含 5号盒子 ",[469,131762,131763],{},"user"," 个人信息",[70,131766,131767,131768],{},"注意，要求里面的 ",[469,131769,131770],{},"4个子盒子 必须都浮动",[138,131772,131773],{},[70,131774,131775],{},[469,131776,131777],{},"导航栏注意点:",[24,131779,131780,131781,131784,131785],{},"实际开发中， ",[469,131782,131783],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[469,131786,131787],{},"用 li 包含链接(li+a)的做法",[67,131789,131790,131793],{},[70,131791,131792],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[70,131794,131795],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[24,131797,9216],{},[24,131799,131800],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[24,131802,131803],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[24,131805,131806],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[138,131808,131809],{"start":195},[70,131810,131811],{},[469,131812,131813],{},"4号盒子search的细节：",[67,131815,131816,131819,131822],{},[70,131817,131818],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[70,131820,131821],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[70,131823,131824,131827],{},[94,131825,131826],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[48,131829,131831],{"id":131830},"_1022-banner制作","10.2.2 banner制作",[19,131833],{"style":21,"src":131834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[67,131836,131837,131844,131850,131857],{},[70,131838,131839,131840,131843],{},"1号盒子是通栏的大盒子 ",[469,131841,131842],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[70,131845,131846,131847,131849],{},"2号盒子是版心 ",[469,131848,1115],{}," ， 要水平居中对齐",[70,131851,131852,131853,131856],{},"3号盒子版心内，左对齐 ",[469,131854,131855],{},"subnav"," 侧导航栏",[70,131858,131859,131860,131863],{},"4号盒子版心内，右对齐 ",[469,131861,131862],{},"course"," 课程",[48,131865,131867],{"id":131866},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[19,131869],{"style":21,"src":131870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[67,131872,131873,131876,131879,131882],{},[70,131874,131875],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[70,131877,131878],{},"1号盒子是标题 H3 左侧浮动",[70,131880,131881],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[70,131883,131884],{},"3号盒子 右浮动 mod 修改",[48,131886,131888],{"id":131887},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[19,131890],{"style":21,"src":131891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[67,131893,131894,131900,131907,131914,131917],{},[70,131895,131896,131897,131899],{},"1号盒子为最大的盒子 ",[469,131898,53898],{}," 版心水平居中对齐",[70,131901,131902,131903,131906],{},"2号盒子为上面部分 ",[469,131904,131905],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[70,131908,131909,131910,131913],{},"3号盒子为底下部分 ",[469,131911,131912],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[70,131915,131916],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[70,131918,131919],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[48,131921,131923],{"id":131922},"_1025-底部模块制作","10.2.5 底部模块制作",[19,131925],{"style":21,"src":131926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[67,131928,131929,131936,131939,131946],{},[70,131930,131931,131932,131935],{},"1号盒子通栏大盒子 底部 ",[469,131933,131934],{},"footer"," 给高度 底色是白色",[70,131937,131938],{},"2号盒子版心水平居中",[70,131940,131941,131942,131945],{},"3号盒子版权 ",[469,131943,131944],{},"copyright"," 左对齐",[70,131947,131948,131949,131952],{},"4号盒子 链接组 ",[469,131950,131951],{},"links"," 右对齐",[48,131954,131956],{"id":131955},"_1026-代码模块","10.2.6 代码模块",[138,131958,131959],{},[70,131960,131961],{},"html部分",[87,131963,131965],{"className":89,"code":131964,"language":91,"meta":92,"style":92},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[94,131966,131967],{"__ignoreMap":92},[97,131968,131969,131971,131973,131975,131977,131980,131983,131985,131988,131991,131993],{"class":99,"line":100},[97,131970,104],{"class":103},[97,131972,558],{"class":107},[97,131974,61241],{"class":111},[97,131976,115],{"class":103},[97,131978,131979],{"class":118},"\"https:\u002F\u002Fexample.com\"",[97,131981,131982],{"class":111}," target",[97,131984,115],{"class":103},[97,131986,131987],{"class":118},"\"_blank\"",[97,131989,131990],{"class":103},">链接文字\u003C\u002F",[97,131992,558],{"class":107},[97,131994,130],{"class":103},[138,131996,131997],{"start":195},[70,131998,131999],{},"css部分",[87,132001,132002],{"className":89,"code":131964,"language":91,"meta":92,"style":92},[94,132003,132004],{"__ignoreMap":92},[97,132005,132006,132008,132010,132012,132014,132016,132018,132020,132022,132024,132026],{"class":99,"line":100},[97,132007,104],{"class":103},[97,132009,558],{"class":107},[97,132011,61241],{"class":111},[97,132013,115],{"class":103},[97,132015,131979],{"class":118},[97,132017,131982],{"class":111},[97,132019,115],{"class":103},[97,132021,131987],{"class":118},[97,132023,131990],{"class":103},[97,132025,558],{"class":107},[97,132027,130],{"class":103},[48,132029,132031],{"id":132030},"_1027-收获","10.2.7 收获",[138,132033,132034,132037,132040,132043,132046],{},[70,132035,132036],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[70,132038,132039],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[70,132041,132042],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[70,132044,132045],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[70,132047,132048],{},"遗忘代码",[87,132050,132052],{"className":182,"code":132051,"language":184,"meta":92,"style":92},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[94,132053,132054,132076,132081,132091],{"__ignoreMap":92},[97,132055,132056,132058,132060,132062,132064,132066,132068,132070,132072,132074],{"class":99,"line":100},[97,132057,51795],{"class":107},[97,132059,12626],{"class":103},[97,132061,24],{"class":107},[97,132063,12626],{"class":103},[97,132065,10],{"class":107},[97,132067,12626],{"class":103},[97,132069,67],{"class":107},[97,132071,12626],{"class":103},[97,132073,70],{"class":107},[97,132075,15762],{"class":103},[97,132077,132078],{"class":99,"line":195},[97,132079,132080],{"class":191},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[97,132082,132083,132085,132087,132089],{"class":99,"line":241},[97,132084,128347],{"class":370},[97,132086,51621],{"class":103},[97,132088,61053],{"class":370},[97,132090,1483],{"class":103},[97,132092,132093],{"class":99,"line":1387},[97,132094,1757],{"class":103},[138,132096,132097],{"start":1407},[70,132098,132099],{},"html引css的程序",[87,132101,132102],{"className":182,"code":132051,"language":184,"meta":92,"style":92},[94,132103,132104,132126,132130,132140],{"__ignoreMap":92},[97,132105,132106,132108,132110,132112,132114,132116,132118,132120,132122,132124],{"class":99,"line":100},[97,132107,51795],{"class":107},[97,132109,12626],{"class":103},[97,132111,24],{"class":107},[97,132113,12626],{"class":103},[97,132115,10],{"class":107},[97,132117,12626],{"class":103},[97,132119,67],{"class":107},[97,132121,12626],{"class":103},[97,132123,70],{"class":107},[97,132125,15762],{"class":103},[97,132127,132128],{"class":99,"line":195},[97,132129,132080],{"class":191},[97,132131,132132,132134,132136,132138],{"class":99,"line":241},[97,132133,128347],{"class":370},[97,132135,51621],{"class":103},[97,132137,61053],{"class":370},[97,132139,1483],{"class":103},[97,132141,132142],{"class":99,"line":1387},[97,132143,1757],{"class":103},[138,132145,132146,132149,132152,132155,132158],{"start":1413},[70,132147,132148],{},"浮动的盒子不会有外边距合并问题",[70,132150,132151],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[70,132153,132154],{},"ctrl+g快速定位行；shift+alt多个光标",[70,132156,132157],{},"学习上方各个模块的选择器起名方法，以后就这样用",[70,132159,132160],{},"在写选择器时尽量写全一些，例如",[87,132162,132164],{"className":182,"code":132163,"language":184,"meta":92,"style":92},"\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",[94,132165,132166,132171,132187,132192,132207,132212,132227,132232,132247,132252],{"__ignoreMap":92},[97,132167,132168],{"class":99,"line":100},[97,132169,132170],{"class":191},"\u002F* 静态定位（默认） *\u002F\n",[97,132172,132173,132176,132178,132180,132182,132185],{"class":99,"line":195},[97,132174,132175],{"class":111},".static",[97,132177,79991],{"class":103},[97,132179,129091],{"class":370},[97,132181,51621],{"class":103},[97,132183,132184],{"class":370},"static",[97,132186,129661],{"class":103},[97,132188,132189],{"class":99,"line":241},[97,132190,132191],{"class":191},"\u002F* 相对定位 *\u002F\n",[97,132193,132194,132197,132199,132201,132203,132205],{"class":99,"line":1387},[97,132195,132196],{"class":111},".relative",[97,132198,79991],{"class":103},[97,132200,129091],{"class":370},[97,132202,51621],{"class":103},[97,132204,54948],{"class":370},[97,132206,129661],{"class":103},[97,132208,132209],{"class":99,"line":1393},[97,132210,132211],{"class":191},"\u002F* 绝对定位 *\u002F\n",[97,132213,132214,132217,132219,132221,132223,132225],{"class":99,"line":1407},[97,132215,132216],{"class":111},".absolute",[97,132218,79991],{"class":103},[97,132220,129091],{"class":370},[97,132222,51621],{"class":103},[97,132224,55015],{"class":370},[97,132226,129661],{"class":103},[97,132228,132229],{"class":99,"line":1413},[97,132230,132231],{"class":191},"\u002F* 固定定位 *\u002F\n",[97,132233,132234,132237,132239,132241,132243,132245],{"class":99,"line":1504},[97,132235,132236],{"class":111},".fixed",[97,132238,79991],{"class":103},[97,132240,129091],{"class":370},[97,132242,51621],{"class":103},[97,132244,86417],{"class":370},[97,132246,129661],{"class":103},[97,132248,132249],{"class":99,"line":1510},[97,132250,132251],{"class":191},"\u002F* 粘性定位 *\u002F\n",[97,132253,132254,132257,132259,132261,132263,132266],{"class":99,"line":1522},[97,132255,132256],{"class":111},".sticky",[97,132258,79991],{"class":103},[97,132260,129091],{"class":370},[97,132262,51621],{"class":103},[97,132264,132265],{"class":370},"sticky",[97,132267,129661],{"class":103},[138,132269,132270,132273],{"start":1809},[70,132271,132272],{},"一定要用好注释",[70,132274,132275],{},"浮动的盒子不会有外边距合并的问题",[231,132277,131619],{},{"title":92,"searchDepth":195,"depth":195,"links":132279},[132280,132281],{"id":131656,"depth":195,"text":131657},{"id":131720,"depth":195,"text":131721,"children":132282},[132283,132284,132285,132286,132287,132288,132289],{"id":131724,"depth":241,"text":131725},{"id":131830,"depth":241,"text":131831},{"id":131866,"depth":241,"text":131867},{"id":131887,"depth":241,"text":131888},{"id":131922,"depth":241,"text":131923},{"id":131955,"depth":241,"text":131956},{"id":132030,"depth":241,"text":132031},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131648,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132296,"title":132297,"body":132298,"description":246,"extension":247,"meta":133784,"navigation":249,"path":133785,"seo":133786,"stem":133787,"__hash__":133788},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132299,"toc":133776},[132300,132303,132307,132311,132322,132326,132343,132387,132420,132423,132440,132443,132446,132490,132494,132498,132501,132504,132508,132511,132522,132585,132626,132629,132644,132698,132706,132709,132720,132774,132800,132803,132816,132870,132902,132956,132979,133033,133036,133039,133046,133100,133121,133175,133178,133181,133266,133274,133331,133354,133358,133361,133379,133383,133402,133456,133494,133498,133501,133504,133526,133530,133538,133541,133546,133557,133560,133564,133578,133622,133625,133629,133632,133637,133663,133668,133745,133748,133752,133755,133758,133761,133764,133767,133770,133773],[10,132301,132297],{"id":132302},"_11-传统布局与定位体系",[14,132304,132306],{"id":132305},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[48,132308,132310],{"id":132309},"_1111-普通流标准流","11.1.1 普通流（标准流）",[67,132312,132313,132316,132319],{},[70,132314,132315],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[70,132317,132318],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[70,132320,132321],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[48,132323,132325],{"id":132324},"_1112-浮动","11.1.2 浮动",[67,132327,132328,132331,132334,132337,132340],{},[70,132329,132330],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[70,132332,132333],{},"浮动可以改变元素标签默认的排列方式",[70,132335,132336],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[70,132338,132339],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[70,132341,132342],{},"在使用行内块转换时盒子之间是有空隙的",[87,132344,132345],{"className":182,"code":131197,"language":184,"meta":92,"style":92},[94,132346,132347,132353,132363,132367,132373,132383],{"__ignoreMap":92},[97,132348,132349,132351],{"class":99,"line":100},[97,132350,131204],{"class":111},[97,132352,15762],{"class":103},[97,132354,132355,132357,132359,132361],{"class":99,"line":195},[97,132356,131211],{"class":370},[97,132358,51621],{"class":103},[97,132360,23925],{"class":370},[97,132362,1483],{"class":103},[97,132364,132365],{"class":99,"line":241},[97,132366,1757],{"class":103},[97,132368,132369,132371],{"class":99,"line":1387},[97,132370,131226],{"class":111},[97,132372,15762],{"class":103},[97,132374,132375,132377,132379,132381],{"class":99,"line":1393},[97,132376,131211],{"class":370},[97,132378,51621],{"class":103},[97,132380,72706],{"class":370},[97,132382,1483],{"class":103},[97,132384,132385],{"class":99,"line":1407},[97,132386,1757],{"class":103},[457,132388,132389,132397],{},[460,132390,132391],{},[463,132392,132393,132395],{},[466,132394,127197],{"align":23925},[466,132396,27679],{"align":23925},[504,132398,132399,132406,132413],{},[463,132400,132401,132403],{},[509,132402,54921],{"align":23925},[509,132404,132405],{"align":23925},"元素不浮动（默认值）",[463,132407,132408,132410],{},[509,132409,23925],{"align":23925},[509,132411,132412],{"align":23925},"元素向左浮动",[463,132414,132415,132417],{},[509,132416,72706],{"align":23925},[509,132418,132419],{"align":23925},"元素向右浮动",[24,132421,132422],{},"浮动重点：",[67,132424,132425,132428,132431,132434,132437],{},[70,132426,132427],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[70,132429,132430],{},"浮动的元素会一行内显示并且元素顶部对齐",[70,132432,132433],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[70,132435,132436],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[70,132438,132439],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[24,132441,132442],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[24,132444,132445],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[87,132447,132448],{"className":182,"code":131197,"language":184,"meta":92,"style":92},[94,132449,132450,132456,132466,132470,132476,132486],{"__ignoreMap":92},[97,132451,132452,132454],{"class":99,"line":100},[97,132453,131204],{"class":111},[97,132455,15762],{"class":103},[97,132457,132458,132460,132462,132464],{"class":99,"line":195},[97,132459,131211],{"class":370},[97,132461,51621],{"class":103},[97,132463,23925],{"class":370},[97,132465,1483],{"class":103},[97,132467,132468],{"class":99,"line":241},[97,132469,1757],{"class":103},[97,132471,132472,132474],{"class":99,"line":1387},[97,132473,131226],{"class":111},[97,132475,15762],{"class":103},[97,132477,132478,132480,132482,132484],{"class":99,"line":1393},[97,132479,131211],{"class":370},[97,132481,51621],{"class":103},[97,132483,72706],{"class":370},[97,132485,1483],{"class":103},[97,132487,132488],{"class":99,"line":1407},[97,132489,1757],{"class":103},[48,132491,132493],{"id":132492},"_1113-定位","11.1.3 定位",[160,132495,132497],{"id":132496},"_11131-使用场景","11.1.3.1 使用场景",[24,132499,132500],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[24,132502,132503],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[160,132505,132507],{"id":132506},"_11132-定位组成","11.1.3.2 定位组成",[24,132509,132510],{},"定位 = 定位模式 + 边偏移",[138,132512,132513],{},[70,132514,132515,132518,132519],{},[469,132516,132517],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[469,132520,132521],{},"定位模式",[87,132523,132525],{"className":182,"code":132524,"language":184,"meta":92,"style":92},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[94,132526,132527,132533,132547,132564,132581],{"__ignoreMap":92},[97,132528,132529,132531],{"class":99,"line":100},[97,132530,130579],{"class":111},[97,132532,15762],{"class":103},[97,132534,132535,132538,132540,132542,132544],{"class":99,"line":195},[97,132536,132537],{"class":370},"  position",[97,132539,51621],{"class":103},[97,132541,54948],{"class":370},[97,132543,130594],{"class":103},[97,132545,132546],{"class":191},"\u002F* 定位模式 *\u002F\n",[97,132548,132549,132552,132554,132556,132558,132561],{"class":99,"line":241},[97,132550,132551],{"class":370},"  top",[97,132553,51621],{"class":103},[97,132555,766],{"class":370},[97,132557,51676],{"class":319},[97,132559,132560],{"class":103},";           ",[97,132562,132563],{"class":191},"\u002F* 边偏移：上 *\u002F\n",[97,132565,132566,132569,132571,132573,132575,132578],{"class":99,"line":1387},[97,132567,132568],{"class":370},"  left",[97,132570,51621],{"class":103},[97,132572,1020],{"class":370},[97,132574,51676],{"class":319},[97,132576,132577],{"class":103},";          ",[97,132579,132580],{"class":191},"\u002F* 边偏移：左 *\u002F\n",[97,132582,132583],{"class":99,"line":1393},[97,132584,1757],{"class":103},[457,132586,132587,132596],{},[460,132588,132589],{},[463,132590,132591,132593],{},[466,132592,472],{"align":23925},[466,132594,132595],{"align":23925},"语义",[504,132597,132598,132605,132612,132619],{},[463,132599,132600,132602],{},[509,132601,132184],{"align":23925},[509,132603,132604],{"align":23925},"静态定位",[463,132606,132607,132609],{},[509,132608,54948],{"align":23925},[509,132610,132611],{"align":23925},"相对定位",[463,132613,132614,132616],{},[509,132615,55015],{"align":23925},[509,132617,132618],{"align":23925},"绝对定位",[463,132620,132621,132623],{},[509,132622,86417],{"align":23925},[509,132624,132625],{"align":23925},"固定定位",[24,132627,132628],{},"（1）静态定位：",[67,132630,132631,132642],{},[70,132632,132633,132634,132637,132638,132641],{},"静态定位是元素的 ",[469,132635,132636],{},"默认定位方式"," ， ",[469,132639,132640],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[70,132643,5372],{},[87,132645,132646],{"className":182,"code":132524,"language":184,"meta":92,"style":92},[94,132647,132648,132654,132666,132680,132694],{"__ignoreMap":92},[97,132649,132650,132652],{"class":99,"line":100},[97,132651,130579],{"class":111},[97,132653,15762],{"class":103},[97,132655,132656,132658,132660,132662,132664],{"class":99,"line":195},[97,132657,132537],{"class":370},[97,132659,51621],{"class":103},[97,132661,54948],{"class":370},[97,132663,130594],{"class":103},[97,132665,132546],{"class":191},[97,132667,132668,132670,132672,132674,132676,132678],{"class":99,"line":241},[97,132669,132551],{"class":370},[97,132671,51621],{"class":103},[97,132673,766],{"class":370},[97,132675,51676],{"class":319},[97,132677,132560],{"class":103},[97,132679,132563],{"class":191},[97,132681,132682,132684,132686,132688,132690,132692],{"class":99,"line":1387},[97,132683,132568],{"class":370},[97,132685,51621],{"class":103},[97,132687,1020],{"class":370},[97,132689,51676],{"class":319},[97,132691,132577],{"class":103},[97,132693,132580],{"class":191},[97,132695,132696],{"class":99,"line":1393},[97,132697,1757],{"class":103},[67,132699,132700,132703],{},[70,132701,132702],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[70,132704,132705],{},"静态定位在布局时我们几乎不用的",[24,132707,132708],{},"（2）相对定位",[67,132710,132711,132718],{},[70,132712,132713,132714,132717],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[469,132715,132716],{},"原来的位置"," 来说的（自恋型）",[70,132719,5372],{},[87,132721,132722],{"className":182,"code":132524,"language":184,"meta":92,"style":92},[94,132723,132724,132730,132742,132756,132770],{"__ignoreMap":92},[97,132725,132726,132728],{"class":99,"line":100},[97,132727,130579],{"class":111},[97,132729,15762],{"class":103},[97,132731,132732,132734,132736,132738,132740],{"class":99,"line":195},[97,132733,132537],{"class":370},[97,132735,51621],{"class":103},[97,132737,54948],{"class":370},[97,132739,130594],{"class":103},[97,132741,132546],{"class":191},[97,132743,132744,132746,132748,132750,132752,132754],{"class":99,"line":241},[97,132745,132551],{"class":370},[97,132747,51621],{"class":103},[97,132749,766],{"class":370},[97,132751,51676],{"class":319},[97,132753,132560],{"class":103},[97,132755,132563],{"class":191},[97,132757,132758,132760,132762,132764,132766,132768],{"class":99,"line":1387},[97,132759,132568],{"class":370},[97,132761,51621],{"class":103},[97,132763,1020],{"class":370},[97,132765,51676],{"class":319},[97,132767,132577],{"class":103},[97,132769,132580],{"class":191},[97,132771,132772],{"class":99,"line":1393},[97,132773,1757],{"class":103},[67,132775,132776],{},[70,132777,132778,132779,132781,132782,132784,132785,132788,132789,132792,132793,132795,132796,132799],{},"相对定位的特点：",[53900,132780],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53900,132783],{},"  ② ",[469,132786,132787],{},"原来"," 在标准流的 ",[469,132790,132791],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53900,132794],{},"  ③因此， ",[469,132797,132798],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[24,132801,132802],{},"（3）绝对定位",[67,132804,132805,132814],{},[70,132806,132807,132809,132810,132813],{},[469,132808,132618],{}," 是元素在移动位置的时候，是相对于它 ",[469,132811,132812],{},"祖先元素"," 来说的（拼爹型）",[70,132815,5372],{},[87,132817,132818],{"className":182,"code":132524,"language":184,"meta":92,"style":92},[94,132819,132820,132826,132838,132852,132866],{"__ignoreMap":92},[97,132821,132822,132824],{"class":99,"line":100},[97,132823,130579],{"class":111},[97,132825,15762],{"class":103},[97,132827,132828,132830,132832,132834,132836],{"class":99,"line":195},[97,132829,132537],{"class":370},[97,132831,51621],{"class":103},[97,132833,54948],{"class":370},[97,132835,130594],{"class":103},[97,132837,132546],{"class":191},[97,132839,132840,132842,132844,132846,132848,132850],{"class":99,"line":241},[97,132841,132551],{"class":370},[97,132843,51621],{"class":103},[97,132845,766],{"class":370},[97,132847,51676],{"class":319},[97,132849,132560],{"class":103},[97,132851,132563],{"class":191},[97,132853,132854,132856,132858,132860,132862,132864],{"class":99,"line":1387},[97,132855,132568],{"class":370},[97,132857,51621],{"class":103},[97,132859,1020],{"class":370},[97,132861,51676],{"class":319},[97,132863,132577],{"class":103},[97,132865,132580],{"class":191},[97,132867,132868],{"class":99,"line":1393},[97,132869,1757],{"class":103},[67,132871,132872,132887,132896,132899],{},[70,132873,132874,132875,132877,132878,132880,132881,132883,132884,132886],{},"绝对定位的特点：",[53900,132876],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53900,132879],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53900,132882],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53900,132885],{},"  (4)固定定位",[70,132888,132889,132891,132892,132895],{},[469,132890,132625],{}," 是元素 ",[469,132893,132894],{},"固定于浏览器可视区的位置"," 。（认死理型）",[70,132897,132898],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[70,132900,132901],{},"语法:",[87,132903,132904],{"className":182,"code":132524,"language":184,"meta":92,"style":92},[94,132905,132906,132912,132924,132938,132952],{"__ignoreMap":92},[97,132907,132908,132910],{"class":99,"line":100},[97,132909,130579],{"class":111},[97,132911,15762],{"class":103},[97,132913,132914,132916,132918,132920,132922],{"class":99,"line":195},[97,132915,132537],{"class":370},[97,132917,51621],{"class":103},[97,132919,54948],{"class":370},[97,132921,130594],{"class":103},[97,132923,132546],{"class":191},[97,132925,132926,132928,132930,132932,132934,132936],{"class":99,"line":241},[97,132927,132551],{"class":370},[97,132929,51621],{"class":103},[97,132931,766],{"class":370},[97,132933,51676],{"class":319},[97,132935,132560],{"class":103},[97,132937,132563],{"class":191},[97,132939,132940,132942,132944,132946,132948,132950],{"class":99,"line":1387},[97,132941,132568],{"class":370},[97,132943,51621],{"class":103},[97,132945,1020],{"class":370},[97,132947,51676],{"class":319},[97,132949,132577],{"class":103},[97,132951,132580],{"class":191},[97,132953,132954],{"class":99,"line":1393},[97,132955,1757],{"class":103},[67,132957,132958,132967],{},[70,132959,132960,132961,132963,132964,132966],{},"特点:",[53900,132962],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53900,132965],{},"  ②固定定位不再占有原先的位置,完全脱标",[70,132968,132969,132970,132972,132973,132975,132976,132978],{},"固定在版心位置的方法:",[53900,132971],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53900,132974],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53900,132977],{},"  实例：",[87,132980,132981],{"className":182,"code":132524,"language":184,"meta":92,"style":92},[94,132982,132983,132989,133001,133015,133029],{"__ignoreMap":92},[97,132984,132985,132987],{"class":99,"line":100},[97,132986,130579],{"class":111},[97,132988,15762],{"class":103},[97,132990,132991,132993,132995,132997,132999],{"class":99,"line":195},[97,132992,132537],{"class":370},[97,132994,51621],{"class":103},[97,132996,54948],{"class":370},[97,132998,130594],{"class":103},[97,133000,132546],{"class":191},[97,133002,133003,133005,133007,133009,133011,133013],{"class":99,"line":241},[97,133004,132551],{"class":370},[97,133006,51621],{"class":103},[97,133008,766],{"class":370},[97,133010,51676],{"class":319},[97,133012,132560],{"class":103},[97,133014,132563],{"class":191},[97,133016,133017,133019,133021,133023,133025,133027],{"class":99,"line":1387},[97,133018,132568],{"class":370},[97,133020,51621],{"class":103},[97,133022,1020],{"class":370},[97,133024,51676],{"class":319},[97,133026,132577],{"class":103},[97,133028,132580],{"class":191},[97,133030,133031],{"class":99,"line":1393},[97,133032,1757],{"class":103},[19,133034],{"style":21,"src":133035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[24,133037,133038],{},"(5)粘性定位",[67,133040,133041,133044],{},[70,133042,133043],{},"粘性定位可以被认为是相对定位和固定定位的混合",[70,133045,5372],{},[87,133047,133048],{"className":182,"code":132524,"language":184,"meta":92,"style":92},[94,133049,133050,133056,133068,133082,133096],{"__ignoreMap":92},[97,133051,133052,133054],{"class":99,"line":100},[97,133053,130579],{"class":111},[97,133055,15762],{"class":103},[97,133057,133058,133060,133062,133064,133066],{"class":99,"line":195},[97,133059,132537],{"class":370},[97,133061,51621],{"class":103},[97,133063,54948],{"class":370},[97,133065,130594],{"class":103},[97,133067,132546],{"class":191},[97,133069,133070,133072,133074,133076,133078,133080],{"class":99,"line":241},[97,133071,132551],{"class":370},[97,133073,51621],{"class":103},[97,133075,766],{"class":370},[97,133077,51676],{"class":319},[97,133079,132560],{"class":103},[97,133081,132563],{"class":191},[97,133083,133084,133086,133088,133090,133092,133094],{"class":99,"line":1387},[97,133085,132568],{"class":370},[97,133087,51621],{"class":103},[97,133089,1020],{"class":370},[97,133091,51676],{"class":319},[97,133093,132577],{"class":103},[97,133095,132580],{"class":191},[97,133097,133098],{"class":99,"line":1393},[97,133099,1757],{"class":103},[67,133101,133102],{},[70,133103,133104,133105,133107,133108,133110,133111,133113,133114,133117,133118,133120],{},"粘性定位的特点：",[53900,133106],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53900,133109],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53900,133112],{},"  ③必须添加 top 、left、right、bottom ",[469,133115,133116],{},"其中一个"," 才有效",[53900,133119],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[87,133122,133123],{"className":182,"code":132524,"language":184,"meta":92,"style":92},[94,133124,133125,133131,133143,133157,133171],{"__ignoreMap":92},[97,133126,133127,133129],{"class":99,"line":100},[97,133128,130579],{"class":111},[97,133130,15762],{"class":103},[97,133132,133133,133135,133137,133139,133141],{"class":99,"line":195},[97,133134,132537],{"class":370},[97,133136,51621],{"class":103},[97,133138,54948],{"class":370},[97,133140,130594],{"class":103},[97,133142,132546],{"class":191},[97,133144,133145,133147,133149,133151,133153,133155],{"class":99,"line":241},[97,133146,132551],{"class":370},[97,133148,51621],{"class":103},[97,133150,766],{"class":370},[97,133152,51676],{"class":319},[97,133154,132560],{"class":103},[97,133156,132563],{"class":191},[97,133158,133159,133161,133163,133165,133167,133169],{"class":99,"line":1387},[97,133160,132568],{"class":370},[97,133162,51621],{"class":103},[97,133164,1020],{"class":370},[97,133166,51676],{"class":319},[97,133168,132577],{"class":103},[97,133170,132580],{"class":191},[97,133172,133173],{"class":99,"line":1393},[97,133174,1757],{"class":103},[19,133176],{"style":21,"src":133177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[24,133179,133180],{},"(6)总结",[457,133182,133183,133198],{},[460,133184,133185],{},[463,133186,133187,133189,133192,133195],{},[466,133188,132521],{"align":23925},[466,133190,133191],{"align":23925},"是否脱标",[466,133193,133194],{"align":23925},"移动位置",[466,133196,133197],{"align":23925},"是否常用",[504,133199,133200,133213,133227,133241,133254],{},[463,133201,133202,133205,133207,133210],{},[509,133203,133204],{"align":23925},"Static 静态定位",[509,133206,104862],{"align":23925},[509,133208,133209],{"align":23925},"不能使用边偏移",[509,133211,133212],{"align":23925},"很少",[463,133214,133215,133218,133221,133224],{},[509,133216,133217],{"align":23925},"Relative 相对定位",[509,133219,133220],{"align":23925},"否(占有位置)",[509,133222,133223],{"align":23925},"相对于自身位置移动",[509,133225,133226],{"align":23925},"基本单独使用",[463,133228,133229,133232,133235,133238],{},[509,133230,133231],{"align":23925},"Absolute 绝对定位",[509,133233,133234],{"align":23925},"是(不占有位置)",[509,133236,133237],{"align":23925},"带有定位的父级",[509,133239,133240],{"align":23925},"要和定位父级元素搭配使用",[463,133242,133243,133246,133248,133251],{},[509,133244,133245],{"align":23925},"Fixed 固定定位",[509,133247,133234],{"align":23925},[509,133249,133250],{"align":23925},"浏览器可视区",[509,133252,133253],{"align":23925},"单独使用,不需要父级",[463,133255,133256,133259,133261,133263],{},[509,133257,133258],{"align":23925},"Sticky 粘性定位",[509,133260,133220],{"align":23925},[509,133262,133250],{"align":23925},[509,133264,133265],{"align":23925},"当前阶段少",[138,133267,133268],{"start":195},[70,133269,133270,133273],{},[469,133271,133272],{},"边偏移"," 则决定了该元素的最终位置",[457,133275,133276,133287],{},[460,133277,133278],{},[463,133279,133280,133283,133285],{},[466,133281,133282],{"align":23925},"边偏移属性",[466,133284,27682],{"align":23925},[466,133286,27679],{"align":23925},[504,133288,133289,133300,133311,133321],{},[463,133290,133291,133294,133297],{},[509,133292,133293],{"align":23925},"top",[509,133295,133296],{"align":23925},"top: 80px;",[509,133298,133299],{"align":23925},"顶端偏移量，定义元素相对于父元素上边线的距离",[463,133301,133302,133305,133308],{},[509,133303,133304],{"align":23925},"bottom",[509,133306,133307],{"align":23925},"bottom: 80px ;",[509,133309,133310],{"align":23925},"底部偏移量，定义元素相对于其父元素下边线的距离",[463,133312,133313,133315,133318],{},[509,133314,23925],{"align":23925},[509,133316,133317],{"align":23925},"left: 80px ;",[509,133319,133320],{"align":23925},"左侧偏移量，定义元素相对于其父元素左边线的距离",[463,133322,133323,133325,133328],{},[509,133324,72706],{"align":23925},[509,133326,133327],{"align":23925},"right: 80px ;",[509,133329,133330],{"align":23925},"右侧偏移量，定义元素相对于其父元素右边线的距离",[67,133332,133333],{},[70,133334,9216,133335,133337,133338,133340,133341,133343,133344,133347,133348,133350,133351,133353],{},[53900,133336],{},"  ① ",[469,133339,133272],{}," 需要和 ",[469,133342,132521],{}," 联合使用， ",[469,133345,133346],{},"单独使用无效"," ；",[53900,133349],{},"  ②top和bottom不要同时使用",[53900,133352],{},"  ③left和right不要同时使用",[160,133355,133357],{"id":133356},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[24,133359,133360],{},"子级是绝对定位的话，父级要用相对定位",[67,133362,133363,133366,133369,133372],{},[70,133364,133365],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[70,133367,133368],{},"父盒子需要加定位限制子盒子在父盒子内显示",[70,133370,133371],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[70,133373,133374,133375,133378],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[469,133376,133377],{},"子绝父绝"," 也会遇到",[160,133380,133382],{"id":133381},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[67,133384,133385,133400],{},[70,133386,133387,133388,133391,133392,133395,133396,133399],{},"在使用 ",[469,133389,133390],{},"定位"," 布局时，可能会 ",[469,133393,133394],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[469,133397,133398],{},"z-index"," 来控制盒子的前后次序 (z轴)",[70,133401,5372],{},[87,133403,133404],{"className":182,"code":132524,"language":184,"meta":92,"style":92},[94,133405,133406,133412,133424,133438,133452],{"__ignoreMap":92},[97,133407,133408,133410],{"class":99,"line":100},[97,133409,130579],{"class":111},[97,133411,15762],{"class":103},[97,133413,133414,133416,133418,133420,133422],{"class":99,"line":195},[97,133415,132537],{"class":370},[97,133417,51621],{"class":103},[97,133419,54948],{"class":370},[97,133421,130594],{"class":103},[97,133423,132546],{"class":191},[97,133425,133426,133428,133430,133432,133434,133436],{"class":99,"line":241},[97,133427,132551],{"class":370},[97,133429,51621],{"class":103},[97,133431,766],{"class":370},[97,133433,51676],{"class":319},[97,133435,132560],{"class":103},[97,133437,132563],{"class":191},[97,133439,133440,133442,133444,133446,133448,133450],{"class":99,"line":1387},[97,133441,132568],{"class":370},[97,133443,51621],{"class":103},[97,133445,1020],{"class":370},[97,133447,51676],{"class":319},[97,133449,132577],{"class":103},[97,133451,132580],{"class":191},[97,133453,133454],{"class":99,"line":1393},[97,133455,1757],{"class":103},[67,133457,133458],{},[70,133459,133460,133461,133337,133463,133465,133466,127894,133469,82723,133472,133474,133475,133477,133478,133481,133482,133347,133485,133487,133488,133491,133493],{},"z-index的特性",[53900,133462],{},[469,133464,127197],{}," ： ",[469,133467,133468],{},"正整数",[469,133470,133471],{},"负整数",[469,133473,511],{}," ，默认值是 0，数值越大，盒子越靠上；",[53900,133476],{},"  ②如果 ",[469,133479,133480],{},"属性值相同"," ，则按照书写顺序， ",[469,133483,133484],{},"后来居上",[53900,133486],{},"  ③数字后面 ",[469,133489,133490],{},"不能加单位",[53900,133492],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[160,133495,133497],{"id":133496},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[24,133499,133500],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[24,133502,133503],{},"方法:",[67,133505,133506,133516],{},[70,133507,133508,133509,133512,133513],{},"left: 50%; 让 ",[469,133510,133511],{},"盒子的左侧"," 移动到 ",[469,133514,133515],{},"父级元素的水平中心位置",[70,133517,133518,133519,133522,133523],{},"margin-left: -100px; 让盒子 ",[469,133520,133521],{},"向左"," 移动 ",[469,133524,133525],{},"自身宽度的一半",[160,133527,133529],{"id":133528},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[138,133531,133532,133535],{},[70,133533,133534],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[70,133536,133537],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[24,133539,133540],{},"也就是说绝对定位和固定定位和浮动类似",[138,133542,133543],{"start":241},[70,133544,133545],{},"display 是显示模式， 可以改变显示模式有以下方式:",[67,133547,133548,133551,133554],{},[70,133549,133550],{},"可以用inline-block 转换为行内块",[70,133552,133553],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[70,133555,133556],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[24,133558,133559],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[160,133561,133563],{"id":133562},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[138,133565,133566,133569,133572,133575],{},[70,133567,133568],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[70,133570,133571],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[70,133573,133574],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[70,133576,133577],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[87,133579,133580],{"className":182,"code":131197,"language":184,"meta":92,"style":92},[94,133581,133582,133588,133598,133602,133608,133618],{"__ignoreMap":92},[97,133583,133584,133586],{"class":99,"line":100},[97,133585,131204],{"class":111},[97,133587,15762],{"class":103},[97,133589,133590,133592,133594,133596],{"class":99,"line":195},[97,133591,131211],{"class":370},[97,133593,51621],{"class":103},[97,133595,23925],{"class":370},[97,133597,1483],{"class":103},[97,133599,133600],{"class":99,"line":241},[97,133601,1757],{"class":103},[97,133603,133604,133606],{"class":99,"line":1387},[97,133605,131226],{"class":111},[97,133607,15762],{"class":103},[97,133609,133610,133612,133614,133616],{"class":99,"line":1393},[97,133611,131211],{"class":370},[97,133613,51621],{"class":103},[97,133615,72706],{"class":370},[97,133617,1483],{"class":103},[97,133619,133620],{"class":99,"line":1407},[97,133621,1757],{"class":103},[19,133623],{"style":21,"src":133624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[160,133626,133628],{"id":133627},"_11138-轮播图","11.1.3.8 轮播图",[19,133630],{"style":21,"src":133631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[138,133633,133634],{},[70,133635,133636],{},"制作顺序:",[67,133638,133639,133642,133645,133654],{},[70,133640,133641],{},"大盒子我们类名为： tb-promo 淘宝广告",[70,133643,133644],{},"里面先放一张图片",[70,133646,133647,133648,133650,133651,133653],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53900,133649],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53900,133652],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[70,133655,133656,133657,133659,133660,133662],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53900,133658],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53900,133661],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[138,133664,133665],{"start":195},[70,133666,133667],{},"代码模块",[87,133669,133671],{"className":182,"code":133670,"language":184,"meta":92,"style":92},"\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",[94,133672,133673,133678,133685,133695,133705,133715,133719,133724,133731,133741],{"__ignoreMap":92},[97,133674,133675],{"class":99,"line":100},[97,133676,133677],{"class":191},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[97,133679,133680,133683],{"class":99,"line":195},[97,133681,133682],{"class":111},".son",[97,133684,15762],{"class":103},[97,133686,133687,133689,133691,133693],{"class":99,"line":241},[97,133688,132537],{"class":370},[97,133690,51621],{"class":103},[97,133692,55015],{"class":370},[97,133694,1483],{"class":103},[97,133696,133697,133699,133701,133703],{"class":99,"line":1387},[97,133698,132551],{"class":370},[97,133700,51621],{"class":103},[97,133702,511],{"class":370},[97,133704,1483],{"class":103},[97,133706,133707,133709,133711,133713],{"class":99,"line":1393},[97,133708,132568],{"class":370},[97,133710,51621],{"class":103},[97,133712,511],{"class":370},[97,133714,1483],{"class":103},[97,133716,133717],{"class":99,"line":1407},[97,133718,1757],{"class":103},[97,133720,133721],{"class":99,"line":1413},[97,133722,133723],{"class":191},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[97,133725,133726,133729],{"class":99,"line":1504},[97,133727,133728],{"class":111},".father",[97,133730,15762],{"class":103},[97,133732,133733,133735,133737,133739],{"class":99,"line":1510},[97,133734,132537],{"class":370},[97,133736,51621],{"class":103},[97,133738,54948],{"class":370},[97,133740,1483],{"class":103},[97,133742,133743],{"class":99,"line":1522},[97,133744,1757],{"class":103},[24,133746,133747],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[48,133749,133751],{"id":133750},"_1114-定位数值的移动","11.1.4 定位数值的移动",[19,133753],{"style":21,"src":133754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[24,133756,133757],{},"✨ 黄金口诀：",[24,133759,133760],{},"\"TOP正下负上，LEFT正右负左\"",[24,133762,133763],{},"\"RIGHT正左负右，BOTTOM正上负下",[24,133765,133766],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[24,133768,133769],{},"✨ 简单记：",[24,133771,133772],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[231,133774,133775],{},"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":92,"searchDepth":195,"depth":195,"links":133777},[133778],{"id":132305,"depth":195,"text":132306,"children":133779},[133780,133781,133782,133783],{"id":132309,"depth":241,"text":132310},{"id":132324,"depth":241,"text":132325},{"id":132492,"depth":241,"text":132493},{"id":133750,"depth":241,"text":133751},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132297,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133790,"title":133791,"body":133792,"description":246,"extension":247,"meta":135215,"navigation":249,"path":135216,"seo":135217,"stem":135218,"__hash__":135219},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133793,"toc":135194},[133794,133797,133801,133809,133813,133818,133826,133838,133842,133847,133855,133866,133870,133875,133916,133924,133928,133931,133934,133937,134031,134034,134128,134131,134225,134228,134231,134266,134269,134272,134302,134305,134308,134311,134314,134317,134320,134323,134393,134396,134400,134404,134445,134449,134455,134458,134461,134465,134468,134471,134474,134555,134558,134561,134565,134569,134572,134575,134578,134581,134584,134590,134599,134603,134622,134626,134636,134639,134642,134645,134648,134651,134654,134657,134660,134669,134673,134682,134685,134690,134743,134748,134914,134917,134920,134925,134928,134931,134934,134937,134942,135090,135093,135096,135101,135104,135109,135143,135146,135149,135153,135156,135163,135166,135169,135172,135175,135178,135181,135184,135188,135191],[10,133795,133791],{"id":133796},"_12-显示隐藏与图形资源",[14,133798,133800],{"id":133799},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[67,133802,133803,133806],{},[70,133804,133805],{},"目的:让一个元素在页面中消失或者显示出来",[70,133807,133808],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[48,133810,133812],{"id":133811},"_1211-display-显示","12.1.1 display 显示",[138,133814,133815],{},[70,133816,133817],{},"display 设置或检索对象是否及如何显示",[67,133819,133820,133823],{},[70,133821,133822],{},"display: none;隐藏对象",[70,133824,133825],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[138,133827,133828,133835],{"start":195},[70,133829,133830,133831,133834],{},"特点： display 隐藏元素后， ",[469,133832,133833],{},"不再占"," 有原来的位置",[70,133836,133837],{},"在js中使用非常的广泛",[48,133839,133841],{"id":133840},"_1212-visibility可见性","12.1.2 visibility可见性",[138,133843,133844],{},[70,133845,133846],{},"visibility 属性用于指定一个元素应可见还是隐藏",[67,133848,133849,133852],{},[70,133850,133851],{},"visibility： visible；元素可见",[70,133853,133854],{},"visibility：hidden；元素隐藏",[138,133856,133857,133860,133863],{"start":195},[70,133858,133859],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[70,133861,133862],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[70,133864,133865],{},"隐藏后继续占有原有位置",[48,133867,133869],{"id":133868},"_1213-overflow溢出","12.1.3 overflow溢出",[67,133871,133872],{},[70,133873,133874],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[457,133876,133877,133885],{},[460,133878,133879],{},[463,133880,133881,133883],{},[466,133882,127197],{"align":23925},[466,133884,27679],{"align":23925},[504,133886,133887,133895,133902,133909],{},[463,133888,133889,133892],{},[509,133890,133891],{"align":23925},"visible",[509,133893,133894],{"align":23925},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[463,133896,133897,133899],{},[509,133898,61898],{"align":23925},[509,133900,133901],{"align":23925},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[463,133903,133904,133906],{},[509,133905,129151],{"align":23925},[509,133907,133908],{"align":23925},"不管超出内容否，总是显示滚动条",[463,133910,133911,133913],{},[509,133912,72847],{"align":23925},[509,133914,133915],{"align":23925},"超出自动显示滚动条，不超出不显示滚动条",[67,133917,133918,133921],{},[70,133919,133920],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[70,133922,133923],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[48,133925,133927],{"id":133926},"_1214-案例收获","12.1.4 案例收获",[19,133929],{"style":21,"src":133930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[24,133932,133933],{},"问题：没做出来动态效果，使用hover没实现",[24,133935,133936],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[87,133938,133939],{"className":182,"code":132163,"language":184,"meta":92,"style":92},[94,133940,133941,133945,133959,133963,133977,133981,133995,133999,134013,134017],{"__ignoreMap":92},[97,133942,133943],{"class":99,"line":100},[97,133944,132170],{"class":191},[97,133946,133947,133949,133951,133953,133955,133957],{"class":99,"line":195},[97,133948,132175],{"class":111},[97,133950,79991],{"class":103},[97,133952,129091],{"class":370},[97,133954,51621],{"class":103},[97,133956,132184],{"class":370},[97,133958,129661],{"class":103},[97,133960,133961],{"class":99,"line":241},[97,133962,132191],{"class":191},[97,133964,133965,133967,133969,133971,133973,133975],{"class":99,"line":1387},[97,133966,132196],{"class":111},[97,133968,79991],{"class":103},[97,133970,129091],{"class":370},[97,133972,51621],{"class":103},[97,133974,54948],{"class":370},[97,133976,129661],{"class":103},[97,133978,133979],{"class":99,"line":1393},[97,133980,132211],{"class":191},[97,133982,133983,133985,133987,133989,133991,133993],{"class":99,"line":1407},[97,133984,132216],{"class":111},[97,133986,79991],{"class":103},[97,133988,129091],{"class":370},[97,133990,51621],{"class":103},[97,133992,55015],{"class":370},[97,133994,129661],{"class":103},[97,133996,133997],{"class":99,"line":1413},[97,133998,132231],{"class":191},[97,134000,134001,134003,134005,134007,134009,134011],{"class":99,"line":1504},[97,134002,132236],{"class":111},[97,134004,79991],{"class":103},[97,134006,129091],{"class":370},[97,134008,51621],{"class":103},[97,134010,86417],{"class":370},[97,134012,129661],{"class":103},[97,134014,134015],{"class":99,"line":1510},[97,134016,132251],{"class":191},[97,134018,134019,134021,134023,134025,134027,134029],{"class":99,"line":1522},[97,134020,132256],{"class":111},[97,134022,79991],{"class":103},[97,134024,129091],{"class":370},[97,134026,51621],{"class":103},[97,134028,132265],{"class":370},[97,134030,129661],{"class":103},[24,134032,134033],{},"完整代码：",[87,134035,134036],{"className":182,"code":132163,"language":184,"meta":92,"style":92},[94,134037,134038,134042,134056,134060,134074,134078,134092,134096,134110,134114],{"__ignoreMap":92},[97,134039,134040],{"class":99,"line":100},[97,134041,132170],{"class":191},[97,134043,134044,134046,134048,134050,134052,134054],{"class":99,"line":195},[97,134045,132175],{"class":111},[97,134047,79991],{"class":103},[97,134049,129091],{"class":370},[97,134051,51621],{"class":103},[97,134053,132184],{"class":370},[97,134055,129661],{"class":103},[97,134057,134058],{"class":99,"line":241},[97,134059,132191],{"class":191},[97,134061,134062,134064,134066,134068,134070,134072],{"class":99,"line":1387},[97,134063,132196],{"class":111},[97,134065,79991],{"class":103},[97,134067,129091],{"class":370},[97,134069,51621],{"class":103},[97,134071,54948],{"class":370},[97,134073,129661],{"class":103},[97,134075,134076],{"class":99,"line":1393},[97,134077,132211],{"class":191},[97,134079,134080,134082,134084,134086,134088,134090],{"class":99,"line":1407},[97,134081,132216],{"class":111},[97,134083,79991],{"class":103},[97,134085,129091],{"class":370},[97,134087,51621],{"class":103},[97,134089,55015],{"class":370},[97,134091,129661],{"class":103},[97,134093,134094],{"class":99,"line":1413},[97,134095,132231],{"class":191},[97,134097,134098,134100,134102,134104,134106,134108],{"class":99,"line":1504},[97,134099,132236],{"class":111},[97,134101,79991],{"class":103},[97,134103,129091],{"class":370},[97,134105,51621],{"class":103},[97,134107,86417],{"class":370},[97,134109,129661],{"class":103},[97,134111,134112],{"class":99,"line":1510},[97,134113,132251],{"class":191},[97,134115,134116,134118,134120,134122,134124,134126],{"class":99,"line":1522},[97,134117,132256],{"class":111},[97,134119,79991],{"class":103},[97,134121,129091],{"class":370},[97,134123,51621],{"class":103},[97,134125,132265],{"class":370},[97,134127,129661],{"class":103},[24,134129,134130],{},"分布思路重点详解：",[87,134132,134133],{"className":182,"code":132163,"language":184,"meta":92,"style":92},[94,134134,134135,134139,134153,134157,134171,134175,134189,134193,134207,134211],{"__ignoreMap":92},[97,134136,134137],{"class":99,"line":100},[97,134138,132170],{"class":191},[97,134140,134141,134143,134145,134147,134149,134151],{"class":99,"line":195},[97,134142,132175],{"class":111},[97,134144,79991],{"class":103},[97,134146,129091],{"class":370},[97,134148,51621],{"class":103},[97,134150,132184],{"class":370},[97,134152,129661],{"class":103},[97,134154,134155],{"class":99,"line":241},[97,134156,132191],{"class":191},[97,134158,134159,134161,134163,134165,134167,134169],{"class":99,"line":1387},[97,134160,132196],{"class":111},[97,134162,79991],{"class":103},[97,134164,129091],{"class":370},[97,134166,51621],{"class":103},[97,134168,54948],{"class":370},[97,134170,129661],{"class":103},[97,134172,134173],{"class":99,"line":1393},[97,134174,132211],{"class":191},[97,134176,134177,134179,134181,134183,134185,134187],{"class":99,"line":1407},[97,134178,132216],{"class":111},[97,134180,79991],{"class":103},[97,134182,129091],{"class":370},[97,134184,51621],{"class":103},[97,134186,55015],{"class":370},[97,134188,129661],{"class":103},[97,134190,134191],{"class":99,"line":1413},[97,134192,132231],{"class":191},[97,134194,134195,134197,134199,134201,134203,134205],{"class":99,"line":1504},[97,134196,132236],{"class":111},[97,134198,79991],{"class":103},[97,134200,129091],{"class":370},[97,134202,51621],{"class":103},[97,134204,86417],{"class":370},[97,134206,129661],{"class":103},[97,134208,134209],{"class":99,"line":1510},[97,134210,132251],{"class":191},[97,134212,134213,134215,134217,134219,134221,134223],{"class":99,"line":1522},[97,134214,132256],{"class":111},[97,134216,79991],{"class":103},[97,134218,129091],{"class":370},[97,134220,51621],{"class":103},[97,134222,132265],{"class":370},[97,134224,129661],{"class":103},[19,134226],{"style":21,"src":134227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[24,134229,134230],{},"图片太大，盒子太小，此时需要修改图片的大小",[87,134232,134234],{"className":89,"code":134233,"language":91,"meta":92,"style":92},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[94,134235,134236],{"__ignoreMap":92},[97,134237,134238,134240,134242,134244,134246,134249,134251,134253,134256,134259,134261,134264],{"class":99,"line":100},[97,134239,104],{"class":103},[97,134241,19],{"class":107},[97,134243,55423],{"class":111},[97,134245,115],{"class":103},[97,134247,134248],{"class":118},"\"images\u002Fpic.jpg\"",[97,134250,55431],{"class":111},[97,134252,115],{"class":103},[97,134254,134255],{"class":118},"\"描述文字\"",[97,134257,134258],{"class":111}," title",[97,134260,115],{"class":103},[97,134262,134263],{"class":118},"\"悬停提示\"",[97,134265,130],{"class":103},[19,134267],{"style":21,"src":134268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[24,134270,134271],{},"制造遮罩层",[87,134273,134274],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,134275,134276],{"__ignoreMap":92},[97,134277,134278,134280,134282,134284,134286,134288,134290,134292,134294,134296,134298,134300],{"class":99,"line":100},[97,134279,104],{"class":103},[97,134281,19],{"class":107},[97,134283,55423],{"class":111},[97,134285,115],{"class":103},[97,134287,134248],{"class":118},[97,134289,55431],{"class":111},[97,134291,115],{"class":103},[97,134293,134255],{"class":118},[97,134295,134258],{"class":111},[97,134297,115],{"class":103},[97,134299,134263],{"class":118},[97,134301,130],{"class":103},[24,134303,134304],{},"此时是这样的为标准流",[19,134306],{"style":21,"src":134307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[24,134309,134310],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[24,134312,134313],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[24,134315,134316],{},"让他在中间，用center(background-position)",[24,134318,134319],{},"将需要变的尽可能放到一个盒子中",[24,134321,134322],{},"放大盒子上内部盒子发生变化",[87,134324,134326],{"className":182,"code":134325,"language":184,"meta":92,"style":92},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[94,134327,134328,134334,134344,134348,134355,134365,134377,134389],{"__ignoreMap":92},[97,134329,134330,134332],{"class":99,"line":100},[97,134331,127798],{"class":111},[97,134333,15762],{"class":103},[97,134335,134336,134338,134340,134342],{"class":99,"line":195},[97,134337,132537],{"class":370},[97,134339,51621],{"class":103},[97,134341,54948],{"class":370},[97,134343,1483],{"class":103},[97,134345,134346],{"class":99,"line":241},[97,134347,1757],{"class":103},[97,134349,134350,134353],{"class":99,"line":1387},[97,134351,134352],{"class":111},".child",[97,134354,15762],{"class":103},[97,134356,134357,134359,134361,134363],{"class":99,"line":1393},[97,134358,132537],{"class":370},[97,134360,51621],{"class":103},[97,134362,55015],{"class":370},[97,134364,1483],{"class":103},[97,134366,134367,134369,134371,134373,134375],{"class":99,"line":1407},[97,134368,132551],{"class":370},[97,134370,51621],{"class":103},[97,134372,976],{"class":370},[97,134374,648],{"class":319},[97,134376,1483],{"class":103},[97,134378,134379,134381,134383,134385,134387],{"class":99,"line":1413},[97,134380,132568],{"class":370},[97,134382,51621],{"class":103},[97,134384,976],{"class":370},[97,134386,648],{"class":319},[97,134388,1483],{"class":103},[97,134390,134391],{"class":99,"line":1504},[97,134392,1757],{"class":103},[24,134394,134395],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134397,134399],{"id":134398},"_122-精灵图","12.2 精灵图",[48,134401,134403],{"id":134402},"_1221-理解","12.2.1 理解",[138,134405,134406,134424],{},[70,134407,134408,134409,132637,134412,134415,134416,134419,134420,134423],{},"目的： ",[469,134410,134411],{},"为了有效地减少服务器接收和发送请求的次数",[469,134413,134414],{},"提高"," 页面的 ",[469,134417,134418],{},"加载速度"," ，出现了 ",[469,134421,134422],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[70,134425,134426,134427,134429,134430,134432,134433,134435,134436,134438,134439,134441,134442,134444],{},"使用精灵图核心：",[53900,134428],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53900,134431],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53900,134434],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53900,134437],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53900,134440],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53900,134443],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[48,134446,134448],{"id":134447},"_1222-扒图","12.2.2 扒图",[87,134450,134453],{"className":134451,"code":134452,"language":5378},[5376],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[94,134454,134452],{"__ignoreMap":92},[19,134456],{"style":21,"src":134457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[19,134459],{"style":21,"src":134460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[48,134462,134464],{"id":134463},"_1223-精灵图的实现","12.2.3 精灵图的实现",[19,134466],{"style":21,"src":134467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[24,134469,134470],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[19,134472],{"style":21,"src":134473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[87,134475,134477],{"className":182,"code":134476,"language":184,"meta":92,"style":92},"\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",[94,134478,134479,134484,134491,134503,134515,134534,134551],{"__ignoreMap":92},[97,134480,134481],{"class":99,"line":100},[97,134482,134483],{"class":191},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[97,134485,134486,134489],{"class":99,"line":195},[97,134487,134488],{"class":111},".icon",[97,134490,15762],{"class":103},[97,134492,134493,134495,134497,134499,134501],{"class":99,"line":241},[97,134494,70752],{"class":370},[97,134496,51621],{"class":103},[97,134498,1020],{"class":370},[97,134500,51676],{"class":319},[97,134502,1483],{"class":103},[97,134504,134505,134507,134509,134511,134513],{"class":99,"line":1387},[97,134506,70972],{"class":370},[97,134508,51621],{"class":103},[97,134510,1020],{"class":370},[97,134512,51676],{"class":319},[97,134514,1483],{"class":103},[97,134516,134517,134519,134521,134523,134525,134528,134530,134532],{"class":99,"line":1393},[97,134518,70795],{"class":370},[97,134520,51621],{"class":103},[97,134522,61910],{"class":370},[97,134524,323],{"class":103},[97,134526,134527],{"class":5407},"sprites.png",[97,134529,13905],{"class":103},[97,134531,61920],{"class":370},[97,134533,1483],{"class":103},[97,134535,134536,134538,134540,134542,134544,134547,134549],{"class":99,"line":1407},[97,134537,128991],{"class":370},[97,134539,51621],{"class":103},[97,134541,51947],{"class":370},[97,134543,51676],{"class":319},[97,134545,134546],{"class":370}," -20",[97,134548,51676],{"class":319},[97,134550,1483],{"class":103},[97,134552,134553],{"class":99,"line":1413},[97,134554,1757],{"class":103},[19,134556],{"style":21,"src":134557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[24,134559,134560],{},"在前端中坐标轴的正方向是右和下",[14,134562,134564],{"id":134563},"_123-字体图标","12.3 字体图标",[48,134566,134568],{"id":134567},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[24,134570,134571],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[24,134573,134574],{},"精灵图是有诸多优点的，但是缺点很明显。",[24,134576,134577],{},"1.图片文件还是比较大的。",[24,134579,134580],{},"2.图片本身放大和缩小会失真。",[24,134582,134583],{},"3.一旦图片制作完毕想要更换非常复杂。",[24,134585,134586,134587,25930],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[469,134588,134589],{},"字体图标 iconfont",[24,134591,134592,134595,134596,28575],{},[469,134593,134594],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[469,134597,134598],{},"展示的是图标，本质属于字体",[48,134600,134602],{"id":134601},"_1232-字体图标的优点","12.3.2 字体图标的优点",[67,134604,134605,134610,134613,134616,134619],{},[70,134606,134607,134609],{},[469,134608,26066],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[70,134611,134612],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[70,134614,134615],{},"兼容性：几乎支持所有的浏览器，请放心使用",[70,134617,134618],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[70,134620,134621],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[48,134623,134625],{"id":134624},"_1233-字体库下载网站","12.3.3 字体库下载网站",[67,134627,134628],{},[70,134629,134630,134631],{},"icomoon字体库：",[558,134632,134635],{"href":134633,"rel":134634},"http:\u002F\u002Ficomoon.io\u002F",[24054],"http:\u002F\u002Ficomoon.io",[24,134637,134638],{},"进去之后点icomoon app",[19,134640],{"style":21,"src":134641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[24,134643,134644],{},"可以对其编辑：",[19,134646],{"style":21,"src":134647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[24,134649,134650],{},"生成字体：",[19,134652],{"style":21,"src":134653},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[24,134655,134656],{},"下载：",[19,134658],{"style":21,"src":134659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[67,134661,134662],{},[70,134663,134664,134665],{},"阿里iconfont字体库： ",[558,134666,134667],{"href":134667,"rel":134668},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24054],[48,134670,134672],{"id":134671},"_1234-字体图标的引入","12.3.4 字体图标的引入",[138,134674,134675],{},[70,134676,134677,134678,134681],{},"把下载包里面的 ",[469,134679,134680],{},"fonts"," 文件夹放入页面根目录下",[19,134683],{"style":21,"src":134684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[138,134686,134687],{"start":195},[70,134688,134689],{},"字体文件格式",[457,134691,134692,134701],{},[460,134693,134694],{},[463,134695,134696,134699],{},[466,134697,134698],{"align":23925},"格式",[466,134700,23929],{"align":23925},[504,134702,134703,134713,134723,134733],{},[463,134704,134705,134710],{},[509,134706,134707],{"align":23925},[469,134708,134709],{},".ttf",[509,134711,134712],{"align":23925},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[463,134714,134715,134720],{},[509,134716,134717],{"align":23925},[469,134718,134719],{},".woff",[509,134721,134722],{"align":23925},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[463,134724,134725,134730],{},[509,134726,134727],{"align":23925},[469,134728,134729],{},".eot",[509,134731,134732],{"align":23925},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[463,134734,134735,134740],{},[509,134736,134737],{"align":23925},[469,134738,134739],{},"svg",[509,134741,134742],{"align":23925},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[138,134744,134745],{"start":241},[70,134746,134747],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[87,134749,134751],{"className":182,"code":134750,"language":184,"meta":92,"style":92},"\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",[94,134752,134753,134758,134765,134777,134793,134818,134839,134859,134879,134883,134889,134899,134910],{"__ignoreMap":92},[97,134754,134755],{"class":99,"line":100},[97,134756,134757],{"class":191},"\u002F* 引入字体图标 *\u002F\n",[97,134759,134760,134763],{"class":99,"line":195},[97,134761,134762],{"class":319},"@font-face",[97,134764,15762],{"class":103},[97,134766,134767,134770,134772,134775],{"class":99,"line":241},[97,134768,134769],{"class":370},"  font-family",[97,134771,51621],{"class":103},[97,134773,134774],{"class":118},"'icomoon'",[97,134776,1483],{"class":103},[97,134778,134779,134782,134784,134786,134788,134791],{"class":99,"line":1387},[97,134780,134781],{"class":370},"  src",[97,134783,51621],{"class":103},[97,134785,61910],{"class":370},[97,134787,323],{"class":103},[97,134789,134790],{"class":118},"'fonts\u002Ficomoon.eot'",[97,134792,2910],{"class":103},[97,134794,134795,134797,134799,134801,134803,134806,134808,134811,134813,134816],{"class":99,"line":1393},[97,134796,134781],{"class":370},[97,134798,51621],{"class":103},[97,134800,61910],{"class":370},[97,134802,323],{"class":103},[97,134804,134805],{"class":118},"'fonts\u002Ficomoon.eot?#iefix'",[97,134807,13905],{"class":103},[97,134809,134810],{"class":370},"format",[97,134812,323],{"class":103},[97,134814,134815],{"class":118},"'embedded-opentype'",[97,134817,38237],{"class":103},[97,134819,134820,134823,134825,134828,134830,134832,134834,134837],{"class":99,"line":1407},[97,134821,134822],{"class":370},"       url",[97,134824,323],{"class":103},[97,134826,134827],{"class":118},"'fonts\u002Ficomoon.woff'",[97,134829,13905],{"class":103},[97,134831,134810],{"class":370},[97,134833,323],{"class":103},[97,134835,134836],{"class":118},"'woff'",[97,134838,38237],{"class":103},[97,134840,134841,134843,134845,134848,134850,134852,134854,134857],{"class":99,"line":1413},[97,134842,134822],{"class":370},[97,134844,323],{"class":103},[97,134846,134847],{"class":118},"'fonts\u002Ficomoon.ttf'",[97,134849,13905],{"class":103},[97,134851,134810],{"class":370},[97,134853,323],{"class":103},[97,134855,134856],{"class":118},"'truetype'",[97,134858,38237],{"class":103},[97,134860,134861,134863,134865,134868,134870,134872,134874,134877],{"class":99,"line":1504},[97,134862,134822],{"class":370},[97,134864,323],{"class":103},[97,134866,134867],{"class":118},"'fonts\u002Ficomoon.svg#icomoon'",[97,134869,13905],{"class":103},[97,134871,134810],{"class":370},[97,134873,323],{"class":103},[97,134875,134876],{"class":118},"'svg'",[97,134878,2910],{"class":103},[97,134880,134881],{"class":99,"line":1510},[97,134882,1757],{"class":103},[97,134884,134885,134887],{"class":99,"line":1522},[97,134886,134488],{"class":111},[97,134888,15762],{"class":103},[97,134890,134891,134893,134895,134897],{"class":99,"line":1804},[97,134892,134769],{"class":370},[97,134894,51621],{"class":103},[97,134896,134774],{"class":118},[97,134898,1483],{"class":103},[97,134900,134901,134904,134906,134908],{"class":99,"line":1809},[97,134902,134903],{"class":370},"  font-style",[97,134905,51621],{"class":103},[97,134907,64025],{"class":370},[97,134909,1483],{"class":103},[97,134911,134912],{"class":99,"line":1815},[97,134913,1757],{"class":103},[24,134915,134916],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[19,134918],{"style":21,"src":134919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[138,134921,134922],{"start":1387},[70,134923,134924],{},"添加字体",[19,134926],{"style":21,"src":134927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[24,134929,134930],{},"复制：",[19,134932],{"style":21,"src":134933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[24,134935,134936],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[138,134938,134939],{"start":1393},[70,134940,134941],{},"代码展示：",[87,134943,134944],{"className":182,"code":134750,"language":184,"meta":92,"style":92},[94,134945,134946,134950,134956,134966,134980,135002,135020,135038,135056,135060,135066,135076,135086],{"__ignoreMap":92},[97,134947,134948],{"class":99,"line":100},[97,134949,134757],{"class":191},[97,134951,134952,134954],{"class":99,"line":195},[97,134953,134762],{"class":319},[97,134955,15762],{"class":103},[97,134957,134958,134960,134962,134964],{"class":99,"line":241},[97,134959,134769],{"class":370},[97,134961,51621],{"class":103},[97,134963,134774],{"class":118},[97,134965,1483],{"class":103},[97,134967,134968,134970,134972,134974,134976,134978],{"class":99,"line":1387},[97,134969,134781],{"class":370},[97,134971,51621],{"class":103},[97,134973,61910],{"class":370},[97,134975,323],{"class":103},[97,134977,134790],{"class":118},[97,134979,2910],{"class":103},[97,134981,134982,134984,134986,134988,134990,134992,134994,134996,134998,135000],{"class":99,"line":1393},[97,134983,134781],{"class":370},[97,134985,51621],{"class":103},[97,134987,61910],{"class":370},[97,134989,323],{"class":103},[97,134991,134805],{"class":118},[97,134993,13905],{"class":103},[97,134995,134810],{"class":370},[97,134997,323],{"class":103},[97,134999,134815],{"class":118},[97,135001,38237],{"class":103},[97,135003,135004,135006,135008,135010,135012,135014,135016,135018],{"class":99,"line":1407},[97,135005,134822],{"class":370},[97,135007,323],{"class":103},[97,135009,134827],{"class":118},[97,135011,13905],{"class":103},[97,135013,134810],{"class":370},[97,135015,323],{"class":103},[97,135017,134836],{"class":118},[97,135019,38237],{"class":103},[97,135021,135022,135024,135026,135028,135030,135032,135034,135036],{"class":99,"line":1413},[97,135023,134822],{"class":370},[97,135025,323],{"class":103},[97,135027,134847],{"class":118},[97,135029,13905],{"class":103},[97,135031,134810],{"class":370},[97,135033,323],{"class":103},[97,135035,134856],{"class":118},[97,135037,38237],{"class":103},[97,135039,135040,135042,135044,135046,135048,135050,135052,135054],{"class":99,"line":1504},[97,135041,134822],{"class":370},[97,135043,323],{"class":103},[97,135045,134867],{"class":118},[97,135047,13905],{"class":103},[97,135049,134810],{"class":370},[97,135051,323],{"class":103},[97,135053,134876],{"class":118},[97,135055,2910],{"class":103},[97,135057,135058],{"class":99,"line":1510},[97,135059,1757],{"class":103},[97,135061,135062,135064],{"class":99,"line":1522},[97,135063,134488],{"class":111},[97,135065,15762],{"class":103},[97,135067,135068,135070,135072,135074],{"class":99,"line":1804},[97,135069,134769],{"class":370},[97,135071,51621],{"class":103},[97,135073,134774],{"class":118},[97,135075,1483],{"class":103},[97,135077,135078,135080,135082,135084],{"class":99,"line":1809},[97,135079,134903],{"class":370},[97,135081,51621],{"class":103},[97,135083,64025],{"class":370},[97,135085,1483],{"class":103},[97,135087,135088],{"class":99,"line":1815},[97,135089,1757],{"class":103},[19,135091],{"style":21,"src":135092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[24,135094,135095],{},"更加细节展示：",[138,135097,135098],{},[70,135099,135100],{},"html 标签内添加小图标",[19,135102],{"style":21,"src":135103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[138,135105,135106],{"start":195},[70,135107,135108],{},"给标签定义字体",[87,135110,135111],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,135112,135113,135117,135131,135135],{"__ignoreMap":92},[97,135114,135115],{"class":99,"line":100},[97,135116,130842],{"class":191},[97,135118,135119,135121,135123,135125,135127,135129],{"class":99,"line":195},[97,135120,104],{"class":103},[97,135122,51795],{"class":107},[97,135124,53670],{"class":111},[97,135126,115],{"class":103},[97,135128,130855],{"class":118},[97,135130,130],{"class":103},[97,135132,135133],{"class":99,"line":241},[97,135134,130862],{"class":103},[97,135136,135137,135139,135141],{"class":99,"line":1387},[97,135138,51969],{"class":103},[97,135140,51795],{"class":107},[97,135142,130],{"class":103},[24,135144,135145],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[19,135147],{"style":21,"src":135148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[48,135150,135152],{"id":135151},"_1235-字体图标的追加","12.3.5 字体图标的追加",[24,135154,135155],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[24,135157,135158,135159,135162],{},"把压缩包里面的 ",[469,135160,135161],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[24,135164,135165],{},"打开网站，点下方：",[19,135167],{"style":21,"src":135168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[19,135170],{"style":21,"src":135171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[19,135173],{"style":21,"src":135174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[24,135176,135177],{},"点yes重新加载",[24,135179,135180],{},"然后重复之前的操作就可以实现了",[24,135182,135183],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[48,135185,135187],{"id":135186},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[19,135189],{"style":21,"src":135190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[231,135192,135193],{},"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":92,"searchDepth":195,"depth":195,"links":135195},[135196,135202,135207],{"id":133799,"depth":195,"text":133800,"children":135197},[135198,135199,135200,135201],{"id":133811,"depth":241,"text":133812},{"id":133840,"depth":241,"text":133841},{"id":133868,"depth":241,"text":133869},{"id":133926,"depth":241,"text":133927},{"id":134398,"depth":195,"text":134399,"children":135203},[135204,135205,135206],{"id":134402,"depth":241,"text":134403},{"id":134447,"depth":241,"text":134448},{"id":134463,"depth":241,"text":134464},{"id":134563,"depth":195,"text":134564,"children":135208},[135209,135210,135211,135212,135213,135214],{"id":134567,"depth":241,"text":134568},{"id":134601,"depth":241,"text":134602},{"id":134624,"depth":241,"text":134625},{"id":134671,"depth":241,"text":134672},{"id":135151,"depth":241,"text":135152},{"id":135186,"depth":241,"text":135187},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133791,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135221,"title":135222,"body":135223,"description":246,"extension":247,"meta":136450,"navigation":249,"path":136451,"seo":136452,"stem":136453,"__hash__":136454},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135224,"toc":136431},[135225,135228,135232,135235,135249,135317,135347,135350,135354,135358,135460,135507,135511,135514,135517,135551,135554,135557,135560,135563,135566,135569,135572,135574,135577,135580,135583,135586,135589,135592,135595,135623,135626,135630,135633,135640,135643,135646,135672,135675,135679,135682,135685,135692,135696,135699,135701,135733,135736,135739,135751,135757,135760,135763,135766,135768,135772,135775,135778,135781,135826,135830,135832,135835,135842,135884,135887,135891,135896,135910,135914,135917,135920,135923,135926,135929,135963,135966,135969,136023,136026,136029,136032,136035,136087,136090,136093,136142,136146,136148,136151,136154,136157,136160,136163,136221,136224,136230,136233,136236,136268,136271,136275,136279,136282,136314,136318,136321,136365,136369,136372,136375,136378,136381,136384,136387,136390,136392,136395,136397,136400,136403,136406,136409,136414,136417,136419,136422,136425,136428],[10,135226,135222],{"id":135227},"_13-界面样式与布局技巧",[14,135229,135231],{"id":135230},"_131-css三角","13.1 css三角",[24,135233,135234],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[67,135236,135237,135240,135243,135246],{},[70,135238,135239],{},"用css 边框可以模拟三角效果",[70,135241,135242],{},"宽度高度为0",[70,135244,135245],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[70,135247,135248],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[87,135250,135252],{"className":182,"code":135251,"language":184,"meta":92,"style":92},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[94,135253,135254,135259,135266,135276,135286,135302,135313],{"__ignoreMap":92},[97,135255,135256],{"class":99,"line":100},[97,135257,135258],{"class":191},"\u002F* CSS 实现三角形 *\u002F\n",[97,135260,135261,135264],{"class":99,"line":195},[97,135262,135263],{"class":111},".triangle",[97,135265,15762],{"class":103},[97,135267,135268,135270,135272,135274],{"class":99,"line":241},[97,135269,70752],{"class":370},[97,135271,51621],{"class":103},[97,135273,511],{"class":370},[97,135275,1483],{"class":103},[97,135277,135278,135280,135282,135284],{"class":99,"line":1387},[97,135279,70972],{"class":370},[97,135281,51621],{"class":103},[97,135283,511],{"class":370},[97,135285,1483],{"class":103},[97,135287,135288,135290,135292,135294,135296,135298,135300],{"class":99,"line":1393},[97,135289,71080],{"class":370},[97,135291,51621],{"class":103},[97,135293,766],{"class":370},[97,135295,51676],{"class":319},[97,135297,51705],{"class":370},[97,135299,64175],{"class":370},[97,135301,1483],{"class":103},[97,135303,135304,135307,135309,135311],{"class":99,"line":1407},[97,135305,135306],{"class":370},"  border-bottom-color",[97,135308,51621],{"class":103},[97,135310,62553],{"class":370},[97,135312,1483],{"class":103},[97,135314,135315],{"class":99,"line":1413},[97,135316,1757],{"class":103},[87,135318,135319],{"className":182,"code":130888,"language":184,"meta":92,"style":92},[94,135320,135321,135327,135343],{"__ignoreMap":92},[97,135322,135323,135325],{"class":99,"line":100},[97,135324,51795],{"class":107},[97,135326,15762],{"class":103},[97,135328,135329,135331,135333,135335,135337,135339,135341],{"class":99,"line":195},[97,135330,71080],{"class":370},[97,135332,51621],{"class":103},[97,135334,537],{"class":370},[97,135336,51676],{"class":319},[97,135338,51705],{"class":370},[97,135340,130123],{"class":370},[97,135342,1483],{"class":103},[97,135344,135345],{"class":99,"line":241},[97,135346,1757],{"class":103},[19,135348],{"style":21,"src":135349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135351,135353],{"id":135352},"_132-css用户界面样式","13.2 css用户界面样式",[48,135355,135357],{"id":135356},"_1321-鼠标样式","13.2.1 鼠标样式",[87,135359,135361],{"className":182,"code":135360,"language":184,"meta":92,"style":92},"\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",[94,135362,135363,135368,135387,135405,135424,135441],{"__ignoreMap":92},[97,135364,135365],{"class":99,"line":100},[97,135366,135367],{"class":191},"\u002F* 鼠标样式 *\u002F\n",[97,135369,135370,135372,135374,135377,135379,135381,135384],{"class":99,"line":195},[97,135371,51795],{"class":107},[97,135373,79991],{"class":103},[97,135375,135376],{"class":370},"cursor",[97,135378,51621],{"class":103},[97,135380,62214],{"class":370},[97,135382,135383],{"class":103},"; }   ",[97,135385,135386],{"class":191},"\u002F* 手型 *\u002F\n",[97,135388,135389,135391,135393,135395,135397,135400,135402],{"class":99,"line":241},[97,135390,51795],{"class":107},[97,135392,79991],{"class":103},[97,135394,135376],{"class":370},[97,135396,51621],{"class":103},[97,135398,135399],{"class":370},"default",[97,135401,135383],{"class":103},[97,135403,135404],{"class":191},"\u002F* 默认 *\u002F\n",[97,135406,135407,135409,135411,135413,135415,135418,135421],{"class":99,"line":1387},[97,135408,51795],{"class":107},[97,135410,79991],{"class":103},[97,135412,135376],{"class":370},[97,135414,51621],{"class":103},[97,135416,135417],{"class":370},"move",[97,135419,135420],{"class":103},"; }      ",[97,135422,135423],{"class":191},"\u002F* 移动 *\u002F\n",[97,135425,135426,135428,135430,135432,135434,135436,135438],{"class":99,"line":1393},[97,135427,51795],{"class":107},[97,135429,79991],{"class":103},[97,135431,135376],{"class":370},[97,135433,51621],{"class":103},[97,135435,5378],{"class":370},[97,135437,135420],{"class":103},[97,135439,135440],{"class":191},"\u002F* 文本 *\u002F\n",[97,135442,135443,135445,135447,135449,135451,135454,135457],{"class":99,"line":1407},[97,135444,51795],{"class":107},[97,135446,79991],{"class":103},[97,135448,135376],{"class":370},[97,135450,51621],{"class":103},[97,135452,135453],{"class":370},"not-allowed",[97,135455,135456],{"class":103},"; } ",[97,135458,135459],{"class":191},"\u002F* 禁止 *\u002F\n",[457,135461,135462,135470],{},[460,135463,135464],{},[463,135465,135466,135468],{},[466,135467,127197],{"align":23925},[466,135469,27679],{"align":23925},[504,135471,135472,135479,135486,135493,135500],{},[463,135473,135474,135476],{},[509,135475,135399],{"align":23925},[509,135477,135478],{"align":23925},"小白 默认",[463,135480,135481,135483],{},[509,135482,62214],{"align":23925},[509,135484,135485],{"align":23925},"小手",[463,135487,135488,135490],{},[509,135489,135417],{"align":23925},[509,135491,135492],{"align":23925},"移动",[463,135494,135495,135497],{},[509,135496,5378],{"align":23925},[509,135498,135499],{"align":23925},"文本",[463,135501,135502,135504],{},[509,135503,135453],{"align":23925},[509,135505,135506],{"align":23925},"禁止",[48,135508,135510],{"id":135509},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[24,135512,135513],{},"去除表单轮廓线",[24,135515,135516],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[87,135518,135519],{"className":182,"code":130095,"language":184,"meta":92,"style":92},[94,135520,135521,135525,135531,135547],{"__ignoreMap":92},[97,135522,135523],{"class":99,"line":100},[97,135524,130102],{"class":191},[97,135526,135527,135529],{"class":99,"line":195},[97,135528,51795],{"class":107},[97,135530,15762],{"class":103},[97,135532,135533,135535,135537,135539,135541,135543,135545],{"class":99,"line":241},[97,135534,71080],{"class":370},[97,135536,51621],{"class":103},[97,135538,537],{"class":370},[97,135540,51676],{"class":319},[97,135542,51705],{"class":370},[97,135544,130123],{"class":370},[97,135546,1483],{"class":103},[97,135548,135549],{"class":99,"line":1387},[97,135550,1757],{"class":103},[24,135552,135553],{},"文本域：",[19,135555],{"style":21,"src":135556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[24,135558,135559],{},"此时会有一个空白区域",[19,135561],{"style":21,"src":135562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[24,135564,135565],{},"写在同一行就不会出现这个问题",[19,135567],{"style":21,"src":135568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[24,135570,135571],{},"文本域是行内块元素，一定记住！！！",[24,135573,98417],{},[19,135575],{"style":21,"src":135576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[24,135578,135579],{},"文本域尽量放在一行",[24,135581,135582],{},"知识回顾：cols是列，rols是行",[19,135584],{"style":21,"src":135585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[24,135587,135588],{},"它可以进行拖动，显然这是我们不愿意看到的",[19,135590],{"style":21,"src":135591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[24,135593,135594],{},"使用resize进行解决",[87,135596,135598],{"className":182,"code":135597,"language":184,"meta":92,"style":92},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[94,135599,135600,135606,135619],{"__ignoreMap":92},[97,135601,135602,135604],{"class":99,"line":100},[97,135603,54005],{"class":107},[97,135605,15762],{"class":103},[97,135607,135608,135610,135612,135614,135616],{"class":99,"line":195},[97,135609,70982],{"class":370},[97,135611,51621],{"class":103},[97,135613,54921],{"class":370},[97,135615,130594],{"class":103},[97,135617,135618],{"class":191},"\u002F* 取消表单轮廓线 *\u002F\n",[97,135620,135621],{"class":99,"line":241},[97,135622,1757],{"class":103},[24,135624,135625],{},"此时就无法通过右下方实现拖动了",[48,135627,135629],{"id":135628},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[24,135631,135632],{},"实现一个盒子中的文字和图片对齐",[24,135634,135635,135636,135639],{},"用于设置一个元素的 ",[469,135637,135638],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[24,135641,135642],{},"图片和文字默认是基线对齐",[19,135644],{"style":21,"src":135645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[87,135647,135648],{"className":182,"code":135597,"language":184,"meta":92,"style":92},[94,135649,135650,135656,135668],{"__ignoreMap":92},[97,135651,135652,135654],{"class":99,"line":100},[97,135653,54005],{"class":107},[97,135655,15762],{"class":103},[97,135657,135658,135660,135662,135664,135666],{"class":99,"line":195},[97,135659,70982],{"class":370},[97,135661,51621],{"class":103},[97,135663,54921],{"class":370},[97,135665,130594],{"class":103},[97,135667,135618],{"class":191},[97,135669,135670],{"class":99,"line":241},[97,135671,1757],{"class":103},[19,135673],{"style":21,"src":135674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[160,135676,135678],{"id":135677},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[24,135680,135681],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[19,135683],{"style":21,"src":135684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[24,135686,135687,135688,135691],{},"此时可以给图片、表单这些行内块元素的 ",[469,135689,135690],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[160,135693,135695],{"id":135694},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[24,135697,135698],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[24,135700,14824],{},[87,135702,135704],{"className":182,"code":135703,"language":184,"meta":92,"style":92},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[94,135705,135706,135711,135717,135729],{"__ignoreMap":92},[97,135707,135708],{"class":99,"line":100},[97,135709,135710],{"class":191},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[97,135712,135713,135715],{"class":99,"line":195},[97,135714,19],{"class":107},[97,135716,15762],{"class":103},[97,135718,135719,135722,135724,135727],{"class":99,"line":241},[97,135720,135721],{"class":370},"  vertical-align",[97,135723,51621],{"class":103},[97,135725,135726],{"class":370},"middle",[97,135728,1483],{"class":103},[97,135730,135731],{"class":99,"line":1387},[97,135732,1757],{"class":103},[19,135734],{"style":21,"src":135735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[24,135737,135738],{},"主要解决方法有两种：",[138,135740,135741],{},[70,135742,135743,135746,135747,135750],{},[469,135744,135745],{},"给图片"," 添加 ",[469,135748,135749],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[24,135752,135753,135754],{},"2.把图片转换为块级元素 ",[469,135755,135756],{},"display: block",[24,135758,135759],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[24,135761,135762],{},"img {",[24,135764,135765],{},"vertical-align:middle;",[24,135767,1265],{},[48,135769,135771],{"id":135770},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[24,135773,135774],{},"效果：",[19,135776],{"style":21,"src":135777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[24,135779,135780],{},"单行文本溢出显示省略号--必须满足三个条件：",[87,135782,135784],{"className":182,"code":135783,"language":184,"meta":92,"style":92},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[94,135785,135786,135791,135797,135807,135812,135822],{"__ignoreMap":92},[97,135787,135788],{"class":99,"line":100},[97,135789,135790],{"class":191},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[97,135792,135793,135795],{"class":99,"line":195},[97,135794,19],{"class":107},[97,135796,15762],{"class":103},[97,135798,135799,135801,135803,135805],{"class":99,"line":241},[97,135800,135721],{"class":370},[97,135802,51621],{"class":103},[97,135804,135726],{"class":370},[97,135806,1483],{"class":103},[97,135808,135809],{"class":99,"line":1387},[97,135810,135811],{"class":191},"  \u002F* 或 *\u002F\n",[97,135813,135814,135816,135818,135820],{"class":99,"line":1393},[97,135815,128347],{"class":370},[97,135817,51621],{"class":103},[97,135819,61053],{"class":370},[97,135821,1483],{"class":103},[97,135823,135824],{"class":99,"line":1407},[97,135825,1757],{"class":103},[48,135827,135829],{"id":135828},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[24,135831,135774],{},[19,135833],{"style":21,"src":135834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[24,135836,135837,135838,135841],{},"多行文本溢出显示省略号， ",[469,135839,135840],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[87,135843,135844],{"className":182,"code":135783,"language":184,"meta":92,"style":92},[94,135845,135846,135850,135856,135866,135870,135880],{"__ignoreMap":92},[97,135847,135848],{"class":99,"line":100},[97,135849,135790],{"class":191},[97,135851,135852,135854],{"class":99,"line":195},[97,135853,19],{"class":107},[97,135855,15762],{"class":103},[97,135857,135858,135860,135862,135864],{"class":99,"line":241},[97,135859,135721],{"class":370},[97,135861,51621],{"class":103},[97,135863,135726],{"class":370},[97,135865,1483],{"class":103},[97,135867,135868],{"class":99,"line":1387},[97,135869,135811],{"class":191},[97,135871,135872,135874,135876,135878],{"class":99,"line":1393},[97,135873,128347],{"class":370},[97,135875,51621],{"class":103},[97,135877,61053],{"class":370},[97,135879,1483],{"class":103},[97,135881,135882],{"class":99,"line":1407},[97,135883,1757],{"class":103},[24,135885,135886],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135888,135890],{"id":135889},"_133-常见布局技巧","13.3 常见布局技巧",[24,135892,135893],{},[469,135894,135895],{},"巧妙利用一个技术更快更好的布局：",[138,135897,135898,135901,135904,135907],{},[70,135899,135900],{},"margin负值的运用",[70,135902,135903],{},"文字围绕浮动元素",[70,135905,135906],{},"行内块的巧妙运用",[70,135908,135909],{},"CSS三角强化",[48,135911,135913],{"id":135912},"_1331-margin负值的运用","13.3.1 margin负值的运用",[24,135915,135916],{},"应用场景：",[19,135918],{"style":21,"src":135919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[19,135921],{"style":21,"src":135922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[24,135924,135925],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[24,135927,135928],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[87,135930,135931],{"className":182,"code":130095,"language":184,"meta":92,"style":92},[94,135932,135933,135937,135943,135959],{"__ignoreMap":92},[97,135934,135935],{"class":99,"line":100},[97,135936,130102],{"class":191},[97,135938,135939,135941],{"class":99,"line":195},[97,135940,51795],{"class":107},[97,135942,15762],{"class":103},[97,135944,135945,135947,135949,135951,135953,135955,135957],{"class":99,"line":241},[97,135946,71080],{"class":370},[97,135948,51621],{"class":103},[97,135950,537],{"class":370},[97,135952,51676],{"class":319},[97,135954,51705],{"class":370},[97,135956,130123],{"class":370},[97,135958,1483],{"class":103},[97,135960,135961],{"class":99,"line":1387},[97,135962,1757],{"class":103},[19,135964],{"style":21,"src":135965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[24,135967,135968],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[87,135970,135972],{"className":182,"code":135971,"language":184,"meta":92,"style":92},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[94,135973,135974,135979,135985,135995,136007,136019],{"__ignoreMap":92},[97,135975,135976],{"class":99,"line":100},[97,135977,135978],{"class":191},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[97,135980,135981,135983],{"class":99,"line":195},[97,135982,130579],{"class":111},[97,135984,15762],{"class":103},[97,135986,135987,135989,135991,135993],{"class":99,"line":241},[97,135988,132537],{"class":370},[97,135990,51621],{"class":103},[97,135992,54948],{"class":370},[97,135994,1483],{"class":103},[97,135996,135997,135999,136001,136003,136005],{"class":99,"line":1387},[97,135998,132551],{"class":370},[97,136000,51621],{"class":103},[97,136002,766],{"class":370},[97,136004,51676],{"class":319},[97,136006,1483],{"class":103},[97,136008,136009,136011,136013,136015,136017],{"class":99,"line":1393},[97,136010,132568],{"class":370},[97,136012,51621],{"class":103},[97,136014,1020],{"class":370},[97,136016,51676],{"class":319},[97,136018,1483],{"class":103},[97,136020,136021],{"class":99,"line":1407},[97,136022,1757],{"class":103},[24,136024,136025],{},"加上上述代码会发现：",[19,136027],{"style":21,"src":136028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[24,136030,136031],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[24,136033,136034],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[87,136036,136037],{"className":182,"code":135971,"language":184,"meta":92,"style":92},[94,136038,136039,136043,136049,136059,136071,136083],{"__ignoreMap":92},[97,136040,136041],{"class":99,"line":100},[97,136042,135978],{"class":191},[97,136044,136045,136047],{"class":99,"line":195},[97,136046,130579],{"class":111},[97,136048,15762],{"class":103},[97,136050,136051,136053,136055,136057],{"class":99,"line":241},[97,136052,132537],{"class":370},[97,136054,51621],{"class":103},[97,136056,54948],{"class":370},[97,136058,1483],{"class":103},[97,136060,136061,136063,136065,136067,136069],{"class":99,"line":1387},[97,136062,132551],{"class":370},[97,136064,51621],{"class":103},[97,136066,766],{"class":370},[97,136068,51676],{"class":319},[97,136070,1483],{"class":103},[97,136072,136073,136075,136077,136079,136081],{"class":99,"line":1393},[97,136074,132568],{"class":370},[97,136076,51621],{"class":103},[97,136078,1020],{"class":370},[97,136080,51676],{"class":319},[97,136082,1483],{"class":103},[97,136084,136085],{"class":99,"line":1407},[97,136086,1757],{"class":103},[24,136088,136089],{},"解决方式2：",[24,136091,136092],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[87,136094,136096],{"className":182,"code":136095,"language":184,"meta":92,"style":92},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[94,136097,136098,136104,136114,136126,136138],{"__ignoreMap":92},[97,136099,136100,136102],{"class":99,"line":100},[97,136101,51795],{"class":107},[97,136103,15762],{"class":103},[97,136105,136106,136108,136110,136112],{"class":99,"line":195},[97,136107,132537],{"class":370},[97,136109,51621],{"class":103},[97,136111,54948],{"class":370},[97,136113,1483],{"class":103},[97,136115,136116,136118,136120,136122,136124],{"class":99,"line":241},[97,136117,132551],{"class":370},[97,136119,51621],{"class":103},[97,136121,766],{"class":370},[97,136123,51676],{"class":319},[97,136125,1483],{"class":103},[97,136127,136128,136130,136132,136134,136136],{"class":99,"line":1387},[97,136129,132568],{"class":370},[97,136131,51621],{"class":103},[97,136133,1020],{"class":370},[97,136135,51676],{"class":319},[97,136137,1483],{"class":103},[97,136139,136140],{"class":99,"line":1393},[97,136141,1757],{"class":103},[48,136143,136145],{"id":136144},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[24,136147,135916],{},[19,136149],{"style":21,"src":136150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[24,136152,136153],{},"实现结构图：",[19,136155],{"style":21,"src":136156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[24,136158,136159],{},"巧妙运用浮动元素不会压住文字的特性",[24,136161,136162],{},"代码显示：",[87,136164,136166],{"className":182,"code":136165,"language":184,"meta":92,"style":92},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[94,136167,136168,136174,136184,136188,136193,136197,136203,136217],{"__ignoreMap":92},[97,136169,136170,136172],{"class":99,"line":100},[97,136171,130579],{"class":111},[97,136173,15762],{"class":103},[97,136175,136176,136178,136180,136182],{"class":99,"line":195},[97,136177,131211],{"class":370},[97,136179,51621],{"class":103},[97,136181,23925],{"class":370},[97,136183,1483],{"class":103},[97,136185,136186],{"class":99,"line":241},[97,136187,1757],{"class":103},[97,136189,136190],{"class":99,"line":1387},[97,136191,136192],{"class":103},"```Css\n",[97,136194,136195],{"class":99,"line":1393},[97,136196,130574],{"class":191},[97,136198,136199,136201],{"class":99,"line":1407},[97,136200,130579],{"class":111},[97,136202,15762],{"class":103},[97,136204,136205,136207,136209,136211,136213,136215],{"class":99,"line":1413},[97,136206,70654],{"class":370},[97,136208,51621],{"class":103},[97,136210,511],{"class":370},[97,136212,51740],{"class":370},[97,136214,130594],{"class":103},[97,136216,130597],{"class":191},[97,136218,136219],{"class":99,"line":1504},[97,136220,1757],{"class":103},[24,136222,136223],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[87,136225,136228],{"className":136226,"code":136227,"language":5378},[5376],"\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",[94,136229,136227],{"__ignoreMap":92},[19,136231],{"style":21,"src":136232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[24,136234,136235],{},"最终展示结果：",[87,136237,136238],{"className":182,"code":130567,"language":184,"meta":92,"style":92},[94,136239,136240,136244,136250,136264],{"__ignoreMap":92},[97,136241,136242],{"class":99,"line":100},[97,136243,130574],{"class":191},[97,136245,136246,136248],{"class":99,"line":195},[97,136247,130579],{"class":111},[97,136249,15762],{"class":103},[97,136251,136252,136254,136256,136258,136260,136262],{"class":99,"line":241},[97,136253,70654],{"class":370},[97,136255,51621],{"class":103},[97,136257,511],{"class":370},[97,136259,51740],{"class":370},[97,136261,130594],{"class":103},[97,136263,130597],{"class":191},[97,136265,136266],{"class":99,"line":1387},[97,136267,1757],{"class":103},[19,136269],{"style":21,"src":136270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136272,136274],{"id":136273},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[48,136276,136278],{"id":136277},"_1341-原理","13.4.1 原理",[19,136280],{"style":21,"src":136281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[87,136283,136284],{"className":182,"code":130567,"language":184,"meta":92,"style":92},[94,136285,136286,136290,136296,136310],{"__ignoreMap":92},[97,136287,136288],{"class":99,"line":100},[97,136289,130574],{"class":191},[97,136291,136292,136294],{"class":99,"line":195},[97,136293,130579],{"class":111},[97,136295,15762],{"class":103},[97,136297,136298,136300,136302,136304,136306,136308],{"class":99,"line":241},[97,136299,70654],{"class":370},[97,136301,51621],{"class":103},[97,136303,511],{"class":370},[97,136305,51740],{"class":370},[97,136307,130594],{"class":103},[97,136309,130597],{"class":191},[97,136311,136312],{"class":99,"line":1387},[97,136313,1757],{"class":103},[48,136315,136317],{"id":136316},"_1342-实例","13.4.2 实例",[19,136319],{"style":21,"src":136320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[87,136322,136323],{"className":182,"code":131197,"language":184,"meta":92,"style":92},[94,136324,136325,136331,136341,136345,136351,136361],{"__ignoreMap":92},[97,136326,136327,136329],{"class":99,"line":100},[97,136328,131204],{"class":111},[97,136330,15762],{"class":103},[97,136332,136333,136335,136337,136339],{"class":99,"line":195},[97,136334,131211],{"class":370},[97,136336,51621],{"class":103},[97,136338,23925],{"class":370},[97,136340,1483],{"class":103},[97,136342,136343],{"class":99,"line":241},[97,136344,1757],{"class":103},[97,136346,136347,136349],{"class":99,"line":1387},[97,136348,131226],{"class":111},[97,136350,15762],{"class":103},[97,136352,136353,136355,136357,136359],{"class":99,"line":1393},[97,136354,131211],{"class":370},[97,136356,51621],{"class":103},[97,136358,72706],{"class":370},[97,136360,1483],{"class":103},[97,136362,136363],{"class":99,"line":1407},[97,136364,1757],{"class":103},[14,136366,136368],{"id":136367},"_135-css的初始化","13.5 css的初始化",[24,136370,136371],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[24,136373,136374],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[24,136376,136377],{},"每个网页都必须首先进行 CSS初始化。",[24,136379,136380],{},"这里我们以 京东CSS初始化代码为例。",[24,136382,136383],{},"在网页右键查看网页源代码",[24,136385,136386],{},"找到css的link引入语句",[24,136388,136389],{},"然后ctrl+f 输入body",[24,136391,77410],{},[19,136393],{"style":21,"src":136394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[24,136396,77433],{},[19,136398],{"style":21,"src":136399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[24,136401,136402],{},"③打开了网页上传压缩的代码",[19,136404],{"style":21,"src":136405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[24,136407,136408],{},"④从body前可以查看这个网页的初始化代码",[24,136410,136411],{},[469,136412,136413],{},"Unicode编码字体：",[24,136415,136416],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[24,136418,83391],{},[24,136420,136421],{},"黑体 \\9ED1\\4F53",[24,136423,136424],{},"宋体 \\5B8B\\4F53",[24,136426,136427],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[231,136429,136430],{},"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":92,"searchDepth":195,"depth":195,"links":136432},[136433,136434,136441,136445,136449],{"id":135230,"depth":195,"text":135231},{"id":135352,"depth":195,"text":135353,"children":136435},[136436,136437,136438,136439,136440],{"id":135356,"depth":241,"text":135357},{"id":135509,"depth":241,"text":135510},{"id":135628,"depth":241,"text":135629},{"id":135770,"depth":241,"text":135771},{"id":135828,"depth":241,"text":135829},{"id":135889,"depth":195,"text":135890,"children":136442},[136443,136444],{"id":135912,"depth":241,"text":135913},{"id":136144,"depth":241,"text":136145},{"id":136273,"depth":195,"text":136274,"children":136446},[136447,136448],{"id":136277,"depth":241,"text":136278},{"id":136316,"depth":241,"text":136317},{"id":136367,"depth":195,"text":136368},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135222,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136456,"title":136457,"body":136458,"description":246,"extension":247,"meta":138144,"navigation":249,"path":138145,"seo":138146,"stem":138147,"__hash__":138148},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136459,"toc":138133},[136460,136463,136467,136471,136474,136481,136484,136487,136525,136528,136530,136544,136548,136557,136561,136566,136569,136572,136575,136610,136615,136618,136648,136651,136656,136659,136662,136692,136695,136749,136752,136756,136761,136773,136776,136780,136810,136813,136818,136821,136851,136854,136858,136875,136879,136883,136886,136919,136922,136926,136929,136932,136935,136938,136941,137052,137055,137058,137061,137163,137166,137170,137174,137178,137181,137221,137224,137226,137242,137246,137249,137254,137335,137338,137341,137467,137472,137475,137483,137486,137491,137576,137579,137583,137586,137589,137593,137613,137618,137702,137705,137710,137713,137716,137794,137797,137800,137803,137806,137809,137814,137817,137820,137892,137895,137900,137903,138000,138003,138009,138012,138015,138018,138021,138024,138027,138030,138033,138037,138042,138045,138078,138083,138086,138127,138130],[10,136461,136457],{"id":136462},"_14-html5与css3新特性",[14,136464,136466],{"id":136465},"_141-html5的新特性","14.1 HTML5的新特性",[48,136468,136470],{"id":136469},"_1411-基本标签","14.1.1 基本标签",[24,136472,136473],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[24,136475,136476,136477,136480],{},"这些新特性都有兼容性问题，基本是 ",[469,136478,136479],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[24,136482,136483],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[24,136485,136486],{},"现在使用的是新特性：",[67,136488,136489,136495,136501,136507,136513,136519],{},[70,136490,136491,136494],{},[94,136492,136493],{},"\u003Cheader>"," 头部标签",[70,136496,136497,136500],{},[94,136498,136499],{},"\u003Cnav>"," 导航标签",[70,136502,136503,136506],{},[94,136504,136505],{},"\u003Carticle>"," 内容标签",[70,136508,136509,136512],{},[94,136510,136511],{},"\u003Csection>"," 定义文档某个区域",[70,136514,136515,136518],{},[94,136516,136517],{},"\u003Caside>"," 侧边栏标签",[70,136520,136521,136524],{},[94,136522,136523],{},"\u003Cfooter>"," 尾部标签",[19,136526],{"style":21,"src":136527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[24,136529,352],{},[67,136531,136532,136535,136538,136541],{},[70,136533,136534],{},"这种语义化标准主要是针对搜索引擎的",[70,136536,136537],{},"这些标签页面中可以经常使用",[70,136539,136540],{},"在IE9中，需要把这些元素转换为块级元素",[70,136542,136543],{},"移动端更喜欢使用这些标签",[48,136545,136547],{"id":136546},"_1412-多媒体标签","14.1.2 多媒体标签",[24,136549,136550,136551,136553,136554,136556],{},"音频 ",[469,136552,28364],{}," 和视频 ",[469,136555,28373],{}," 两个标签",[160,136558,136560],{"id":136559},"_14121-视频标签-video","14.1.2.1 视频标签- video",[138,136562,136563],{},[70,136564,136565],{},"支持格式：",[19,136567],{"style":21,"src":136568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[24,136570,136571],{},"尽量使用MP4，兼容性好",[24,136573,136574],{},"用MP4就可以",[87,136576,136578],{"className":89,"code":136577,"language":91,"meta":92,"style":92},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[94,136579,136580],{"__ignoreMap":92},[97,136581,136582,136584,136586,136588,136590,136593,136595,136598,136601,136604,136606,136608],{"class":99,"line":100},[97,136583,104],{"class":103},[97,136585,28373],{"class":107},[97,136587,55423],{"class":111},[97,136589,115],{"class":103},[97,136591,136592],{"class":118},"\"movie.mp4\"",[97,136594,92607],{"class":111},[97,136596,136597],{"class":111}," autoplay",[97,136599,136600],{"class":111}," muted",[97,136602,136603],{"class":111}," loop",[97,136605,55498],{"class":103},[97,136607,28373],{"class":107},[97,136609,130],{"class":103},[138,136611,136612],{"start":195},[70,136613,136614],{},"兼容写法",[24,136616,136617],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[87,136619,136620],{"className":89,"code":136577,"language":91,"meta":92,"style":92},[94,136621,136622],{"__ignoreMap":92},[97,136623,136624,136626,136628,136630,136632,136634,136636,136638,136640,136642,136644,136646],{"class":99,"line":100},[97,136625,104],{"class":103},[97,136627,28373],{"class":107},[97,136629,55423],{"class":111},[97,136631,115],{"class":103},[97,136633,136592],{"class":118},[97,136635,92607],{"class":111},[97,136637,136597],{"class":111},[97,136639,136600],{"class":111},[97,136641,136603],{"class":111},[97,136643,55498],{"class":103},[97,136645,28373],{"class":107},[97,136647,130],{"class":103},[24,136649,136650],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[138,136652,136653],{"start":241},[70,136654,136655],{},"video常用属性",[19,136657],{"style":21,"src":136658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[24,136660,136661],{},"poster属性后面是跟的等待加载图片的地址",[87,136663,136664],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,136665,136666],{"__ignoreMap":92},[97,136667,136668,136670,136672,136674,136676,136678,136680,136682,136684,136686,136688,136690],{"class":99,"line":100},[97,136669,104],{"class":103},[97,136671,19],{"class":107},[97,136673,55423],{"class":111},[97,136675,115],{"class":103},[97,136677,134248],{"class":118},[97,136679,55431],{"class":111},[97,136681,115],{"class":103},[97,136683,134255],{"class":118},[97,136685,134258],{"class":111},[97,136687,115],{"class":103},[97,136689,134263],{"class":118},[97,136691,130],{"class":103},[24,136693,136694],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[87,136696,136698],{"className":182,"code":136697,"language":184,"meta":92,"style":92},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[94,136699,136700,136705,136711,136735,136740,136745],{"__ignoreMap":92},[97,136701,136702],{"class":99,"line":100},[97,136703,136704],{"class":191},"\u002F* 2D 位移 *\u002F\n",[97,136706,136707,136709],{"class":99,"line":195},[97,136708,51795],{"class":107},[97,136710,15762],{"class":103},[97,136712,136713,136716,136718,136721,136723,136725,136727,136729,136731,136733],{"class":99,"line":241},[97,136714,136715],{"class":370},"  transform",[97,136717,51621],{"class":103},[97,136719,136720],{"class":370},"translate",[97,136722,323],{"class":103},[97,136724,631],{"class":370},[97,136726,51676],{"class":319},[97,136728,12626],{"class":103},[97,136730,976],{"class":370},[97,136732,51676],{"class":319},[97,136734,2910],{"class":103},[97,136736,136737],{"class":99,"line":1387},[97,136738,136739],{"class":191},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[97,136741,136742],{"class":99,"line":1393},[97,136743,136744],{"class":191},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[97,136746,136747],{"class":99,"line":1407},[97,136748,1757],{"class":103},[24,136750,136751],{},"muted:自动静音属性",[160,136753,136755],{"id":136754},"_14122-音频标签audio","14.1.2.2 音频标签audio",[138,136757,136758],{},[70,136759,136760],{},"基本使用",[24,136762,136763,136764,136769,136770],{},"当前 ",[469,136765,136766],{},[94,136767,136768],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[469,136771,136772],{},"mp3格式",[19,136774],{"style":21,"src":136775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[138,136777,136778],{"start":195},[70,136779,136614],{},[87,136781,136782],{"className":89,"code":136577,"language":91,"meta":92,"style":92},[94,136783,136784],{"__ignoreMap":92},[97,136785,136786,136788,136790,136792,136794,136796,136798,136800,136802,136804,136806,136808],{"class":99,"line":100},[97,136787,104],{"class":103},[97,136789,28373],{"class":107},[97,136791,55423],{"class":111},[97,136793,115],{"class":103},[97,136795,136592],{"class":118},[97,136797,92607],{"class":111},[97,136799,136597],{"class":111},[97,136801,136600],{"class":111},[97,136803,136603],{"class":111},[97,136805,55498],{"class":103},[97,136807,28373],{"class":107},[97,136809,130],{"class":103},[24,136811,136812],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[138,136814,136815],{"start":241},[70,136816,136817],{},"常用属性",[19,136819],{"style":21,"src":136820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[87,136822,136823],{"className":89,"code":136577,"language":91,"meta":92,"style":92},[94,136824,136825],{"__ignoreMap":92},[97,136826,136827,136829,136831,136833,136835,136837,136839,136841,136843,136845,136847,136849],{"class":99,"line":100},[97,136828,104],{"class":103},[97,136830,28373],{"class":107},[97,136832,55423],{"class":111},[97,136834,115],{"class":103},[97,136836,136592],{"class":118},[97,136838,92607],{"class":111},[97,136840,136597],{"class":111},[97,136842,136600],{"class":111},[97,136844,136603],{"class":111},[97,136846,55498],{"class":103},[97,136848,28373],{"class":107},[97,136850,130],{"class":103},[24,136852,136853],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[160,136855,136857],{"id":136856},"_14123-总结","14.1.2.3 总结",[67,136859,136860,136863,136866,136869,136872],{},[70,136861,136862],{},"音频标签和视频标签使用方式基本一致",[70,136864,136865],{},"浏览器支持情况不同",[70,136867,136868],{},"谷歌浏览器把音频和视频自动播放禁止了",[70,136870,136871],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[70,136873,136874],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[48,136876,136878],{"id":136877},"_1413-表单元素","14.1.3 表单元素",[160,136880,136882],{"id":136881},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[19,136884],{"style":21,"src":136885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[87,136887,136889],{"className":89,"code":136888,"language":91,"meta":92,"style":92},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[94,136890,136891],{"__ignoreMap":92},[97,136892,136893,136895,136897,136899,136901,136903,136905,136907,136910,136912,136914,136917],{"class":99,"line":100},[97,136894,104],{"class":103},[97,136896,54005],{"class":107},[97,136898,54008],{"class":111},[97,136900,115],{"class":103},[97,136902,62883],{"class":118},[97,136904,112],{"class":111},[97,136906,115],{"class":103},[97,136908,136909],{"class":118},"\"username\"",[97,136911,61204],{"class":111},[97,136913,115],{"class":103},[97,136915,136916],{"class":118},"\"请输入用户名\"",[97,136918,130],{"class":103},[19,136920],{"style":21,"src":136921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[160,136923,136925],{"id":136924},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[19,136927],{"style":21,"src":136928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[24,136930,136931],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[24,136933,136934],{},"快捷操作：",[19,136936],{"style":21,"src":136937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[24,136939,136940],{},"例子1：",[87,136942,136944],{"className":89,"code":136943,"language":91,"meta":92,"style":92},"\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",[94,136945,136946,136969,136996,137025,137044],{"__ignoreMap":92},[97,136947,136948,136950,136952,136954,136956,136959,136962,136964,136967],{"class":99,"line":100},[97,136949,104],{"class":103},[97,136951,66809],{"class":107},[97,136953,66812],{"class":111},[97,136955,115],{"class":103},[97,136957,136958],{"class":118},"\"\u002Fsubmit\"",[97,136960,136961],{"class":111}," method",[97,136963,115],{"class":103},[97,136965,136966],{"class":118},"\"post\"",[97,136968,130],{"class":103},[97,136970,136971,136973,136975,136977,136979,136981,136983,136985,136987,136989,136991,136994],{"class":99,"line":195},[97,136972,52328],{"class":103},[97,136974,54005],{"class":107},[97,136976,54008],{"class":111},[97,136978,115],{"class":103},[97,136980,62883],{"class":118},[97,136982,112],{"class":111},[97,136984,115],{"class":103},[97,136986,136909],{"class":118},[97,136988,61204],{"class":111},[97,136990,115],{"class":103},[97,136992,136993],{"class":118},"\"用户名\"",[97,136995,130],{"class":103},[97,136997,136998,137000,137002,137004,137006,137009,137011,137013,137016,137018,137020,137023],{"class":99,"line":241},[97,136999,52328],{"class":103},[97,137001,54005],{"class":107},[97,137003,54008],{"class":111},[97,137005,115],{"class":103},[97,137007,137008],{"class":118},"\"password\"",[97,137010,112],{"class":111},[97,137012,115],{"class":103},[97,137014,137015],{"class":118},"\"pwd\"",[97,137017,61204],{"class":111},[97,137019,115],{"class":103},[97,137021,137022],{"class":118},"\"密码\"",[97,137024,130],{"class":103},[97,137026,137027,137029,137031,137033,137035,137037,137040,137042],{"class":99,"line":1387},[97,137028,52328],{"class":103},[97,137030,54071],{"class":107},[97,137032,54008],{"class":111},[97,137034,115],{"class":103},[97,137036,66832],{"class":118},[97,137038,137039],{"class":103},">提交\u003C\u002F",[97,137041,54071],{"class":107},[97,137043,130],{"class":103},[97,137045,137046,137048,137050],{"class":99,"line":1393},[97,137047,51969],{"class":103},[97,137049,66809],{"class":107},[97,137051,130],{"class":103},[19,137053],{"style":21,"src":137054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[24,137056,137057],{},"value是表单域的内容",[24,137059,137060],{},"例子2：",[87,137062,137063],{"className":89,"code":136943,"language":91,"meta":92,"style":92},[94,137064,137065,137085,137111,137137,137155],{"__ignoreMap":92},[97,137066,137067,137069,137071,137073,137075,137077,137079,137081,137083],{"class":99,"line":100},[97,137068,104],{"class":103},[97,137070,66809],{"class":107},[97,137072,66812],{"class":111},[97,137074,115],{"class":103},[97,137076,136958],{"class":118},[97,137078,136961],{"class":111},[97,137080,115],{"class":103},[97,137082,136966],{"class":118},[97,137084,130],{"class":103},[97,137086,137087,137089,137091,137093,137095,137097,137099,137101,137103,137105,137107,137109],{"class":99,"line":195},[97,137088,52328],{"class":103},[97,137090,54005],{"class":107},[97,137092,54008],{"class":111},[97,137094,115],{"class":103},[97,137096,62883],{"class":118},[97,137098,112],{"class":111},[97,137100,115],{"class":103},[97,137102,136909],{"class":118},[97,137104,61204],{"class":111},[97,137106,115],{"class":103},[97,137108,136993],{"class":118},[97,137110,130],{"class":103},[97,137112,137113,137115,137117,137119,137121,137123,137125,137127,137129,137131,137133,137135],{"class":99,"line":241},[97,137114,52328],{"class":103},[97,137116,54005],{"class":107},[97,137118,54008],{"class":111},[97,137120,115],{"class":103},[97,137122,137008],{"class":118},[97,137124,112],{"class":111},[97,137126,115],{"class":103},[97,137128,137015],{"class":118},[97,137130,61204],{"class":111},[97,137132,115],{"class":103},[97,137134,137022],{"class":118},[97,137136,130],{"class":103},[97,137138,137139,137141,137143,137145,137147,137149,137151,137153],{"class":99,"line":1387},[97,137140,52328],{"class":103},[97,137142,54071],{"class":107},[97,137144,54008],{"class":111},[97,137146,115],{"class":103},[97,137148,66832],{"class":118},[97,137150,137039],{"class":103},[97,137152,54071],{"class":107},[97,137154,130],{"class":103},[97,137156,137157,137159,137161],{"class":99,"line":1393},[97,137158,51969],{"class":103},[97,137160,66809],{"class":107},[97,137162,130],{"class":103},[19,137164],{"style":21,"src":137165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137167,137169],{"id":137168},"_142-css新特性","14.2 CSS新特性",[48,137171,137173],{"id":137172},"_1421-新增选择器","14.2.1 新增选择器",[160,137175,137177],{"id":137176},"_14211-属性选择器","14.2.1.1 属性选择器",[19,137179],{"style":21,"src":137180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[87,137182,137184],{"className":182,"code":137183,"language":184,"meta":92,"style":92},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[94,137185,137186,137201,137217],{"__ignoreMap":92},[97,137187,137188,137190,137192,137194,137196,137198],{"class":99,"line":100},[97,137189,54005],{"class":107},[97,137191,1210],{"class":103},[97,137193,103291],{"class":111},[97,137195,115],{"class":319},[97,137197,62883],{"class":118},[97,137199,137200],{"class":103},"] {\n",[97,137202,137203,137205,137207,137209,137211,137213,137215],{"class":99,"line":195},[97,137204,71080],{"class":370},[97,137206,51621],{"class":103},[97,137208,537],{"class":370},[97,137210,51676],{"class":319},[97,137212,51705],{"class":370},[97,137214,130311],{"class":370},[97,137216,1483],{"class":103},[97,137218,137219],{"class":99,"line":241},[97,137220,1757],{"class":103},[19,137222],{"style":21,"src":137223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[24,137225,352],{},[67,137227,137228,137231,137234,137237],{},[70,137229,137230],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[70,137232,137233],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[70,137235,137236],{},"属性选择器也可以选择出来自定义的属性",[70,137238,137239,137241],{},[469,137240,9216],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[160,137243,137245],{"id":137244},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[19,137247],{"style":21,"src":137248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[138,137250,137251],{},[70,137252,137253],{},"fist-child",[87,137255,137257],{"className":182,"code":137256,"language":184,"meta":92,"style":92},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[94,137258,137259,137264,137279,137299,137317],{"__ignoreMap":92},[97,137260,137261],{"class":99,"line":100},[97,137262,137263],{"class":191},"\u002F* 属性选择器 *\u002F\n",[97,137265,137266,137268,137270,137272,137274,137276],{"class":99,"line":195},[97,137267,54005],{"class":107},[97,137269,1210],{"class":103},[97,137271,103291],{"class":111},[97,137273,115],{"class":319},[97,137275,62883],{"class":118},[97,137277,137278],{"class":103},"] { }\n",[97,137280,137281,137283,137285,137287,137290,137293,137296],{"class":99,"line":241},[97,137282,54005],{"class":107},[97,137284,1210],{"class":103},[97,137286,14885],{"class":111},[97,137288,137289],{"class":319},"^=",[97,137291,137292],{"class":118},"\"icon\"",[97,137294,137295],{"class":103},"] { }  ",[97,137297,137298],{"class":191},"\u002F* 以 icon 开头 *\u002F\n",[97,137300,137301,137303,137305,137307,137310,137312,137314],{"class":99,"line":1387},[97,137302,54005],{"class":107},[97,137304,1210],{"class":103},[97,137306,14885],{"class":111},[97,137308,137309],{"class":319},"$=",[97,137311,137292],{"class":118},[97,137313,137295],{"class":103},[97,137315,137316],{"class":191},"\u002F* 以 icon 结尾 *\u002F\n",[97,137318,137319,137321,137323,137325,137328,137330,137332],{"class":99,"line":1393},[97,137320,54005],{"class":107},[97,137322,1210],{"class":103},[97,137324,14885],{"class":111},[97,137326,137327],{"class":319},"*=",[97,137329,137292],{"class":118},[97,137331,137295],{"class":103},[97,137333,137334],{"class":191},"\u002F* 包含 icon *\u002F\n",[24,137336,137337],{},"ul的第一个儿子文本为红色",[24,137339,137340],{},"一定要在冒号前加空格，不然就是选中所有的了",[87,137342,137344],{"className":182,"code":137343,"language":184,"meta":92,"style":92},".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",[94,137345,137346,137352,137362,137366,137370,137375,137388,137401,137417,137434,137451],{"__ignoreMap":92},[97,137347,137348,137350],{"class":99,"line":100},[97,137349,127024],{"class":111},[97,137351,15762],{"class":103},[97,137353,137354,137356,137358,137360],{"class":99,"line":195},[97,137355,71089],{"class":370},[97,137357,51621],{"class":103},[97,137359,57605],{"class":370},[97,137361,1483],{"class":103},[97,137363,137364],{"class":99,"line":241},[97,137365,1757],{"class":103},[97,137367,137368],{"class":99,"line":1387},[97,137369,136192],{"class":103},[97,137371,137372],{"class":99,"line":1393},[97,137373,137374],{"class":191},"\u002F* 结构伪类选择器 *\u002F\n",[97,137376,137377,137379,137382,137385],{"class":99,"line":1407},[97,137378,70],{"class":107},[97,137380,137381],{"class":111},":first-child",[97,137383,137384],{"class":103}," { }           ",[97,137386,137387],{"class":191},"\u002F* 第一个 *\u002F\n",[97,137389,137390,137392,137395,137398],{"class":99,"line":1413},[97,137391,70],{"class":107},[97,137393,137394],{"class":111},":last-child",[97,137396,137397],{"class":103}," { }            ",[97,137399,137400],{"class":191},"\u002F* 最后一个 *\u002F\n",[97,137402,137403,137405,137407,137409,137411,137414],{"class":99,"line":1504},[97,137404,70],{"class":107},[97,137406,129645],{"class":111},[97,137408,323],{"class":103},[97,137410,398],{"class":370},[97,137412,137413],{"class":103},") { }          ",[97,137415,137416],{"class":191},"\u002F* 第2个 *\u002F\n",[97,137418,137419,137421,137423,137425,137428,137431],{"class":99,"line":1510},[97,137420,70],{"class":107},[97,137422,129645],{"class":111},[97,137424,323],{"class":103},[97,137426,137427],{"class":370},"2n",[97,137429,137430],{"class":103},") { }         ",[97,137432,137433],{"class":191},"\u002F* 偶数 *\u002F\n",[97,137435,137436,137438,137440,137442,137445,137448],{"class":99,"line":1522},[97,137437,70],{"class":107},[97,137439,129645],{"class":111},[97,137441,323],{"class":103},[97,137443,137444],{"class":370},"2n+1",[97,137446,137447],{"class":103},") { }       ",[97,137449,137450],{"class":191},"\u002F* 奇数 *\u002F\n",[97,137452,137453,137455,137457,137459,137462,137464],{"class":99,"line":1804},[97,137454,70],{"class":107},[97,137456,129645],{"class":111},[97,137458,323],{"class":103},[97,137460,137461],{"class":370},"-n+3",[97,137463,137447],{"class":103},[97,137465,137466],{"class":191},"\u002F* 前3个 *\u002F\n",[51795,137468,137471],{"className":137469},[137470],"example","\n  示例内容\n",[24,137473,137474],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[67,137476,137477],{},[70,137478,137479,137482],{},[94,137480,137481],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[24,137484,137485],{},"也就是说它选择的是熊大",[138,137487,137488],{"start":1407},[70,137489,137490],{},"权重",[87,137492,137494],{"className":182,"code":137493,"language":184,"meta":92,"style":92},"\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",[94,137495,137496,137500,137510,137520,137534,137548,137562],{"__ignoreMap":92},[97,137497,137498],{"class":99,"line":100},[97,137499,137374],{"class":191},[97,137501,137502,137504,137506,137508],{"class":99,"line":195},[97,137503,70],{"class":107},[97,137505,137381],{"class":111},[97,137507,137384],{"class":103},[97,137509,137387],{"class":191},[97,137511,137512,137514,137516,137518],{"class":99,"line":241},[97,137513,70],{"class":107},[97,137515,137394],{"class":111},[97,137517,137397],{"class":103},[97,137519,137400],{"class":191},[97,137521,137522,137524,137526,137528,137530,137532],{"class":99,"line":1387},[97,137523,70],{"class":107},[97,137525,129645],{"class":111},[97,137527,323],{"class":103},[97,137529,398],{"class":370},[97,137531,137413],{"class":103},[97,137533,137416],{"class":191},[97,137535,137536,137538,137540,137542,137544,137546],{"class":99,"line":1393},[97,137537,70],{"class":107},[97,137539,129645],{"class":111},[97,137541,323],{"class":103},[97,137543,137427],{"class":370},[97,137545,137430],{"class":103},[97,137547,137433],{"class":191},[97,137549,137550,137552,137554,137556,137558,137560],{"class":99,"line":1407},[97,137551,70],{"class":107},[97,137553,129645],{"class":111},[97,137555,323],{"class":103},[97,137557,137444],{"class":370},[97,137559,137447],{"class":103},[97,137561,137450],{"class":191},[97,137563,137564,137566,137568,137570,137572,137574],{"class":99,"line":1413},[97,137565,70],{"class":107},[97,137567,129645],{"class":111},[97,137569,323],{"class":103},[97,137571,137461],{"class":370},[97,137573,137447],{"class":103},[97,137575,137466],{"class":191},[24,137577,137578],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[160,137580,137582],{"id":137581},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[24,137584,137585],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[19,137587],{"style":21,"src":137588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[138,137590,137591],{},[70,137592,352],{},[67,137594,137595,137598,137601,137604,137607,137610],{},[70,137596,137597],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[70,137599,137600],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[70,137602,137603],{},"语法： element::before {}",[70,137605,137606],{},"before 和 after 必须有 content 属性",[70,137608,137609],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[70,137611,137612],{},"伪元素选择器和标签选择器一样，权重为 1",[138,137614,137615],{"start":195},[70,137616,137617],{},"实例",[87,137619,137620],{"className":182,"code":137493,"language":184,"meta":92,"style":92},[94,137621,137622,137626,137636,137646,137660,137674,137688],{"__ignoreMap":92},[97,137623,137624],{"class":99,"line":100},[97,137625,137374],{"class":191},[97,137627,137628,137630,137632,137634],{"class":99,"line":195},[97,137629,70],{"class":107},[97,137631,137381],{"class":111},[97,137633,137384],{"class":103},[97,137635,137387],{"class":191},[97,137637,137638,137640,137642,137644],{"class":99,"line":241},[97,137639,70],{"class":107},[97,137641,137394],{"class":111},[97,137643,137397],{"class":103},[97,137645,137400],{"class":191},[97,137647,137648,137650,137652,137654,137656,137658],{"class":99,"line":1387},[97,137649,70],{"class":107},[97,137651,129645],{"class":111},[97,137653,323],{"class":103},[97,137655,398],{"class":370},[97,137657,137413],{"class":103},[97,137659,137416],{"class":191},[97,137661,137662,137664,137666,137668,137670,137672],{"class":99,"line":1393},[97,137663,70],{"class":107},[97,137665,129645],{"class":111},[97,137667,323],{"class":103},[97,137669,137427],{"class":370},[97,137671,137430],{"class":103},[97,137673,137433],{"class":191},[97,137675,137676,137678,137680,137682,137684,137686],{"class":99,"line":1407},[97,137677,70],{"class":107},[97,137679,129645],{"class":111},[97,137681,323],{"class":103},[97,137683,137444],{"class":370},[97,137685,137447],{"class":103},[97,137687,137450],{"class":191},[97,137689,137690,137692,137694,137696,137698,137700],{"class":99,"line":1413},[97,137691,70],{"class":107},[97,137693,129645],{"class":111},[97,137695,323],{"class":103},[97,137697,137461],{"class":370},[97,137699,137447],{"class":103},[97,137701,137466],{"class":191},[19,137703],{"style":21,"src":137704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[138,137706,137707],{"start":241},[70,137708,137709],{},"使用场景1",[19,137711],{"style":21,"src":137712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[24,137714,137715],{},"不需要再加盒子来整红色那部分了",[87,137717,137719],{"className":182,"code":137718,"language":184,"meta":92,"style":92},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[94,137720,137721,137726,137735,137746,137756,137760,137769,137780,137790],{"__ignoreMap":92},[97,137722,137723],{"class":99,"line":100},[97,137724,137725],{"class":191},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[97,137727,137728,137730,137733],{"class":99,"line":195},[97,137729,51795],{"class":107},[97,137731,137732],{"class":111},"::before",[97,137734,15762],{"class":103},[97,137736,137737,137740,137742,137744],{"class":99,"line":241},[97,137738,137739],{"class":370},"  content",[97,137741,51621],{"class":103},[97,137743,7843],{"class":118},[97,137745,1483],{"class":103},[97,137747,137748,137750,137752,137754],{"class":99,"line":1387},[97,137749,128347],{"class":370},[97,137751,51621],{"class":103},[97,137753,61053],{"class":370},[97,137755,1483],{"class":103},[97,137757,137758],{"class":99,"line":1393},[97,137759,1757],{"class":103},[97,137761,137762,137764,137767],{"class":99,"line":1407},[97,137763,51795],{"class":107},[97,137765,137766],{"class":111},"::after",[97,137768,15762],{"class":103},[97,137770,137771,137773,137775,137778],{"class":99,"line":1413},[97,137772,137739],{"class":370},[97,137774,51621],{"class":103},[97,137776,137777],{"class":118},"\"→\"",[97,137779,1483],{"class":103},[97,137781,137782,137784,137786,137788],{"class":99,"line":1504},[97,137783,71089],{"class":370},[97,137785,51621],{"class":103},[97,137787,62254],{"class":370},[97,137789,1483],{"class":103},[97,137791,137792],{"class":99,"line":1510},[97,137793,1757],{"class":103},[19,137795],{"style":21,"src":137796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[24,137798,137799],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[19,137801],{"style":21,"src":137802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[24,137804,137805],{},"但是在引用时需要先转义一下",[24,137807,137808],{},"content='\\e930'",[138,137810,137811],{"start":1387},[70,137812,137813],{},"使用场景2",[24,137815,137816],{},"仿土豆效果",[24,137818,137819],{},"通过使用伪元素选择器可以减少body中盒子的数量",[87,137821,137822],{"className":182,"code":137718,"language":184,"meta":92,"style":92},[94,137823,137824,137828,137836,137846,137856,137860,137868,137878,137888],{"__ignoreMap":92},[97,137825,137826],{"class":99,"line":100},[97,137827,137725],{"class":191},[97,137829,137830,137832,137834],{"class":99,"line":195},[97,137831,51795],{"class":107},[97,137833,137732],{"class":111},[97,137835,15762],{"class":103},[97,137837,137838,137840,137842,137844],{"class":99,"line":241},[97,137839,137739],{"class":370},[97,137841,51621],{"class":103},[97,137843,7843],{"class":118},[97,137845,1483],{"class":103},[97,137847,137848,137850,137852,137854],{"class":99,"line":1387},[97,137849,128347],{"class":370},[97,137851,51621],{"class":103},[97,137853,61053],{"class":370},[97,137855,1483],{"class":103},[97,137857,137858],{"class":99,"line":1393},[97,137859,1757],{"class":103},[97,137861,137862,137864,137866],{"class":99,"line":1407},[97,137863,51795],{"class":107},[97,137865,137766],{"class":111},[97,137867,15762],{"class":103},[97,137869,137870,137872,137874,137876],{"class":99,"line":1413},[97,137871,137739],{"class":370},[97,137873,51621],{"class":103},[97,137875,137777],{"class":118},[97,137877,1483],{"class":103},[97,137879,137880,137882,137884,137886],{"class":99,"line":1504},[97,137881,71089],{"class":370},[97,137883,51621],{"class":103},[97,137885,62254],{"class":370},[97,137887,1483],{"class":103},[97,137889,137890],{"class":99,"line":1510},[97,137891,1757],{"class":103},[19,137893],{"style":21,"src":137894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[138,137896,137897],{"start":1393},[70,137898,137899],{},"使用场景3",[24,137901,137902],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[87,137904,137906],{"className":182,"code":137905,"language":184,"meta":92,"style":92},".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",[94,137907,137908,137914,137924,137928,137932,137936,137944,137954,137964,137968,137976,137986,137996],{"__ignoreMap":92},[97,137909,137910,137912],{"class":99,"line":100},[97,137911,130579],{"class":111},[97,137913,15762],{"class":103},[97,137915,137916,137918,137920,137922],{"class":99,"line":195},[97,137917,131211],{"class":370},[97,137919,51621],{"class":103},[97,137921,23925],{"class":370},[97,137923,1483],{"class":103},[97,137925,137926],{"class":99,"line":241},[97,137927,1757],{"class":103},[97,137929,137930],{"class":99,"line":1387},[97,137931,136192],{"class":103},[97,137933,137934],{"class":99,"line":1393},[97,137935,137725],{"class":191},[97,137937,137938,137940,137942],{"class":99,"line":1407},[97,137939,51795],{"class":107},[97,137941,137732],{"class":111},[97,137943,15762],{"class":103},[97,137945,137946,137948,137950,137952],{"class":99,"line":1413},[97,137947,137739],{"class":370},[97,137949,51621],{"class":103},[97,137951,7843],{"class":118},[97,137953,1483],{"class":103},[97,137955,137956,137958,137960,137962],{"class":99,"line":1504},[97,137957,128347],{"class":370},[97,137959,51621],{"class":103},[97,137961,61053],{"class":370},[97,137963,1483],{"class":103},[97,137965,137966],{"class":99,"line":1510},[97,137967,1757],{"class":103},[97,137969,137970,137972,137974],{"class":99,"line":1522},[97,137971,51795],{"class":107},[97,137973,137766],{"class":111},[97,137975,15762],{"class":103},[97,137977,137978,137980,137982,137984],{"class":99,"line":1804},[97,137979,137739],{"class":370},[97,137981,51621],{"class":103},[97,137983,137777],{"class":118},[97,137985,1483],{"class":103},[97,137987,137988,137990,137992,137994],{"class":99,"line":1809},[97,137989,71089],{"class":370},[97,137991,51621],{"class":103},[97,137993,62254],{"class":370},[97,137995,1483],{"class":103},[97,137997,137998],{"class":99,"line":1815},[97,137999,1757],{"class":103},[24,138001,138002],{},"div {\nmargin: 0 auto;\n}",[87,138004,138007],{"className":138005,"code":138006,"language":5378},[5376],"\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",[94,138008,138006],{"__ignoreMap":92},[24,138010,138011],{},"如果想让多个元素都发生变化",[24,138013,138014],{},"不能如下操作：",[24,138016,138017],{},"transition: width 2s ease 0.5s;",[24,138019,138020],{},"transition: height 2s ease 0.5s;不对！！！",[24,138022,138023],{},"上方会样式冲突，导致不显示任何过渡效果",[24,138025,138026],{},"使用如下：加逗号隔开",[24,138028,138029],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[24,138031,138032],{},"transition all 2s ease;",[48,138034,138036],{"id":138035},"_1426-过渡练习","14.2.6 过渡练习",[138,138038,138039],{},[70,138040,138041],{},"进度条",[19,138043],{"style":21,"src":138044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[87,138046,138048],{"className":182,"code":138047,"language":184,"meta":92,"style":92},"div {\n  transition: all 0.3s ease;\n}\n",[94,138049,138050,138056,138074],{"__ignoreMap":92},[97,138051,138052,138054],{"class":99,"line":100},[97,138053,51795],{"class":107},[97,138055,15762],{"class":103},[97,138057,138058,138061,138063,138065,138068,138070,138072],{"class":99,"line":195},[97,138059,138060],{"class":370},"  transition",[97,138062,51621],{"class":103},[97,138064,28311],{"class":370},[97,138066,138067],{"class":370}," 0.3",[97,138069,1015],{"class":319},[97,138071,78864],{"class":370},[97,138073,1483],{"class":103},[97,138075,138076],{"class":99,"line":241},[97,138077,1757],{"class":103},[138,138079,138080],{"start":195},[70,138081,138082],{},"小米logo",[24,138084,138085],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[87,138087,138089],{"className":182,"code":138088,"language":184,"meta":92,"style":92},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[94,138090,138091,138096,138102,138118,138123],{"__ignoreMap":92},[97,138092,138093],{"class":99,"line":100},[97,138094,138095],{"class":191},"\u002F* CSS3 过渡 *\u002F\n",[97,138097,138098,138100],{"class":99,"line":195},[97,138099,51795],{"class":107},[97,138101,15762],{"class":103},[97,138103,138104,138106,138108,138110,138112,138114,138116],{"class":99,"line":241},[97,138105,138060],{"class":370},[97,138107,51621],{"class":103},[97,138109,28311],{"class":370},[97,138111,138067],{"class":370},[97,138113,1015],{"class":319},[97,138115,78864],{"class":370},[97,138117,1483],{"class":103},[97,138119,138120],{"class":99,"line":1387},[97,138121,138122],{"class":191},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[97,138124,138125],{"class":99,"line":1393},[97,138126,1757],{"class":103},[24,138128,138129],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[231,138131,138132],{},"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":92,"searchDepth":195,"depth":195,"links":138134},[138135,138140],{"id":136465,"depth":195,"text":136466,"children":138136},[138137,138138,138139],{"id":136469,"depth":241,"text":136470},{"id":136546,"depth":241,"text":136547},{"id":136877,"depth":241,"text":136878},{"id":137168,"depth":195,"text":137169,"children":138141},[138142,138143],{"id":137172,"depth":241,"text":137173},{"id":138035,"depth":241,"text":138036},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136457,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138150,"title":138151,"body":138152,"description":246,"extension":247,"meta":139896,"navigation":249,"path":139897,"seo":139898,"stem":139899,"__hash__":139900},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138153,"toc":139877},[138154,138157,138161,138164,138170,138176,138180,138182,138185,138188,138191,138194,138197,138200,138203,138207,138211,138214,138217,138220,138224,138227,138230,138235,138238,138241,138244,138248,138251,138260,138263,138266,138270,138273,138276,138281,138288,138302,138310,138317,138322,138325,138328,138331,138338,138342,138348,138354,138357,138360,138365,138371,138373,138381,138386,138389,138395,138397,138402,138407,138410,138412,138417,138420,138425,138430,138464,138468,138472,138475,138479,138482,138568,138571,138608,138611,138647,138651,138656,138669,138723,138725,138753,138755,138783,138789,138803,138805,138849,138851,138895,138898,138905,138916,138918,138945,138947,138973,138980,138996,138998,139092,139094,139188,139195,139198,139203,139209,139283,139286,139288,139324,139326,139362,139365,139372,139391,139394,139397,139399,139424,139426,139450,139453,139456,139486,139490,139493,139556,139558,139624,139626,139690,139693,139725,139727,139753,139755,139781,139784,139815,139817,139843,139845,139871,139874],[10,138155,138151],{"id":138156},"_15-品优购项目上篇-搭建与公共模块",[14,138158,138160],{"id":138159},"_151-项目规划","15.1 项目规划",[19,138162],{"style":21,"src":138163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[24,138165,138166,138169],{},[469,138167,138168],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[24,138171,138172,138175],{},[469,138173,138174],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138177,138179],{"id":138178},"_152-项目介绍","15.2 项目介绍",[24,138181,138168],{},[19,138183],{"style":21,"src":138184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[24,138186,138187],{},"主页：",[19,138189],{"style":21,"src":138190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[24,138192,138193],{},"列表页：",[19,138195],{"style":21,"src":138196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[24,138198,138199],{},"注册页：",[19,138201],{"style":21,"src":138202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138204,138206],{"id":138205},"_153-项目搭建工作","15.3 项目搭建工作",[48,138208,138210],{"id":138209},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[19,138212],{"style":21,"src":138213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[24,138215,138216],{},"经常更换的图片要放到upload文件夹中",[24,138218,138219],{},"不经常换的放到images文件夹中",[48,138221,138223],{"id":138222},"_1532-创建文件如下","15.3.2 创建文件如下",[19,138225],{"style":21,"src":138226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[19,138228],{"style":21,"src":138229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[24,138231,138232],{},[469,138233,138234],{},"初始化样式：",[24,138236,138237],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[24,138239,138240],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[24,138242,138243],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[48,138245,138247],{"id":138246},"_1533-项目模块化开发","15.3.3 项目模块化开发",[24,138249,138250],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[24,138252,138253,138254,138259],{},"这里最典型的应用就是 ",[469,138255,138256],{},[94,138257,138258],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[19,138261],{"style":21,"src":138262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[24,138264,138265],{},"通过link方法来引入",[48,138267,138269],{"id":138268},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[19,138271],{"style":21,"src":138272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[24,138274,138275],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[138,138277,138278],{},[70,138279,138280],{},"制作favicon图标",[24,138282,138283,138284,138287],{},"①把品优购图标切成 ",[94,138285,138286],{},"png"," 图片",[24,138289,138290,138291,138293,138294,138297,138298],{},"②把 ",[94,138292,138286],{}," 图片转换为 ",[94,138295,138296],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[558,138299,138300],{"href":138300,"rel":138301},"http:\u002F\u002Fwww.bitbug.net\u002F",[24054],[138,138303,138304,138307],{"start":195},[70,138305,138306],{},"favicon图标放到网站根目录下",[70,138308,138309],{},"HTML页面引入favicon",[24,138311,138312,138313,138316],{},"在html 页面里面的 ",[94,138314,138315],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[24,138318,138319],{},[94,138320,138321],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[24,138323,138324],{},"复制这行代码或者在生成这个的网站进行复制",[19,138326],{"style":21,"src":138327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[24,138329,138330],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[24,138332,138333,138334],{},"例如:",[558,138335,138336],{"href":138336,"rel":138337},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24054],[48,138339,138341],{"id":138340},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[24,138343,138344,138347],{},[469,138345,138346],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[24,138349,138350,138353],{},[469,138351,138352],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[24,138355,138356],{},"页面必须有三个标签用来符合 SEO 优化",[19,138358],{"style":21,"src":138359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[138,138361,138362],{},[70,138363,138364],{},"title网站标题",[24,138366,138367,138370],{},[469,138368,138369],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[24,138372,68974],{},[67,138374,138375,138378],{},[70,138376,138377],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[70,138379,138380],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[138,138382,138383],{"start":195},[70,138384,138385],{},"description网站描述",[24,138387,138388],{},"简要说明我们网站主要是做什么的",[24,138390,138391,138394],{},[469,138392,138393],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[24,138396,68974],{},[24,138398,138399],{},[94,138400,138401],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[138,138403,138404],{"start":241},[70,138405,138406],{},"keywords关键词",[24,138408,138409],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[24,138411,68974],{},[24,138413,138414],{},[94,138415,138416],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[24,138418,138419],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[24,138421,138422],{},[469,138423,138424],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[138,138426,138427],{"start":1387},[70,138428,138429],{},"代码总结",[87,138431,138432],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,138433,138434,138438,138452,138456],{"__ignoreMap":92},[97,138435,138436],{"class":99,"line":100},[97,138437,130842],{"class":191},[97,138439,138440,138442,138444,138446,138448,138450],{"class":99,"line":195},[97,138441,104],{"class":103},[97,138443,51795],{"class":107},[97,138445,53670],{"class":111},[97,138447,115],{"class":103},[97,138449,130855],{"class":118},[97,138451,130],{"class":103},[97,138453,138454],{"class":99,"line":241},[97,138455,130862],{"class":103},[97,138457,138458,138460,138462],{"class":99,"line":1387},[97,138459,51969],{"class":103},[97,138461,51795],{"class":107},[97,138463,130],{"class":103},[14,138465,138467],{"id":138466},"_154-项目公共部分制作","15.4 项目公共部分制作",[48,138469,138471],{"id":138470},"_1541-常用模块类命名","15.4.1 常用模块类命名",[19,138473],{"style":21,"src":138474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[48,138476,138478],{"id":138477},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[24,138480,138481],{},"布局思路：",[67,138483,138484,138487,138490,138512,138545],{},[70,138485,138486],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[70,138488,138489],{},"里面包含版心的盒子",[70,138491,138492,138493],{},"版心盒子里面包含 1 号左侧盒子左浮动",[67,138494,138495,138503,138509],{},[70,138496,138497,138498,21690,138500,138502],{},"1 号盒子 里面包含一个",[94,138499,67],{},[94,138501,67],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[70,138504,138505,138506,138508],{},"里面的内容是水平排列，所以需要给",[94,138507,70],{},"设置浮动",[70,138510,138511],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[70,138513,138514,138515],{},"版心盒子里面包含 2 号右侧盒子右浮动",[67,138516,138517,138531,138536],{},[70,138518,138519,138520,21690,138522,138524,138525,138527,138528,138530],{},"2 号盒子 里面包含一个",[94,138521,67],{},[94,138523,67],{},"包裹",[94,138526,70],{},"，中间的",[94,138529,1240],{},"可以用样式去设置，也可以用字符 |",[70,138532,138533,138534,138508],{},"里面内容水平排列，给",[94,138535,70],{},[70,138537,138538,138539,138541,138542,138544],{},"找到里面所有偶数的 ",[94,138540,70],{}," 设置样式（偶数的 ",[94,138543,70],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[70,138546,138547,138548],{},"需要用到字体图标",[67,138549,138550,138556,138559,138562,138565],{},[70,138551,138552,138553],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[94,138554,138555],{},"arrow-icon",[70,138557,138558],{},"先要引入字体图片的资源",[70,138560,138561],{},"在样式里面利用 font-face 来进行声明",[70,138563,138564],{},"在伪元素的 content属性设置 图标的编码",[70,138566,138567],{},"给伪元素设置font-family属性",[24,138569,138570],{},"结构实例代码：",[87,138572,138574],{"className":182,"code":138573,"language":184,"meta":92,"style":92},"div::before {\n  content: \"\";\n  display: block;\n}\n",[94,138575,138576,138584,138594,138604],{"__ignoreMap":92},[97,138577,138578,138580,138582],{"class":99,"line":100},[97,138579,51795],{"class":107},[97,138581,137732],{"class":111},[97,138583,15762],{"class":103},[97,138585,138586,138588,138590,138592],{"class":99,"line":195},[97,138587,137739],{"class":370},[97,138589,51621],{"class":103},[97,138591,7843],{"class":118},[97,138593,1483],{"class":103},[97,138595,138596,138598,138600,138602],{"class":99,"line":241},[97,138597,128347],{"class":370},[97,138599,51621],{"class":103},[97,138601,61053],{"class":370},[97,138603,1483],{"class":103},[97,138605,138606],{"class":99,"line":1387},[97,138607,1757],{"class":103},[24,138609,138610],{},"样式实例代码：",[87,138612,138613],{"className":182,"code":138573,"language":184,"meta":92,"style":92},[94,138614,138615,138623,138633,138643],{"__ignoreMap":92},[97,138616,138617,138619,138621],{"class":99,"line":100},[97,138618,51795],{"class":107},[97,138620,137732],{"class":111},[97,138622,15762],{"class":103},[97,138624,138625,138627,138629,138631],{"class":99,"line":195},[97,138626,137739],{"class":370},[97,138628,51621],{"class":103},[97,138630,7843],{"class":118},[97,138632,1483],{"class":103},[97,138634,138635,138637,138639,138641],{"class":99,"line":241},[97,138636,128347],{"class":370},[97,138638,51621],{"class":103},[97,138640,61053],{"class":370},[97,138642,1483],{"class":103},[97,138644,138645],{"class":99,"line":1387},[97,138646,1757],{"class":103},[48,138648,138650],{"id":138649},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[67,138652,138653],{},[70,138654,138655],{},"header 盒子必须要有高度",[24,138657,138658,138659,138661,138662],{},"1 号盒子是 ",[94,138660,131743],{}," 标志定位，在正常开发过程中， ",[469,138663,138664,138665,138668],{},"logo的布局其实是有讲究的，需要进行 ",[94,138666,138667],{},"logoSEO","的优化 （★★★）",[67,138670,138671,138679,138687,138714],{},[70,138672,138673,138675,138676,138678],{},[94,138674,131743],{}," 里面首先放一个 ",[94,138677,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[70,138680,138681,138683,138684,138686],{},[94,138682,10],{}," 里面再放一个链接，可以返回首页的，把 ",[94,138685,131743],{}," 的背景图片给链接即可",[70,138688,138689,138690],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[67,138691,138692,138707],{},[70,138693,138694,138695,138698,138699,138702,138703,138706],{},"方法1：",[94,138696,138697],{},"text-indent"," 移到盒子外面（",[94,138700,138701],{},"text-indent: -9999px",") ，然后 ",[94,138704,138705],{},"overflow:hidden"," ，淘宝的做法",[70,138708,138709,138710,138713],{},"方法2：直接给 ",[94,138711,138712],{},"font-size: 0;"," 就看不到文字了，京东的做法",[70,138715,138716,138717,138719,138720,138722],{},"最后给链接一个 ",[94,138718,51591],{}," 属性，这样鼠标放到 ",[94,138721,131743],{}," 上就可以看到提示文字了",[24,138724,138570],{},[87,138726,138727],{"className":89,"code":131964,"language":91,"meta":92,"style":92},[94,138728,138729],{"__ignoreMap":92},[97,138730,138731,138733,138735,138737,138739,138741,138743,138745,138747,138749,138751],{"class":99,"line":100},[97,138732,104],{"class":103},[97,138734,558],{"class":107},[97,138736,61241],{"class":111},[97,138738,115],{"class":103},[97,138740,131979],{"class":118},[97,138742,131982],{"class":111},[97,138744,115],{"class":103},[97,138746,131987],{"class":118},[97,138748,131990],{"class":103},[97,138750,558],{"class":107},[97,138752,130],{"class":103},[24,138754,138610],{},[87,138756,138757],{"className":89,"code":131964,"language":91,"meta":92,"style":92},[94,138758,138759],{"__ignoreMap":92},[97,138760,138761,138763,138765,138767,138769,138771,138773,138775,138777,138779,138781],{"class":99,"line":100},[97,138762,104],{"class":103},[97,138764,558],{"class":107},[97,138766,61241],{"class":111},[97,138768,115],{"class":103},[97,138770,131979],{"class":118},[97,138772,131982],{"class":111},[97,138774,115],{"class":103},[97,138776,131987],{"class":118},[97,138778,131990],{"class":103},[97,138780,558],{"class":107},[97,138782,130],{"class":103},[24,138784,138785,138786,138788],{},"2 号盒子是 ",[94,138787,131756],{}," 搜索模块定位",[67,138790,138791,138794,138797,138800],{},[70,138792,138793],{},"search盒子利用定位的方式放在对应的位置",[70,138795,138796],{},"search盒子设置绝对定位，header盒子设置相对定位",[70,138798,138799],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[70,138801,138802],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[24,138804,138570],{},[87,138806,138807],{"className":182,"code":132051,"language":184,"meta":92,"style":92},[94,138808,138809,138831,138835,138845],{"__ignoreMap":92},[97,138810,138811,138813,138815,138817,138819,138821,138823,138825,138827,138829],{"class":99,"line":100},[97,138812,51795],{"class":107},[97,138814,12626],{"class":103},[97,138816,24],{"class":107},[97,138818,12626],{"class":103},[97,138820,10],{"class":107},[97,138822,12626],{"class":103},[97,138824,67],{"class":107},[97,138826,12626],{"class":103},[97,138828,70],{"class":107},[97,138830,15762],{"class":103},[97,138832,138833],{"class":99,"line":195},[97,138834,132080],{"class":191},[97,138836,138837,138839,138841,138843],{"class":99,"line":241},[97,138838,128347],{"class":370},[97,138840,51621],{"class":103},[97,138842,61053],{"class":370},[97,138844,1483],{"class":103},[97,138846,138847],{"class":99,"line":1387},[97,138848,1757],{"class":103},[24,138850,138610],{},[87,138852,138853],{"className":182,"code":132051,"language":184,"meta":92,"style":92},[94,138854,138855,138877,138881,138891],{"__ignoreMap":92},[97,138856,138857,138859,138861,138863,138865,138867,138869,138871,138873,138875],{"class":99,"line":100},[97,138858,51795],{"class":107},[97,138860,12626],{"class":103},[97,138862,24],{"class":107},[97,138864,12626],{"class":103},[97,138866,10],{"class":107},[97,138868,12626],{"class":103},[97,138870,67],{"class":107},[97,138872,12626],{"class":103},[97,138874,70],{"class":107},[97,138876,15762],{"class":103},[97,138878,138879],{"class":99,"line":195},[97,138880,132080],{"class":191},[97,138882,138883,138885,138887,138889],{"class":99,"line":241},[97,138884,128347],{"class":370},[97,138886,51621],{"class":103},[97,138888,61053],{"class":370},[97,138890,1483],{"class":103},[97,138892,138893],{"class":99,"line":1387},[97,138894,1757],{"class":103},[24,138896,138897],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[24,138899,138900,138901,138904],{},"3 号盒子是 ",[94,138902,138903],{},"hotwords"," 热词模块定位",[67,138906,138907,138910,138913],{},[70,138908,138909],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[70,138911,138912],{},"给里面所有的a标签设置 左右10px的外边距",[70,138914,138915],{},"给第一个a标签设置文字变红色（#c81623）",[24,138917,138570],{},[87,138919,138921],{"className":182,"code":138920,"language":184,"meta":92,"style":92},"div {\n  margin: 0 auto;\n}\n",[94,138922,138923,138929,138941],{"__ignoreMap":92},[97,138924,138925,138927],{"class":99,"line":100},[97,138926,51795],{"class":107},[97,138928,15762],{"class":103},[97,138930,138931,138933,138935,138937,138939],{"class":99,"line":195},[97,138932,70654],{"class":370},[97,138934,51621],{"class":103},[97,138936,511],{"class":370},[97,138938,51740],{"class":370},[97,138940,1483],{"class":103},[97,138942,138943],{"class":99,"line":241},[97,138944,1757],{"class":103},[24,138946,138610],{},[87,138948,138949],{"className":182,"code":138920,"language":184,"meta":92,"style":92},[94,138950,138951,138957,138969],{"__ignoreMap":92},[97,138952,138953,138955],{"class":99,"line":100},[97,138954,51795],{"class":107},[97,138956,15762],{"class":103},[97,138958,138959,138961,138963,138965,138967],{"class":99,"line":195},[97,138960,70654],{"class":370},[97,138962,51621],{"class":103},[97,138964,511],{"class":370},[97,138966,51740],{"class":370},[97,138968,1483],{"class":103},[97,138970,138971],{"class":99,"line":241},[97,138972,1757],{"class":103},[24,138974,138975,138976,138979],{},"4 号盒子是 ",[94,138977,138978],{},"shopcar"," 购物车模块",[67,138981,138982,138987,138990,138993],{},[70,138983,123519,138984,138986],{},[94,138985,138978],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[70,138988,138989],{},"count 统计部分用绝对定位做",[70,138991,138992],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[70,138994,138995],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[24,138997,138570],{},[87,138999,139000],{"className":182,"code":132163,"language":184,"meta":92,"style":92},[94,139001,139002,139006,139020,139024,139038,139042,139056,139060,139074,139078],{"__ignoreMap":92},[97,139003,139004],{"class":99,"line":100},[97,139005,132170],{"class":191},[97,139007,139008,139010,139012,139014,139016,139018],{"class":99,"line":195},[97,139009,132175],{"class":111},[97,139011,79991],{"class":103},[97,139013,129091],{"class":370},[97,139015,51621],{"class":103},[97,139017,132184],{"class":370},[97,139019,129661],{"class":103},[97,139021,139022],{"class":99,"line":241},[97,139023,132191],{"class":191},[97,139025,139026,139028,139030,139032,139034,139036],{"class":99,"line":1387},[97,139027,132196],{"class":111},[97,139029,79991],{"class":103},[97,139031,129091],{"class":370},[97,139033,51621],{"class":103},[97,139035,54948],{"class":370},[97,139037,129661],{"class":103},[97,139039,139040],{"class":99,"line":1393},[97,139041,132211],{"class":191},[97,139043,139044,139046,139048,139050,139052,139054],{"class":99,"line":1407},[97,139045,132216],{"class":111},[97,139047,79991],{"class":103},[97,139049,129091],{"class":370},[97,139051,51621],{"class":103},[97,139053,55015],{"class":370},[97,139055,129661],{"class":103},[97,139057,139058],{"class":99,"line":1413},[97,139059,132231],{"class":191},[97,139061,139062,139064,139066,139068,139070,139072],{"class":99,"line":1504},[97,139063,132236],{"class":111},[97,139065,79991],{"class":103},[97,139067,129091],{"class":370},[97,139069,51621],{"class":103},[97,139071,86417],{"class":370},[97,139073,129661],{"class":103},[97,139075,139076],{"class":99,"line":1510},[97,139077,132251],{"class":191},[97,139079,139080,139082,139084,139086,139088,139090],{"class":99,"line":1522},[97,139081,132256],{"class":111},[97,139083,79991],{"class":103},[97,139085,129091],{"class":370},[97,139087,51621],{"class":103},[97,139089,132265],{"class":370},[97,139091,129661],{"class":103},[24,139093,138610],{},[87,139095,139096],{"className":182,"code":132163,"language":184,"meta":92,"style":92},[94,139097,139098,139102,139116,139120,139134,139138,139152,139156,139170,139174],{"__ignoreMap":92},[97,139099,139100],{"class":99,"line":100},[97,139101,132170],{"class":191},[97,139103,139104,139106,139108,139110,139112,139114],{"class":99,"line":195},[97,139105,132175],{"class":111},[97,139107,79991],{"class":103},[97,139109,129091],{"class":370},[97,139111,51621],{"class":103},[97,139113,132184],{"class":370},[97,139115,129661],{"class":103},[97,139117,139118],{"class":99,"line":241},[97,139119,132191],{"class":191},[97,139121,139122,139124,139126,139128,139130,139132],{"class":99,"line":1387},[97,139123,132196],{"class":111},[97,139125,79991],{"class":103},[97,139127,129091],{"class":370},[97,139129,51621],{"class":103},[97,139131,54948],{"class":370},[97,139133,129661],{"class":103},[97,139135,139136],{"class":99,"line":1393},[97,139137,132211],{"class":191},[97,139139,139140,139142,139144,139146,139148,139150],{"class":99,"line":1407},[97,139141,132216],{"class":111},[97,139143,79991],{"class":103},[97,139145,129091],{"class":370},[97,139147,51621],{"class":103},[97,139149,55015],{"class":370},[97,139151,129661],{"class":103},[97,139153,139154],{"class":99,"line":1413},[97,139155,132231],{"class":191},[97,139157,139158,139160,139162,139164,139166,139168],{"class":99,"line":1504},[97,139159,132236],{"class":111},[97,139161,79991],{"class":103},[97,139163,129091],{"class":370},[97,139165,51621],{"class":103},[97,139167,86417],{"class":370},[97,139169,129661],{"class":103},[97,139171,139172],{"class":99,"line":1510},[97,139173,132251],{"class":191},[97,139175,139176,139178,139180,139182,139184,139186],{"class":99,"line":1522},[97,139177,132256],{"class":111},[97,139179,79991],{"class":103},[97,139181,129091],{"class":370},[97,139183,51621],{"class":103},[97,139185,132265],{"class":370},[97,139187,129661],{"class":103},[48,139189,139191,139192,139194],{"id":139190},"_1544-nav导航模块制作","15.4.4 ",[94,139193,53897],{},"导航模块制作",[19,139196],{"style":21,"src":139197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[24,139199,139200,139202],{},[94,139201,53897],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[24,139204,139205,139206],{},"1 号盒子左侧浮动，",[94,139207,139208],{},"dropdown",[67,139210,139211,139221,139229,139235,139243,139253,139261,139272],{},[70,139212,139213,139214,101202,139217,139220],{},"1号盒子有讲究，根据相关性 里面包含 ",[94,139215,139216],{},".dt",[94,139218,139219],{},".dd"," 两个盒子",[70,139222,139223,139225,139226,139228],{},[94,139224,139216],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[94,139227,139219],{}," 挤到下面去了",[70,139230,139231,139232,139234],{},"给 ",[94,139233,139219],{}," 盒子设置宽度 和 高度，以及背景颜色",[70,139236,139231,139237,139239,139240,120421],{},[94,139238,139219],{}," 盒子里面定义 无序列表 （",[94,139241,139242],{},"ul > li > a",[70,139244,139245,139246,139248,139249,139252],{},"每个 ",[94,139247,70],{}," 都有一个高度（",[94,139250,139251],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[70,139254,139231,139255,139257,139258,120421],{},[94,139256,70],{}," 里面的a设置文字大小（",[94,139259,139260],{},"14px",[70,139262,139231,139263,139265,139266,139268,139269,139271],{},[94,139264,70],{}," 设置 ",[94,139267,127892],{},"，当鼠标移入的时候，让",[94,139270,70],{},"的背景变成白色，让里面的文字变成红色",[70,139273,139274,139276,139277,139279,139280,139282],{},[94,139275,70],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[94,139278,70],{},"的右侧，那么给",[94,139281,70],{},"设置相对定位",[24,139284,139285],{},"一定要注意相关性",[24,139287,138570],{},[87,139289,139290],{"className":182,"code":138573,"language":184,"meta":92,"style":92},[94,139291,139292,139300,139310,139320],{"__ignoreMap":92},[97,139293,139294,139296,139298],{"class":99,"line":100},[97,139295,51795],{"class":107},[97,139297,137732],{"class":111},[97,139299,15762],{"class":103},[97,139301,139302,139304,139306,139308],{"class":99,"line":195},[97,139303,137739],{"class":370},[97,139305,51621],{"class":103},[97,139307,7843],{"class":118},[97,139309,1483],{"class":103},[97,139311,139312,139314,139316,139318],{"class":99,"line":241},[97,139313,128347],{"class":370},[97,139315,51621],{"class":103},[97,139317,61053],{"class":370},[97,139319,1483],{"class":103},[97,139321,139322],{"class":99,"line":1387},[97,139323,1757],{"class":103},[24,139325,138610],{},[87,139327,139328],{"className":182,"code":138573,"language":184,"meta":92,"style":92},[94,139329,139330,139338,139348,139358],{"__ignoreMap":92},[97,139331,139332,139334,139336],{"class":99,"line":100},[97,139333,51795],{"class":107},[97,139335,137732],{"class":111},[97,139337,15762],{"class":103},[97,139339,139340,139342,139344,139346],{"class":99,"line":195},[97,139341,137739],{"class":370},[97,139343,51621],{"class":103},[97,139345,7843],{"class":118},[97,139347,1483],{"class":103},[97,139349,139350,139352,139354,139356],{"class":99,"line":241},[97,139351,128347],{"class":370},[97,139353,51621],{"class":103},[97,139355,61053],{"class":370},[97,139357,1483],{"class":103},[97,139359,139360],{"class":99,"line":1387},[97,139361,1757],{"class":103},[24,139363,139364],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[24,139366,139367,139368,139371],{},"2 号盒子左侧浮动，",[94,139369,139370],{},"navitems"," 导航栏组",[67,139373,139374,139379,139388],{},[70,139375,139376,139377],{},"里面结构是 ",[94,139378,139242],{},[70,139380,139381,139382,139384,139385,139387],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[94,139383,558],{},"左右的",[94,139386,31073],{},"把两侧撑开",[70,139389,139390],{},"让文字垂直居中（行高等于高度）",[19,139392],{"style":21,"src":139393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[24,139395,139396],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[24,139398,138570],{},[87,139400,139402],{"className":182,"code":139401,"language":184,"meta":92,"style":92},".box {\n  float: left;\n}\n",[94,139403,139404,139410,139420],{"__ignoreMap":92},[97,139405,139406,139408],{"class":99,"line":100},[97,139407,130579],{"class":111},[97,139409,15762],{"class":103},[97,139411,139412,139414,139416,139418],{"class":99,"line":195},[97,139413,131211],{"class":370},[97,139415,51621],{"class":103},[97,139417,23925],{"class":370},[97,139419,1483],{"class":103},[97,139421,139422],{"class":99,"line":241},[97,139423,1757],{"class":103},[24,139425,138610],{},[87,139427,139428],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,139429,139430,139436,139446],{"__ignoreMap":92},[97,139431,139432,139434],{"class":99,"line":100},[97,139433,130579],{"class":111},[97,139435,15762],{"class":103},[97,139437,139438,139440,139442,139444],{"class":99,"line":195},[97,139439,131211],{"class":370},[97,139441,51621],{"class":103},[97,139443,23925],{"class":370},[97,139445,1483],{"class":103},[97,139447,139448],{"class":99,"line":241},[97,139449,1757],{"class":103},[24,139451,139452],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[19,139454],{"style":21,"src":139455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[87,139457,139458],{"className":182,"code":130888,"language":184,"meta":92,"style":92},[94,139459,139460,139466,139482],{"__ignoreMap":92},[97,139461,139462,139464],{"class":99,"line":100},[97,139463,51795],{"class":107},[97,139465,15762],{"class":103},[97,139467,139468,139470,139472,139474,139476,139478,139480],{"class":99,"line":195},[97,139469,71080],{"class":370},[97,139471,51621],{"class":103},[97,139473,537],{"class":370},[97,139475,51676],{"class":319},[97,139477,51705],{"class":370},[97,139479,130123],{"class":370},[97,139481,1483],{"class":103},[97,139483,139484],{"class":99,"line":241},[97,139485,1757],{"class":103},[48,139487,139489],{"id":139488},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[19,139491],{"style":21,"src":139492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[67,139494,139495,139500,139505],{},[70,139496,139497,139499],{},[94,139498,131934],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[70,139501,139502,139504],{},[94,139503,131934],{}," 里面有一个大的版心",[70,139506,139507,139508,139511,139512],{},"版心里面包含 1 号盒子，",[94,139509,139510],{},"mod_service"," 是服务模块，mod 是模块的意思",[67,139513,139514,139519,139532,139548,139553],{},[70,139515,139231,139516,139518],{},[94,139517,139510],{}," 设置高度（80px）和下边框",[70,139520,139521,139522,139525,139526,139528,139529,139531],{},"在里面定义 ",[94,139523,139524],{},"ul > li"," ,每个",[94,139527,70],{}," 宽度是300px 高度是 50px，给每个",[94,139530,70],{},"设置35px的左内边距",[70,139533,139534,139535,139537,139538,139540,139541,139543,139544,18600,139546,120421],{},"在每个",[94,139536,70],{},"里面，放一个 ",[94,139539,23099],{},"（里面放图标），一个",[94,139542,51795],{},"（里面放",[94,139545,51795],{},[94,139547,24],{},[70,139549,139231,139550,139552],{},[94,139551,23099],{},"设置浮动，让h5与这个div左右排列",[70,139554,139555],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[24,139557,138570],{},[87,139559,139561],{"className":182,"code":139560,"language":184,"meta":92,"style":92},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[94,139562,139563,139569,139581,139593,139620],{"__ignoreMap":92},[97,139564,139565,139567],{"class":99,"line":100},[97,139566,134488],{"class":111},[97,139568,15762],{"class":103},[97,139570,139571,139573,139575,139577,139579],{"class":99,"line":195},[97,139572,70752],{"class":370},[97,139574,51621],{"class":103},[97,139576,1020],{"class":370},[97,139578,51676],{"class":319},[97,139580,1483],{"class":103},[97,139582,139583,139585,139587,139589,139591],{"class":99,"line":241},[97,139584,70972],{"class":370},[97,139586,51621],{"class":103},[97,139588,1020],{"class":370},[97,139590,51676],{"class":319},[97,139592,1483],{"class":103},[97,139594,139595,139597,139599,139601,139603,139605,139607,139609,139612,139614,139616,139618],{"class":99,"line":1387},[97,139596,70795],{"class":370},[97,139598,51621],{"class":103},[97,139600,61910],{"class":370},[97,139602,323],{"class":103},[97,139604,134527],{"class":5407},[97,139606,13905],{"class":103},[97,139608,61920],{"class":370},[97,139610,139611],{"class":370}," -10",[97,139613,51676],{"class":319},[97,139615,134546],{"class":370},[97,139617,51676],{"class":319},[97,139619,1483],{"class":103},[97,139621,139622],{"class":99,"line":1393},[97,139623,1757],{"class":103},[24,139625,138610],{},[87,139627,139628],{"className":182,"code":139560,"language":184,"meta":92,"style":92},[94,139629,139630,139636,139648,139660,139686],{"__ignoreMap":92},[97,139631,139632,139634],{"class":99,"line":100},[97,139633,134488],{"class":111},[97,139635,15762],{"class":103},[97,139637,139638,139640,139642,139644,139646],{"class":99,"line":195},[97,139639,70752],{"class":370},[97,139641,51621],{"class":103},[97,139643,1020],{"class":370},[97,139645,51676],{"class":319},[97,139647,1483],{"class":103},[97,139649,139650,139652,139654,139656,139658],{"class":99,"line":241},[97,139651,70972],{"class":370},[97,139653,51621],{"class":103},[97,139655,1020],{"class":370},[97,139657,51676],{"class":319},[97,139659,1483],{"class":103},[97,139661,139662,139664,139666,139668,139670,139672,139674,139676,139678,139680,139682,139684],{"class":99,"line":1387},[97,139663,70795],{"class":370},[97,139665,51621],{"class":103},[97,139667,61910],{"class":370},[97,139669,323],{"class":103},[97,139671,134527],{"class":5407},[97,139673,13905],{"class":103},[97,139675,61920],{"class":370},[97,139677,139611],{"class":370},[97,139679,51676],{"class":319},[97,139681,134546],{"class":370},[97,139683,51676],{"class":319},[97,139685,1483],{"class":103},[97,139687,139688],{"class":99,"line":1393},[97,139689,1757],{"class":103},[24,139691,139692],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[67,139694,139695,139698,139704,139710,139722],{},[70,139696,139697],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[70,139699,139700,139701,120421],{},"里面的布局利用 自定义列表来实现（",[94,139702,139703],{},"dl > dt + dd",[70,139705,139231,139706,139709],{},[94,139707,139708],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[70,139711,139231,139712,139715,139716,18600,139718,139721],{},[94,139713,139714],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[94,139717,139714],{},[94,139719,139720],{},"dd","之间有些距离",[70,139723,139724],{},"最后一个 dl 结构和样式不一样，需要单独设置",[24,139726,138570],{},[87,139728,139729],{"className":182,"code":138920,"language":184,"meta":92,"style":92},[94,139730,139731,139737,139749],{"__ignoreMap":92},[97,139732,139733,139735],{"class":99,"line":100},[97,139734,51795],{"class":107},[97,139736,15762],{"class":103},[97,139738,139739,139741,139743,139745,139747],{"class":99,"line":195},[97,139740,70654],{"class":370},[97,139742,51621],{"class":103},[97,139744,511],{"class":370},[97,139746,51740],{"class":370},[97,139748,1483],{"class":103},[97,139750,139751],{"class":99,"line":241},[97,139752,1757],{"class":103},[24,139754,138610],{},[87,139756,139757],{"className":182,"code":138920,"language":184,"meta":92,"style":92},[94,139758,139759,139765,139777],{"__ignoreMap":92},[97,139760,139761,139763],{"class":99,"line":100},[97,139762,51795],{"class":107},[97,139764,15762],{"class":103},[97,139766,139767,139769,139771,139773,139775],{"class":99,"line":195},[97,139768,70654],{"class":370},[97,139770,51621],{"class":103},[97,139772,511],{"class":370},[97,139774,51740],{"class":370},[97,139776,1483],{"class":103},[97,139778,139779],{"class":99,"line":241},[97,139780,1757],{"class":103},[24,139782,139783],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[67,139785,139786,139795,139798,139809],{},[70,139787,139788,139789,139791,139792,139794],{},"分为上下两块，上面是 ",[94,139790,131951],{}," 友情链接，下面是 ",[94,139793,131944],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[70,139796,139797],{},"把内容分别复制到相应模块中",[70,139799,139231,139800,139802,139803,139805,139806,139808],{},[94,139801,131951],{}," 设置 15px 的下外边距，给",[94,139804,131951],{}," 里面 的 ",[94,139807,558],{}," 标签设置 左右 3px 的外边距",[70,139810,139811,139812,139814],{},"给",[94,139813,131944],{}," 设置 20px 的行高",[24,139816,138570],{},[87,139818,139819],{"className":182,"code":138920,"language":184,"meta":92,"style":92},[94,139820,139821,139827,139839],{"__ignoreMap":92},[97,139822,139823,139825],{"class":99,"line":100},[97,139824,51795],{"class":107},[97,139826,15762],{"class":103},[97,139828,139829,139831,139833,139835,139837],{"class":99,"line":195},[97,139830,70654],{"class":370},[97,139832,51621],{"class":103},[97,139834,511],{"class":370},[97,139836,51740],{"class":370},[97,139838,1483],{"class":103},[97,139840,139841],{"class":99,"line":241},[97,139842,1757],{"class":103},[24,139844,138610],{},[87,139846,139847],{"className":182,"code":138920,"language":184,"meta":92,"style":92},[94,139848,139849,139855,139867],{"__ignoreMap":92},[97,139850,139851,139853],{"class":99,"line":100},[97,139852,51795],{"class":107},[97,139854,15762],{"class":103},[97,139856,139857,139859,139861,139863,139865],{"class":99,"line":195},[97,139858,70654],{"class":370},[97,139860,51621],{"class":103},[97,139862,511],{"class":370},[97,139864,51740],{"class":370},[97,139866,1483],{"class":103},[97,139868,139869],{"class":99,"line":241},[97,139870,1757],{"class":103},[24,139872,139873],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[231,139875,139876],{},"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":92,"searchDepth":195,"depth":195,"links":139878},[139879,139880,139881,139888],{"id":138159,"depth":195,"text":138160},{"id":138178,"depth":195,"text":138179},{"id":138205,"depth":195,"text":138206,"children":139882},[139883,139884,139885,139886,139887],{"id":138209,"depth":241,"text":138210},{"id":138222,"depth":241,"text":138223},{"id":138246,"depth":241,"text":138247},{"id":138268,"depth":241,"text":138269},{"id":138340,"depth":241,"text":138341},{"id":138466,"depth":195,"text":138467,"children":139889},[139890,139891,139892,139893,139895],{"id":138470,"depth":241,"text":138471},{"id":138477,"depth":241,"text":138478},{"id":138649,"depth":241,"text":138650},{"id":139190,"depth":241,"text":139894},"15.4.4 nav导航模块制作",{"id":139488,"depth":241,"text":139489},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138151,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139902,"title":139903,"body":139904,"description":246,"extension":247,"meta":142306,"navigation":249,"path":142307,"seo":142308,"stem":142309,"__hash__":142310},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139905,"toc":142283},[139906,139909,139913,139917,139929,139932,139935,139938,139949,139951,139975,139977,140001,140006,140009,140011,140047,140049,140085,140088,140093,140096,140099,140102,140132,140139,140142,140152,140154,140188,140191,140225,140231,140248,140250,140286,140288,140324,140329,140354,140356,140382,140384,140408,140415,140418,140482,140484,140526,140528,140568,140575,140580,140582,140612,140614,140644,140648,140651,140658,140670,140672,140698,140700,140724,140727,140729,140753,140759,140769,140771,140801,140803,140833,140840,140881,140883,140919,140921,140957,140961,140964,140967,140970,140976,140981,140984,141007,141010,141034,141037,141061,141066,141069,141072,141075,141078,141081,141155,141157,141187,141189,141219,141222,141225,141257,141261,141265,141279,141288,141291,141296,141298,141392,141394,141488,141511,141513,141537,141539,141563,141570,141573,141583,141585,141609,141614,141622,141624,141654,141659,141699,141701,141727,141729,141755,141759,141762,141767,141770,141774,141782,141789,141797,141799,141829,141831,141861,141869,141872,141875,141877,141907,141909,141939,141942,141947,141949,141973,141975,141999,142002,142087,142089,142113,142115,142139,142143,142145,142169,142171,142205,142209,142223,142226,142231,142234,142239,142242,142272,142280],[10,139907,139903],{"id":139908},"_16-品优购项目下篇-主体与页面开发",[14,139910,139912],{"id":139911},"_161-项目主体模块制作","16.1 项目主体模块制作",[48,139914,139916],{"id":139915},"_1611-首页制作","16.1.1 首页制作",[24,139918,139919,139921,139922,139924,139925,139928],{},[469,139920,102242],{}," 主体模块是 ",[469,139923,74242],{}," 里面专有的，注意需要新的样式文件 ",[469,139926,139927],{},"index.css，"," 就不要写在common.css中了",[19,139930],{"style":21,"src":139931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[19,139933],{"style":21,"src":139934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[24,139936,139937],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[67,139939,139940,139943,139946],{},[70,139941,139942],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[70,139944,139945],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[70,139947,139948],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[24,139950,138570],{},[87,139952,139953],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,139954,139955,139961,139971],{"__ignoreMap":92},[97,139956,139957,139959],{"class":99,"line":100},[97,139958,130579],{"class":111},[97,139960,15762],{"class":103},[97,139962,139963,139965,139967,139969],{"class":99,"line":195},[97,139964,131211],{"class":370},[97,139966,51621],{"class":103},[97,139968,23925],{"class":370},[97,139970,1483],{"class":103},[97,139972,139973],{"class":99,"line":241},[97,139974,1757],{"class":103},[24,139976,138610],{},[87,139978,139979],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,139980,139981,139987,139997],{"__ignoreMap":92},[97,139982,139983,139985],{"class":99,"line":100},[97,139984,130579],{"class":111},[97,139986,15762],{"class":103},[97,139988,139989,139991,139993,139995],{"class":99,"line":195},[97,139990,131211],{"class":370},[97,139992,51621],{"class":103},[97,139994,23925],{"class":370},[97,139996,1483],{"class":103},[97,139998,139999],{"class":99,"line":241},[97,140000,1757],{"class":103},[138,140002,140003],{},[70,140004,140005],{},"左侧focus模块制作",[19,140007],{"style":21,"src":140008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[24,140010,138570],{},[87,140012,140013],{"className":182,"code":128054,"language":184,"meta":92,"style":92},[94,140014,140015,140023,140033,140043],{"__ignoreMap":92},[97,140016,140017,140019,140021],{"class":99,"line":100},[97,140018,54005],{"class":107},[97,140020,62084],{"class":111},[97,140022,15762],{"class":103},[97,140024,140025,140027,140029,140031],{"class":99,"line":195},[97,140026,128069],{"class":370},[97,140028,51621],{"class":103},[97,140030,55073],{"class":370},[97,140032,1483],{"class":103},[97,140034,140035,140037,140039,140041],{"class":99,"line":241},[97,140036,70982],{"class":370},[97,140038,51621],{"class":103},[97,140040,54921],{"class":370},[97,140042,1483],{"class":103},[97,140044,140045],{"class":99,"line":1387},[97,140046,1757],{"class":103},[24,140048,138610],{},[87,140050,140051],{"className":182,"code":128054,"language":184,"meta":92,"style":92},[94,140052,140053,140061,140071,140081],{"__ignoreMap":92},[97,140054,140055,140057,140059],{"class":99,"line":100},[97,140056,54005],{"class":107},[97,140058,62084],{"class":111},[97,140060,15762],{"class":103},[97,140062,140063,140065,140067,140069],{"class":99,"line":195},[97,140064,128069],{"class":370},[97,140066,51621],{"class":103},[97,140068,55073],{"class":370},[97,140070,1483],{"class":103},[97,140072,140073,140075,140077,140079],{"class":99,"line":241},[97,140074,70982],{"class":370},[97,140076,51621],{"class":103},[97,140078,54921],{"class":370},[97,140080,1483],{"class":103},[97,140082,140083],{"class":99,"line":1387},[97,140084,1757],{"class":103},[24,140086,140087],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[138,140089,140090],{"start":195},[70,140091,140092],{},"右侧newsflash模块制作",[19,140094],{"style":21,"src":140095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[24,140097,140098],{},"右侧的模块 分为上中下三个盒子",[24,140100,140101],{},"结构代码：",[87,140103,140104],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,140105,140106],{"__ignoreMap":92},[97,140107,140108,140110,140112,140114,140116,140118,140120,140122,140124,140126,140128,140130],{"class":99,"line":100},[97,140109,104],{"class":103},[97,140111,19],{"class":107},[97,140113,55423],{"class":111},[97,140115,115],{"class":103},[97,140117,134248],{"class":118},[97,140119,55431],{"class":111},[97,140121,115],{"class":103},[97,140123,134255],{"class":118},[97,140125,134258],{"class":111},[97,140127,115],{"class":103},[97,140129,134263],{"class":118},[97,140131,130],{"class":103},[24,140133,140134,140135,140138],{},"1 号盒子为 ",[94,140136,140137],{},"news"," 新闻模块 高度为 165px",[19,140140],{"style":21,"src":140141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[24,140143,140144,140145,140148,140149],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[94,140146,140147],{},"news-hd","，下面是 ",[94,140150,140151],{},"news-bd",[24,140153,140101],{},[87,140155,140156],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,140157,140158,140162,140176,140180],{"__ignoreMap":92},[97,140159,140160],{"class":99,"line":100},[97,140161,130842],{"class":191},[97,140163,140164,140166,140168,140170,140172,140174],{"class":99,"line":195},[97,140165,104],{"class":103},[97,140167,51795],{"class":107},[97,140169,53670],{"class":111},[97,140171,115],{"class":103},[97,140173,130855],{"class":118},[97,140175,130],{"class":103},[97,140177,140178],{"class":99,"line":241},[97,140179,130862],{"class":103},[97,140181,140182,140184,140186],{"class":99,"line":1387},[97,140183,51969],{"class":103},[97,140185,51795],{"class":107},[97,140187,130],{"class":103},[24,140189,140190],{},"样式代码：",[87,140192,140193],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,140194,140195,140199,140213,140217],{"__ignoreMap":92},[97,140196,140197],{"class":99,"line":100},[97,140198,130842],{"class":191},[97,140200,140201,140203,140205,140207,140209,140211],{"class":99,"line":195},[97,140202,104],{"class":103},[97,140204,51795],{"class":107},[97,140206,53670],{"class":111},[97,140208,115],{"class":103},[97,140210,130855],{"class":118},[97,140212,130],{"class":103},[97,140214,140215],{"class":99,"line":241},[97,140216,130862],{"class":103},[97,140218,140219,140221,140223],{"class":99,"line":1387},[97,140220,51969],{"class":103},[97,140222,51795],{"class":107},[97,140224,130],{"class":103},[24,140226,140227,140228,140230],{},"上面是",[94,140229,140147],{},"，设置高度是 33px，设置下边框",[67,140232,140233,140239],{},[70,140234,140235,140236,140238],{},"里面放一个",[94,140237,23099],{}," 标题",[70,140240,140241,140242,140244,140245,140247],{},"放一个a",[94,140243,102877],{},"，内容是 更多，然后让 ",[94,140246,558],{}," 进行右浮动，三角用伪元素设置字体图标就好",[24,140249,140101],{},[87,140251,140252],{"className":182,"code":138573,"language":184,"meta":92,"style":92},[94,140253,140254,140262,140272,140282],{"__ignoreMap":92},[97,140255,140256,140258,140260],{"class":99,"line":100},[97,140257,51795],{"class":107},[97,140259,137732],{"class":111},[97,140261,15762],{"class":103},[97,140263,140264,140266,140268,140270],{"class":99,"line":195},[97,140265,137739],{"class":370},[97,140267,51621],{"class":103},[97,140269,7843],{"class":118},[97,140271,1483],{"class":103},[97,140273,140274,140276,140278,140280],{"class":99,"line":241},[97,140275,128347],{"class":370},[97,140277,51621],{"class":103},[97,140279,61053],{"class":370},[97,140281,1483],{"class":103},[97,140283,140284],{"class":99,"line":1387},[97,140285,1757],{"class":103},[24,140287,140190],{},[87,140289,140290],{"className":182,"code":138573,"language":184,"meta":92,"style":92},[94,140291,140292,140300,140310,140320],{"__ignoreMap":92},[97,140293,140294,140296,140298],{"class":99,"line":100},[97,140295,51795],{"class":107},[97,140297,137732],{"class":111},[97,140299,15762],{"class":103},[97,140301,140302,140304,140306,140308],{"class":99,"line":195},[97,140303,137739],{"class":370},[97,140305,51621],{"class":103},[97,140307,7843],{"class":118},[97,140309,1483],{"class":103},[97,140311,140312,140314,140316,140318],{"class":99,"line":241},[97,140313,128347],{"class":370},[97,140315,51621],{"class":103},[97,140317,61053],{"class":370},[97,140319,1483],{"class":103},[97,140321,140322],{"class":99,"line":1387},[97,140323,1757],{"class":103},[24,140325,140326,140327],{},"下面是",[94,140328,140151],{},[67,140330,140331,140339],{},[70,140332,140333,140334,101202,140336,140338],{},"里面包含 ",[94,140335,67],{},[94,140337,70],{}," 还有链接",[70,140340,139811,140341,140343,140344,140346,140347,140350,140351],{},[94,140342,70],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[94,140345,131397],{}," 2.设置 ",[94,140348,140349],{},"white-space: nowrap;"," 3. 设置 ",[94,140352,140353],{},"text-overflow: ellipsis;",[24,140355,140101],{},[87,140357,140359],{"className":182,"code":140358,"language":184,"meta":92,"style":92},"div {\n  overflow: hidden;\n}\n",[94,140360,140361,140367,140378],{"__ignoreMap":92},[97,140362,140363,140365],{"class":99,"line":100},[97,140364,51795],{"class":107},[97,140366,15762],{"class":103},[97,140368,140369,140372,140374,140376],{"class":99,"line":195},[97,140370,140371],{"class":370},"  overflow",[97,140373,51621],{"class":103},[97,140375,61898],{"class":370},[97,140377,1483],{"class":103},[97,140379,140380],{"class":99,"line":241},[97,140381,1757],{"class":103},[24,140383,140190],{},[87,140385,140386],{"className":182,"code":140358,"language":184,"meta":92,"style":92},[94,140387,140388,140394,140404],{"__ignoreMap":92},[97,140389,140390,140392],{"class":99,"line":100},[97,140391,51795],{"class":107},[97,140393,15762],{"class":103},[97,140395,140396,140398,140400,140402],{"class":99,"line":195},[97,140397,140371],{"class":370},[97,140399,51621],{"class":103},[97,140401,61898],{"class":370},[97,140403,1483],{"class":103},[97,140405,140406],{"class":99,"line":241},[97,140407,1757],{"class":103},[24,140409,140410,140411,140414],{},"2 号盒子为 ",[94,140412,140413],{},"lifeservice"," 生活服务模块 高度为 209px",[19,140416],{"style":21,"src":140417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[67,140419,140420,140423,140433,140457,140468],{},[70,140421,140422],{},"设置边框（左右下边框）",[70,140424,140425,140426,140429,140430,140432],{},"里面的内容 是 ",[94,140427,140428],{},"ul > 12*li","，给",[94,140431,70],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[70,140434,140435,140436],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[67,140437,140438,140443,140452],{},[70,140439,140440,140442],{},[94,140441,140413],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[70,140444,140445,140446,140448,140449,140451],{},"可以让 ",[94,140447,140413],{}," 里面的 ",[94,140450,67],{}," 宽度为 252，就可以装的下 4 个 小 li",[70,140453,140454,140456],{},[94,140455,140413],{}," 盒子 overflow 隐藏多余的部分就可以了",[70,140458,116651,140459,140461,140462,140464,140465,140467],{},[94,140460,70],{}," 里面放一个 ",[94,140463,761],{},"（里面放图标），下面的文本用 ",[94,140466,24],{}," 标签包裹",[70,140469,139231,140470,140472,140473,140475,140476,139265,140478,140481],{},[94,140471,761],{}," 设置 24px宽和28px的高（注意 ",[94,140474,761],{}," 是行内元素， 转成行内块），给 ",[94,140477,70],{},[94,140479,140480],{},"text-align:center"," 让里面内容居中显示",[24,140483,140101],{},[87,140485,140487],{"className":182,"code":140486,"language":184,"meta":92,"style":92},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[94,140488,140489,140507,140512,140522],{"__ignoreMap":92},[97,140490,140491,140493,140495,140497,140499,140501,140503,140505],{"class":99,"line":100},[97,140492,97],{"class":107},[97,140494,12626],{"class":103},[97,140496,558],{"class":107},[97,140498,12626],{"class":103},[97,140500,23742],{"class":107},[97,140502,12626],{"class":103},[97,140504,469],{"class":107},[97,140506,15762],{"class":103},[97,140508,140509],{"class":99,"line":195},[97,140510,140511],{"class":191},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[97,140513,140514,140516,140518,140520],{"class":99,"line":241},[97,140515,128347],{"class":370},[97,140517,51621],{"class":103},[97,140519,128409],{"class":370},[97,140521,1483],{"class":103},[97,140523,140524],{"class":99,"line":1387},[97,140525,1757],{"class":103},[24,140527,140190],{},[87,140529,140530],{"className":182,"code":140486,"language":184,"meta":92,"style":92},[94,140531,140532,140550,140554,140564],{"__ignoreMap":92},[97,140533,140534,140536,140538,140540,140542,140544,140546,140548],{"class":99,"line":100},[97,140535,97],{"class":107},[97,140537,12626],{"class":103},[97,140539,558],{"class":107},[97,140541,12626],{"class":103},[97,140543,23742],{"class":107},[97,140545,12626],{"class":103},[97,140547,469],{"class":107},[97,140549,15762],{"class":103},[97,140551,140552],{"class":99,"line":195},[97,140553,140511],{"class":191},[97,140555,140556,140558,140560,140562],{"class":99,"line":241},[97,140557,128347],{"class":370},[97,140559,51621],{"class":103},[97,140561,128409],{"class":370},[97,140563,1483],{"class":103},[97,140565,140566],{"class":99,"line":1387},[97,140567,1757],{"class":103},[24,140569,140570,140571,140574],{},"3 号盒子为 ",[94,140572,140573],{},"bargain"," 特价商品",[67,140576,140577],{},[70,140578,140579],{},"这个比较简单，直接插入一张图片即可",[24,140581,140101],{},[87,140583,140584],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,140585,140586],{"__ignoreMap":92},[97,140587,140588,140590,140592,140594,140596,140598,140600,140602,140604,140606,140608,140610],{"class":99,"line":100},[97,140589,104],{"class":103},[97,140591,19],{"class":107},[97,140593,55423],{"class":111},[97,140595,115],{"class":103},[97,140597,134248],{"class":118},[97,140599,55431],{"class":111},[97,140601,115],{"class":103},[97,140603,134255],{"class":118},[97,140605,134258],{"class":111},[97,140607,115],{"class":103},[97,140609,134263],{"class":118},[97,140611,130],{"class":103},[24,140613,140190],{},[87,140615,140616],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,140617,140618],{"__ignoreMap":92},[97,140619,140620,140622,140624,140626,140628,140630,140632,140634,140636,140638,140640,140642],{"class":99,"line":100},[97,140621,104],{"class":103},[97,140623,19],{"class":107},[97,140625,55423],{"class":111},[97,140627,115],{"class":103},[97,140629,134248],{"class":118},[97,140631,55431],{"class":111},[97,140633,115],{"class":103},[97,140635,134255],{"class":118},[97,140637,134258],{"class":111},[97,140639,115],{"class":103},[97,140641,134263],{"class":118},[97,140643,130],{"class":103},[48,140645,140647],{"id":140646},"_1612-推荐模块制作","16.1.2 推荐模块制作",[19,140649],{"style":21,"src":140650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[24,140652,140653,140654,140657],{},"大盒子 ",[94,140655,140656],{},"recom"," 推荐模块 recommend",[67,140659,140660],{},[70,140661,140662,140663,140665,140666,140669],{},"给这个 ",[94,140664,140656],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[94,140667,140668],{},"#ebebeb","），设置距离上边 12px",[24,140671,140101],{},[87,140673,140675],{"className":182,"code":140674,"language":184,"meta":92,"style":92},"div {\n  background-color: #f0f0f0;\n}\n",[94,140676,140677,140683,140694],{"__ignoreMap":92},[97,140678,140679,140681],{"class":99,"line":100},[97,140680,51795],{"class":107},[97,140682,15762],{"class":103},[97,140684,140685,140687,140689,140692],{"class":99,"line":195},[97,140686,71062],{"class":370},[97,140688,51621],{"class":103},[97,140690,140691],{"class":370},"#f0f0f0",[97,140693,1483],{"class":103},[97,140695,140696],{"class":99,"line":241},[97,140697,1757],{"class":103},[24,140699,140190],{},[87,140701,140702],{"className":182,"code":140674,"language":184,"meta":92,"style":92},[94,140703,140704,140710,140720],{"__ignoreMap":92},[97,140705,140706,140708],{"class":99,"line":100},[97,140707,51795],{"class":107},[97,140709,15762],{"class":103},[97,140711,140712,140714,140716,140718],{"class":99,"line":195},[97,140713,71062],{"class":370},[97,140715,51621],{"class":103},[97,140717,140691],{"class":370},[97,140719,1483],{"class":103},[97,140721,140722],{"class":99,"line":241},[97,140723,1757],{"class":103},[24,140725,140726],{},"里面包含 2 个盒子， 浮动即可",[24,140728,140101],{},[87,140730,140731],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,140732,140733,140739,140749],{"__ignoreMap":92},[97,140734,140735,140737],{"class":99,"line":100},[97,140736,130579],{"class":111},[97,140738,15762],{"class":103},[97,140740,140741,140743,140745,140747],{"class":99,"line":195},[97,140742,131211],{"class":370},[97,140744,51621],{"class":103},[97,140746,23925],{"class":370},[97,140748,1483],{"class":103},[97,140750,140751],{"class":99,"line":241},[97,140752,1757],{"class":103},[24,140754,140755,140756],{},"1 号盒子 ",[94,140757,140758],{},"recom_hd",[67,140760,140761,140764],{},[70,140762,140763],{},"设置宽度205px，高度163px",[70,140765,140235,140766,140768],{},[94,140767,19],{},"标签，插入图片即可",[24,140770,140101],{},[87,140772,140773],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,140774,140775],{"__ignoreMap":92},[97,140776,140777,140779,140781,140783,140785,140787,140789,140791,140793,140795,140797,140799],{"class":99,"line":100},[97,140778,104],{"class":103},[97,140780,19],{"class":107},[97,140782,55423],{"class":111},[97,140784,115],{"class":103},[97,140786,134248],{"class":118},[97,140788,55431],{"class":111},[97,140790,115],{"class":103},[97,140792,134255],{"class":118},[97,140794,134258],{"class":111},[97,140796,115],{"class":103},[97,140798,134263],{"class":118},[97,140800,130],{"class":103},[24,140802,140190],{},[87,140804,140805],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,140806,140807],{"__ignoreMap":92},[97,140808,140809,140811,140813,140815,140817,140819,140821,140823,140825,140827,140829,140831],{"class":99,"line":100},[97,140810,104],{"class":103},[97,140812,19],{"class":107},[97,140814,55423],{"class":111},[97,140816,115],{"class":103},[97,140818,134248],{"class":118},[97,140820,55431],{"class":111},[97,140822,115],{"class":103},[97,140824,134255],{"class":118},[97,140826,134258],{"class":111},[97,140828,115],{"class":103},[97,140830,134263],{"class":118},[97,140832,130],{"class":103},[24,140834,140835,140836,140839],{},"2 号盒子 ",[94,140837,140838],{},"recom_bd"," ，注意里面的小竖线",[67,140841,140842,140853,140856,140861,140866],{},[70,140843,140844,140845,140847,140848,140850,140851],{},"右侧结构里面放 ",[94,140846,67],{}," 包含 4个 ",[94,140849,70],{},"，每个li里面包含一个",[94,140852,19],{},[70,140854,140855],{},"直接利用切片工具把里面的内容当成一张图片",[70,140857,139231,140858,140860],{},[94,140859,70],{}," 设置浮动",[70,140862,139231,140863,140865],{},[94,140864,19],{}," 设置宽高，宽度 248px，高度 163px",[70,140867,140868,140869,140429,140872,140874,140875,140877,140878],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[94,140870,140871],{},"top 10px",[94,140873,70],{},"设置相对定位（注意，最后一个",[94,140876,70],{},"不用设置伪元素），可以利用 ",[94,140879,140880],{},"nth-child(-n+3){...}",[24,140882,140101],{},[87,140884,140885],{"className":182,"code":138573,"language":184,"meta":92,"style":92},[94,140886,140887,140895,140905,140915],{"__ignoreMap":92},[97,140888,140889,140891,140893],{"class":99,"line":100},[97,140890,51795],{"class":107},[97,140892,137732],{"class":111},[97,140894,15762],{"class":103},[97,140896,140897,140899,140901,140903],{"class":99,"line":195},[97,140898,137739],{"class":370},[97,140900,51621],{"class":103},[97,140902,7843],{"class":118},[97,140904,1483],{"class":103},[97,140906,140907,140909,140911,140913],{"class":99,"line":241},[97,140908,128347],{"class":370},[97,140910,51621],{"class":103},[97,140912,61053],{"class":370},[97,140914,1483],{"class":103},[97,140916,140917],{"class":99,"line":1387},[97,140918,1757],{"class":103},[24,140920,140190],{},[87,140922,140923],{"className":182,"code":138573,"language":184,"meta":92,"style":92},[94,140924,140925,140933,140943,140953],{"__ignoreMap":92},[97,140926,140927,140929,140931],{"class":99,"line":100},[97,140928,51795],{"class":107},[97,140930,137732],{"class":111},[97,140932,15762],{"class":103},[97,140934,140935,140937,140939,140941],{"class":99,"line":195},[97,140936,137739],{"class":370},[97,140938,51621],{"class":103},[97,140940,7843],{"class":118},[97,140942,1483],{"class":103},[97,140944,140945,140947,140949,140951],{"class":99,"line":241},[97,140946,128347],{"class":370},[97,140948,51621],{"class":103},[97,140950,61053],{"class":370},[97,140952,1483],{"class":103},[97,140954,140955],{"class":99,"line":1387},[97,140956,1757],{"class":103},[48,140958,140960],{"id":140959},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[19,140962],{"style":21,"src":140963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[24,140965,140966],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[24,140968,140969],{},"第一楼是家用电器模块： 里面包含两个盒子",[24,140971,140972,140975],{},[94,140973,140974],{},"box_hd"," 制作",[24,140977,140755,140978,140980],{},[94,140979,140974],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[19,140982],{"style":21,"src":140983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[67,140985,140986,140991,140996,140999],{},[70,140987,140988,140990],{},[94,140989,140974],{}," 给 30px 的高度，2个像素的下边框",[70,140992,140993,140994],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[94,140995,139242],{},[70,140997,140998],{},"左侧盒左浮动，右侧盒子右浮动",[70,141000,141001,141003,141004,141006],{},[94,141002,558],{},"标签之间的距离用左右的",[94,141005,31073],{},"撑开即可",[24,141008,141009],{},"结构代码",[87,141011,141012],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,141013,141014,141020,141030],{"__ignoreMap":92},[97,141015,141016,141018],{"class":99,"line":100},[97,141017,130579],{"class":111},[97,141019,15762],{"class":103},[97,141021,141022,141024,141026,141028],{"class":99,"line":195},[97,141023,131211],{"class":370},[97,141025,51621],{"class":103},[97,141027,23925],{"class":370},[97,141029,1483],{"class":103},[97,141031,141032],{"class":99,"line":241},[97,141033,1757],{"class":103},[24,141035,141036],{},"样式代码",[87,141038,141039],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,141040,141041,141047,141057],{"__ignoreMap":92},[97,141042,141043,141045],{"class":99,"line":100},[97,141044,130579],{"class":111},[97,141046,15762],{"class":103},[97,141048,141049,141051,141053,141055],{"class":99,"line":195},[97,141050,131211],{"class":370},[97,141052,51621],{"class":103},[97,141054,23925],{"class":370},[97,141056,1483],{"class":103},[97,141058,141059],{"class":99,"line":241},[97,141060,1757],{"class":103},[24,141062,141063,140975],{},[94,141064,141065],{},"box_bd",[24,141067,141068],{},"2 号盒子 box_bd，不要给高度",[19,141070],{"style":21,"src":141071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[24,141073,141074],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[24,141076,141077],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[24,141079,141080],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[67,141082,141083,141095,141111],{},[70,141084,141085,141087,141088,141091,141092,141094],{},[94,141086,141065],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[94,141089,141090],{},"tab_content","，在",[94,141093,141090],{}," 里面包裹tab选项卡对应的内容",[70,141096,141097,141098,141101,141102,141104,141105,141107,141108,141110],{},"内容被一个大盒子包裹（",[94,141099,141100],{},"tab_list_item","），里面是 ",[94,141103,67],{}," 包裹 5个 ",[94,141106,70],{},"，每个",[94,141109,70],{},"设置对应的宽度，然后设置浮动",[70,141112,141113,141114,141116,141117,141119,141120],{},"而这5个",[94,141115,70],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[94,141118,70],{},"设置",[67,141121,141122,141140,141143],{},[70,141123,141124,141125,141127,141128,141130,141131,141133,141134,141136,141137,141139],{},"第一个小 ",[94,141126,70],{}," 分为上下结构，上面是 ",[94,141129,67],{}," 包裹 ",[94,141132,70],{}," ，",[94,141135,70],{},"里面包裹 ",[94,141138,558],{},"，下面插入一张图片",[70,141141,141142],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[70,141144,141145,141146,141148,141149,141151,141152,141154],{},"后面的小 ",[94,141147,70],{}," 里面先放一个",[94,141150,558],{},"标签，然后在",[94,141153,558],{},"标签里面插入图片即可",[24,141156,141009],{},[87,141158,141159],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,141160,141161],{"__ignoreMap":92},[97,141162,141163,141165,141167,141169,141171,141173,141175,141177,141179,141181,141183,141185],{"class":99,"line":100},[97,141164,104],{"class":103},[97,141166,19],{"class":107},[97,141168,55423],{"class":111},[97,141170,115],{"class":103},[97,141172,134248],{"class":118},[97,141174,55431],{"class":111},[97,141176,115],{"class":103},[97,141178,134255],{"class":118},[97,141180,134258],{"class":111},[97,141182,115],{"class":103},[97,141184,134263],{"class":118},[97,141186,130],{"class":103},[24,141188,141036],{},[87,141190,141191],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,141192,141193],{"__ignoreMap":92},[97,141194,141195,141197,141199,141201,141203,141205,141207,141209,141211,141213,141215,141217],{"class":99,"line":100},[97,141196,104],{"class":103},[97,141198,19],{"class":107},[97,141200,55423],{"class":111},[97,141202,115],{"class":103},[97,141204,134248],{"class":118},[97,141206,55431],{"class":111},[97,141208,115],{"class":103},[97,141210,134255],{"class":118},[97,141212,134258],{"class":111},[97,141214,115],{"class":103},[97,141216,134263],{"class":118},[97,141218,130],{"class":103},[24,141220,141221],{},"tab栏切换需求！！！！！！介绍：",[19,141223],{"style":21,"src":141224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[67,141226,141227,141235,141241,141244],{},[70,141228,141229,141232,141233],{},[94,141230,141231],{},"tab","栏的布局是 ",[94,141234,139242],{},[70,141236,141237,141238,141240],{},"有多少个",[94,141239,141231],{},"选项卡，那么对应就有多少个内容",[70,141242,141243],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[70,141245,141246,141247,141250,141251,141253,141254,141256],{},"等后面我们学习了",[94,141248,141249],{},"js","之后，我们就会配合",[94,141252,141249],{},"来实现，",[94,141255,141231],{},"栏的切换",[14,141258,141260],{"id":141259},"_162-列表制作","16.2 列表制作",[48,141262,141264],{"id":141263},"_1621-准备工作","16.2.1 准备工作",[67,141266,141267,141270,141273,141276],{},[70,141268,141269],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[70,141271,141272],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[70,141274,141275],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[70,141277,141278],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[48,141280,141282,141283,101202,141285,141287],{"id":141281},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[94,141284,131736],{},[94,141286,53897],{}," 修改",[19,141289],{"style":21,"src":141290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[67,141292,141293],{},[70,141294,141295],{},"秒杀盒子 sk（ second kill ） 定位即可",[24,141297,140101],{},[87,141299,141300],{"className":182,"code":132163,"language":184,"meta":92,"style":92},[94,141301,141302,141306,141320,141324,141338,141342,141356,141360,141374,141378],{"__ignoreMap":92},[97,141303,141304],{"class":99,"line":100},[97,141305,132170],{"class":191},[97,141307,141308,141310,141312,141314,141316,141318],{"class":99,"line":195},[97,141309,132175],{"class":111},[97,141311,79991],{"class":103},[97,141313,129091],{"class":370},[97,141315,51621],{"class":103},[97,141317,132184],{"class":370},[97,141319,129661],{"class":103},[97,141321,141322],{"class":99,"line":241},[97,141323,132191],{"class":191},[97,141325,141326,141328,141330,141332,141334,141336],{"class":99,"line":1387},[97,141327,132196],{"class":111},[97,141329,79991],{"class":103},[97,141331,129091],{"class":370},[97,141333,51621],{"class":103},[97,141335,54948],{"class":370},[97,141337,129661],{"class":103},[97,141339,141340],{"class":99,"line":1393},[97,141341,132211],{"class":191},[97,141343,141344,141346,141348,141350,141352,141354],{"class":99,"line":1407},[97,141345,132216],{"class":111},[97,141347,79991],{"class":103},[97,141349,129091],{"class":370},[97,141351,51621],{"class":103},[97,141353,55015],{"class":370},[97,141355,129661],{"class":103},[97,141357,141358],{"class":99,"line":1413},[97,141359,132231],{"class":191},[97,141361,141362,141364,141366,141368,141370,141372],{"class":99,"line":1504},[97,141363,132236],{"class":111},[97,141365,79991],{"class":103},[97,141367,129091],{"class":370},[97,141369,51621],{"class":103},[97,141371,86417],{"class":370},[97,141373,129661],{"class":103},[97,141375,141376],{"class":99,"line":1510},[97,141377,132251],{"class":191},[97,141379,141380,141382,141384,141386,141388,141390],{"class":99,"line":1522},[97,141381,132256],{"class":111},[97,141383,79991],{"class":103},[97,141385,129091],{"class":370},[97,141387,51621],{"class":103},[97,141389,132265],{"class":370},[97,141391,129661],{"class":103},[24,141393,140190],{},[87,141395,141396],{"className":182,"code":132163,"language":184,"meta":92,"style":92},[94,141397,141398,141402,141416,141420,141434,141438,141452,141456,141470,141474],{"__ignoreMap":92},[97,141399,141400],{"class":99,"line":100},[97,141401,132170],{"class":191},[97,141403,141404,141406,141408,141410,141412,141414],{"class":99,"line":195},[97,141405,132175],{"class":111},[97,141407,79991],{"class":103},[97,141409,129091],{"class":370},[97,141411,51621],{"class":103},[97,141413,132184],{"class":370},[97,141415,129661],{"class":103},[97,141417,141418],{"class":99,"line":241},[97,141419,132191],{"class":191},[97,141421,141422,141424,141426,141428,141430,141432],{"class":99,"line":1387},[97,141423,132196],{"class":111},[97,141425,79991],{"class":103},[97,141427,129091],{"class":370},[97,141429,51621],{"class":103},[97,141431,54948],{"class":370},[97,141433,129661],{"class":103},[97,141435,141436],{"class":99,"line":1393},[97,141437,132211],{"class":191},[97,141439,141440,141442,141444,141446,141448,141450],{"class":99,"line":1407},[97,141441,132216],{"class":111},[97,141443,79991],{"class":103},[97,141445,129091],{"class":370},[97,141447,51621],{"class":103},[97,141449,55015],{"class":370},[97,141451,129661],{"class":103},[97,141453,141454],{"class":99,"line":1413},[97,141455,132231],{"class":191},[97,141457,141458,141460,141462,141464,141466,141468],{"class":99,"line":1504},[97,141459,132236],{"class":111},[97,141461,79991],{"class":103},[97,141463,129091],{"class":370},[97,141465,51621],{"class":103},[97,141467,86417],{"class":370},[97,141469,129661],{"class":103},[97,141471,141472],{"class":99,"line":1510},[97,141473,132251],{"class":191},[97,141475,141476,141478,141480,141482,141484,141486],{"class":99,"line":1522},[97,141477,132256],{"class":111},[97,141479,79991],{"class":103},[97,141481,129091],{"class":370},[97,141483,51621],{"class":103},[97,141485,132265],{"class":370},[97,141487,129661],{"class":103},[67,141489,141490,141501],{},[70,141491,141492,141493,141496,141497,101202,141499],{},"1 号盒子左侧浮动 ",[94,141494,141495],{},"sk_list"," 里面包含 ",[94,141498,67],{},[94,141500,70],{},[70,141502,141503,141504,141496,141507,101202,141509],{},"2 号盒子左侧浮动 ",[94,141505,141506],{},"sk_con",[94,141508,67],{},[94,141510,70],{},[24,141512,140101],{},[87,141514,141515],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,141516,141517,141523,141533],{"__ignoreMap":92},[97,141518,141519,141521],{"class":99,"line":100},[97,141520,130579],{"class":111},[97,141522,15762],{"class":103},[97,141524,141525,141527,141529,141531],{"class":99,"line":195},[97,141526,131211],{"class":370},[97,141528,51621],{"class":103},[97,141530,23925],{"class":370},[97,141532,1483],{"class":103},[97,141534,141535],{"class":99,"line":241},[97,141536,1757],{"class":103},[24,141538,140190],{},[87,141540,141541],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,141542,141543,141549,141559],{"__ignoreMap":92},[97,141544,141545,141547],{"class":99,"line":100},[97,141546,130579],{"class":111},[97,141548,15762],{"class":103},[97,141550,141551,141553,141555,141557],{"class":99,"line":195},[97,141552,131211],{"class":370},[97,141554,51621],{"class":103},[97,141556,23925],{"class":370},[97,141558,1483],{"class":103},[97,141560,141561],{"class":99,"line":241},[97,141562,1757],{"class":103},[48,141564,141566,141567],{"id":141565},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[94,141568,141569],{},"sk_container",[19,141571],{"style":21,"src":141572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[67,141574,141575,141580],{},[70,141576,140755,141577,141579],{},[94,141578,141569],{}," 给宽度 1200，不要给高度",[70,141581,141582],{},"一定不要忘记清除浮动",[24,141584,140101],{},[87,141586,141587],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,141588,141589,141595,141605],{"__ignoreMap":92},[97,141590,141591,141593],{"class":99,"line":100},[97,141592,130579],{"class":111},[97,141594,15762],{"class":103},[97,141596,141597,141599,141601,141603],{"class":99,"line":195},[97,141598,131211],{"class":370},[97,141600,51621],{"class":103},[97,141602,23925],{"class":370},[97,141604,1483],{"class":103},[97,141606,141607],{"class":99,"line":241},[97,141608,1757],{"class":103},[138,141610,141611],{},[70,141612,141613],{},"sk_hd制作",[67,141615,141616],{},[70,141617,140835,141618,141621],{},[94,141619,141620],{},"sk_hd"," ，插入图片即可",[24,141623,140101],{},[87,141625,141626],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,141627,141628],{"__ignoreMap":92},[97,141629,141630,141632,141634,141636,141638,141640,141642,141644,141646,141648,141650,141652],{"class":99,"line":100},[97,141631,104],{"class":103},[97,141633,19],{"class":107},[97,141635,55423],{"class":111},[97,141637,115],{"class":103},[97,141639,134248],{"class":118},[97,141641,55431],{"class":111},[97,141643,115],{"class":103},[97,141645,134255],{"class":118},[97,141647,134258],{"class":111},[97,141649,115],{"class":103},[97,141651,134263],{"class":118},[97,141653,130],{"class":103},[138,141655,141656],{"start":195},[70,141657,141658],{},"sk_bd制作",[67,141660,141661],{},[70,141662,141663,141664,141667,141668,101202,141670,141672],{},"3 号盒子 ",[94,141665,141666],{},"sk_bd"," ，里面包含很多的 ",[94,141669,67],{},[94,141671,70],{},[67,141673,141674,141683],{},[70,141675,141676,141677,141679,141680,141682],{},"当鼠标移入到 ",[94,141678,70],{}," 上面的时候显示红色的边框，在这里先给 ",[94,141681,70],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[70,141684,141685,141686,141688,141689,141691,141692,141695,141696,141698],{},"由于给每个 ",[94,141687,70],{}," 都设置了外边距，导致一行的最后一个 ",[94,141690,70],{}," 掉了下来，在这里我们利用 ",[94,141693,141694],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[94,141697,70],{},"，去掉外边距就好了",[24,141700,140101],{},[87,141702,141703],{"className":182,"code":138920,"language":184,"meta":92,"style":92},[94,141704,141705,141711,141723],{"__ignoreMap":92},[97,141706,141707,141709],{"class":99,"line":100},[97,141708,51795],{"class":107},[97,141710,15762],{"class":103},[97,141712,141713,141715,141717,141719,141721],{"class":99,"line":195},[97,141714,70654],{"class":370},[97,141716,51621],{"class":103},[97,141718,511],{"class":370},[97,141720,51740],{"class":370},[97,141722,1483],{"class":103},[97,141724,141725],{"class":99,"line":241},[97,141726,1757],{"class":103},[24,141728,140190],{},[87,141730,141731],{"className":182,"code":138920,"language":184,"meta":92,"style":92},[94,141732,141733,141739,141751],{"__ignoreMap":92},[97,141734,141735,141737],{"class":99,"line":100},[97,141736,51795],{"class":107},[97,141738,15762],{"class":103},[97,141740,141741,141743,141745,141747,141749],{"class":99,"line":195},[97,141742,70654],{"class":370},[97,141744,51621],{"class":103},[97,141746,511],{"class":370},[97,141748,51740],{"class":370},[97,141750,1483],{"class":103},[97,141752,141753],{"class":99,"line":241},[97,141754,1757],{"class":103},[14,141756,141758],{"id":141757},"_163-注册页面制作","16.3 注册页面制作",[19,141760],{"style":21,"src":141761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[24,141763,141764,141766],{},[469,141765,9216],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[19,141768],{"style":21,"src":141769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[48,141771,141773],{"id":141772},"_1631-准备工作","16.3.1 准备工作",[67,141775,141776,141779],{},[70,141777,141778],{},"创建register.html，引入 base.css，引入favicon图标",[70,141780,141781],{},"创建register.css ，在html页面进行引入",[48,141783,141785,141786,141788],{"id":141784},"_1632-header-头部实现","16.3.2 ",[94,141787,131736],{}," 头部实现",[67,141790,141791,141794],{},[70,141792,141793],{},"整个内容用 版心 进行包裹",[70,141795,141796],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[24,141798,140101],{},[87,141800,141801],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,141802,141803],{"__ignoreMap":92},[97,141804,141805,141807,141809,141811,141813,141815,141817,141819,141821,141823,141825,141827],{"class":99,"line":100},[97,141806,104],{"class":103},[97,141808,19],{"class":107},[97,141810,55423],{"class":111},[97,141812,115],{"class":103},[97,141814,134248],{"class":118},[97,141816,55431],{"class":111},[97,141818,115],{"class":103},[97,141820,134255],{"class":118},[97,141822,134258],{"class":111},[97,141824,115],{"class":103},[97,141826,134263],{"class":118},[97,141828,130],{"class":103},[24,141830,140190],{},[87,141832,141833],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,141834,141835],{"__ignoreMap":92},[97,141836,141837,141839,141841,141843,141845,141847,141849,141851,141853,141855,141857,141859],{"class":99,"line":100},[97,141838,104],{"class":103},[97,141840,19],{"class":107},[97,141842,55423],{"class":111},[97,141844,115],{"class":103},[97,141846,134248],{"class":118},[97,141848,55431],{"class":111},[97,141850,115],{"class":103},[97,141852,134255],{"class":118},[97,141854,134258],{"class":111},[97,141856,115],{"class":103},[97,141858,134263],{"class":118},[97,141860,130],{"class":103},[48,141862,141864,141865,141868],{"id":141863},"_1633-registerarea-主体模块实现","16.3.3 ",[94,141866,141867],{},"registerarea"," 主体模块实现",[19,141870],{"style":21,"src":141871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[24,141873,141874],{},"整个大盒子 高度为 522px，设置4个边框",[24,141876,140101],{},[87,141878,141879],{"className":182,"code":130888,"language":184,"meta":92,"style":92},[94,141880,141881,141887,141903],{"__ignoreMap":92},[97,141882,141883,141885],{"class":99,"line":100},[97,141884,51795],{"class":107},[97,141886,15762],{"class":103},[97,141888,141889,141891,141893,141895,141897,141899,141901],{"class":99,"line":195},[97,141890,71080],{"class":370},[97,141892,51621],{"class":103},[97,141894,537],{"class":370},[97,141896,51676],{"class":319},[97,141898,51705],{"class":370},[97,141900,130123],{"class":370},[97,141902,1483],{"class":103},[97,141904,141905],{"class":99,"line":241},[97,141906,1757],{"class":103},[24,141908,140190],{},[87,141910,141911],{"className":182,"code":130888,"language":184,"meta":92,"style":92},[94,141912,141913,141919,141935],{"__ignoreMap":92},[97,141914,141915,141917],{"class":99,"line":100},[97,141916,51795],{"class":107},[97,141918,15762],{"class":103},[97,141920,141921,141923,141925,141927,141929,141931,141933],{"class":99,"line":195},[97,141922,71080],{"class":370},[97,141924,51621],{"class":103},[97,141926,537],{"class":370},[97,141928,51676],{"class":319},[97,141930,51705],{"class":370},[97,141932,130123],{"class":370},[97,141934,1483],{"class":103},[97,141936,141937],{"class":99,"line":241},[97,141938,1757],{"class":103},[24,141940,141941],{},"1号盒子 是一个 h3 标签，放标题",[67,141943,141944],{},[70,141945,141946],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[24,141948,140101],{},[87,141950,141951],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,141952,141953,141959,141969],{"__ignoreMap":92},[97,141954,141955,141957],{"class":99,"line":100},[97,141956,130579],{"class":111},[97,141958,15762],{"class":103},[97,141960,141961,141963,141965,141967],{"class":99,"line":195},[97,141962,131211],{"class":370},[97,141964,51621],{"class":103},[97,141966,23925],{"class":370},[97,141968,1483],{"class":103},[97,141970,141971],{"class":99,"line":241},[97,141972,1757],{"class":103},[24,141974,140190],{},[87,141976,141977],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,141978,141979,141985,141995],{"__ignoreMap":92},[97,141980,141981,141983],{"class":99,"line":100},[97,141982,130579],{"class":111},[97,141984,15762],{"class":103},[97,141986,141987,141989,141991,141993],{"class":99,"line":195},[97,141988,131211],{"class":370},[97,141990,51621],{"class":103},[97,141992,23925],{"class":370},[97,141994,1483],{"class":103},[97,141996,141997],{"class":99,"line":241},[97,141998,1757],{"class":103},[24,142000,142001],{},"2号盒子 里面放注册的内容",[67,142003,142004,142007,142016,142030,142043,142046,142049,142067,142081],{},[70,142005,142006],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[70,142008,142009,142010,142012,142013,142015],{},"里面的内容利用 ",[94,142011,67],{}," 包含 ",[94,142014,70],{}," 来实现的（不需要用表格）",[70,142017,139245,142018,142020,142021,142023,142024,142026,142027,142029],{},[94,142019,70],{}," 里面，左侧放 ",[94,142022,33798],{}," 标签， 中间放",[94,142025,54005],{}," 标签， 右侧放 ",[94,142028,97],{}," 提示信息",[70,142031,142032,142033,142035,142036,142038,142039,142042],{},"左侧 ",[94,142034,33798],{},"里面的文字都是右对齐，我们可以给",[94,142037,33798],{},"设置一个宽度（88px），然后利用",[94,142040,142041],{},"text-align"," 来设置右对齐",[70,142044,142045],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[70,142047,142048],{},"右侧 span修饰一下文字颜色",[70,142050,142051,142052],{},"提示信息的样式优化",[67,142053,142054,142057,142060],{},[70,142055,142056],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[70,142058,142059],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[70,142061,142062,142063,142066],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[94,142064,142065],{},"vertical-algin"," 来设置 图片与文字对齐方式",[70,142068,142069,142070],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[67,142071,142072,142078],{},[70,142073,142074,142075,142077],{},"设置 ",[94,142076,23742],{}," 的 左右 12px 的内边距，设置一下文字颜色",[70,142079,142080],{},"分别设置 背景颜色",[70,142082,142083,142084,142086],{},"同意协议 和 完成注册 都是用 ",[94,142085,70],{}," 进行包裹",[24,142088,140101],{},[87,142090,142091],{"className":182,"code":140674,"language":184,"meta":92,"style":92},[94,142092,142093,142099,142109],{"__ignoreMap":92},[97,142094,142095,142097],{"class":99,"line":100},[97,142096,51795],{"class":107},[97,142098,15762],{"class":103},[97,142100,142101,142103,142105,142107],{"class":99,"line":195},[97,142102,71062],{"class":370},[97,142104,51621],{"class":103},[97,142106,140691],{"class":370},[97,142108,1483],{"class":103},[97,142110,142111],{"class":99,"line":241},[97,142112,1757],{"class":103},[24,142114,140190],{},[87,142116,142117],{"className":182,"code":140674,"language":184,"meta":92,"style":92},[94,142118,142119,142125,142135],{"__ignoreMap":92},[97,142120,142121,142123],{"class":99,"line":100},[97,142122,51795],{"class":107},[97,142124,15762],{"class":103},[97,142126,142127,142129,142131,142133],{"class":99,"line":195},[97,142128,71062],{"class":370},[97,142130,51621],{"class":103},[97,142132,140691],{"class":370},[97,142134,1483],{"class":103},[97,142136,142137],{"class":99,"line":241},[97,142138,1757],{"class":103},[48,142140,142142],{"id":142141},"_1634-底部实现","16.3.4 底部实现",[24,142144,140101],{},[87,142146,142147],{"className":182,"code":140674,"language":184,"meta":92,"style":92},[94,142148,142149,142155,142165],{"__ignoreMap":92},[97,142150,142151,142153],{"class":99,"line":100},[97,142152,51795],{"class":107},[97,142154,15762],{"class":103},[97,142156,142157,142159,142161,142163],{"class":99,"line":195},[97,142158,71062],{"class":370},[97,142160,51621],{"class":103},[97,142162,140691],{"class":370},[97,142164,1483],{"class":103},[97,142166,142167],{"class":99,"line":241},[97,142168,1757],{"class":103},[24,142170,140190],{},[87,142172,142173],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,142174,142175,142179,142193,142197],{"__ignoreMap":92},[97,142176,142177],{"class":99,"line":100},[97,142178,130842],{"class":191},[97,142180,142181,142183,142185,142187,142189,142191],{"class":99,"line":195},[97,142182,104],{"class":103},[97,142184,51795],{"class":107},[97,142186,53670],{"class":111},[97,142188,115],{"class":103},[97,142190,130855],{"class":118},[97,142192,130],{"class":103},[97,142194,142195],{"class":99,"line":241},[97,142196,130862],{"class":103},[97,142198,142199,142201,142203],{"class":99,"line":1387},[97,142200,51969],{"class":103},[97,142202,51795],{"class":107},[97,142204,130],{"class":103},[14,142206,142208],{"id":142207},"_164-项目总结","16.4 项目总结",[138,142210,142211,142214,142217,142220],{},[70,142212,142213],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[70,142215,142216],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[70,142218,142219],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[70,142221,142222],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[19,142224],{"style":21,"src":142225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[138,142227,142228],{"start":1393},[70,142229,142230],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[19,142232],{"style":21,"src":142233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[138,142235,142236],{"start":1407},[70,142237,142238],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[19,142240],{"style":21,"src":142241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[87,142243,142244],{"className":89,"code":136888,"language":91,"meta":92,"style":92},[94,142245,142246],{"__ignoreMap":92},[97,142247,142248,142250,142252,142254,142256,142258,142260,142262,142264,142266,142268,142270],{"class":99,"line":100},[97,142249,104],{"class":103},[97,142251,54005],{"class":107},[97,142253,54008],{"class":111},[97,142255,115],{"class":103},[97,142257,62883],{"class":118},[97,142259,112],{"class":111},[97,142261,115],{"class":103},[97,142263,136909],{"class":118},[97,142265,61204],{"class":111},[97,142267,115],{"class":103},[97,142269,136916],{"class":118},[97,142271,130],{"class":103},[138,142273,142274,142277],{"start":1413},[70,142275,142276],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[70,142278,142279],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[231,142281,142282],{},"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":92,"searchDepth":195,"depth":195,"links":142284},[142285,142290,142297,142305],{"id":139911,"depth":195,"text":139912,"children":142286},[142287,142288,142289],{"id":139915,"depth":241,"text":139916},{"id":140646,"depth":241,"text":140647},{"id":140959,"depth":241,"text":140960},{"id":141259,"depth":195,"text":141260,"children":142291},[142292,142293,142295],{"id":141263,"depth":241,"text":141264},{"id":141281,"depth":241,"text":142294},"16.2.2 列表页 header 和 nav 修改",{"id":141565,"depth":241,"text":142296},"16.2.3 列表页主体 sk_container",{"id":141757,"depth":195,"text":141758,"children":142298},[142299,142300,142302,142304],{"id":141772,"depth":241,"text":141773},{"id":141784,"depth":241,"text":142301},"16.3.2 header 头部实现",{"id":141863,"depth":241,"text":142303},"16.3.3 registerarea 主体模块实现",{"id":142141,"depth":241,"text":142142},{"id":142207,"depth":195,"text":142208},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139903,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142312,"title":142313,"body":142314,"description":246,"extension":247,"meta":142422,"navigation":249,"path":142423,"seo":142424,"stem":142425,"__hash__":142426},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142315,"toc":142417},[142316,142319,142323,142326,142329,142338,142347,142351,142356,142363,142381,142384,142387,142390,142393,142396,142399,142402,142405,142408,142411,142414],[10,142317,142313],{"id":142318},"_17-web服务器与网站发布",[14,142320,142322],{"id":142321},"_171-web服务器","17.1 Web服务器",[24,142324,142325],{},"把自己网站上传到服务器上，可以让其他人访问",[19,142327],{"style":21,"src":142328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[24,142330,142331,142334,142335],{},[469,142332,142333],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[469,142336,142337],{},"Web 服务器等",[24,142339,142340,142341,101202,142344,25930],{},"根据服务器在网络中所在的位置不同，又可分为 ",[469,142342,142343],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[469,142345,142346],{},"远程服务器",[48,142348,142350],{"id":142349},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[24,142352,142353],{},[469,142354,142355],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[24,142357,142358,142359],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[558,142360,142361],{"href":142361,"rel":142362},"http:\u002F\u002Ffree.3v.do\u002F",[24054],[67,142364,142365,142368,142371,142378],{},[70,142366,142367],{},"去免费空间网站注册账号。",[70,142369,142370],{},"记录下主机名、用户名、密码、域名。",[70,142372,142373,142374,142377],{},"利用 ",[94,142375,142376],{},"utftp"," 软件 上传网站到远程服务器",[70,142379,142380],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[24,142382,142383],{},"使用软件上传，对上传软件文件进行解压",[19,142385],{"style":21,"src":142386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[19,142388],{"style":21,"src":142389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[24,142391,142392],{},"输入刚刚申请的服务器账号信息：",[19,142394],{"style":21,"src":142395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[19,142397],{"style":21,"src":142398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[19,142400],{"style":21,"src":142401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[19,142403],{"style":21,"src":142404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[24,142406,142407],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[19,142409],{"style":21,"src":142410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[24,142412,142413],{},"浏览器输入域名即可访问",[24,142415,142416],{},"首页一定必须是index",{"title":92,"searchDepth":195,"depth":195,"links":142418},[142419],{"id":142321,"depth":195,"text":142322,"children":142420},[142421],{"id":142349,"depth":241,"text":142350},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142313,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142428,"title":142429,"body":142430,"description":246,"extension":247,"meta":143357,"navigation":249,"path":143358,"seo":143359,"stem":143360,"__hash__":143361},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142431,"toc":143340},[142432,142435,142439,142442,142445,142456,142459,142463,142467,142472,142475,142478,142481,142484,142488,142514,142518,142522,142525,142528,142532,142565,142569,142572,142575,142639,142643,142647,142650,142653,142656,142660,142705,142709,142712,142742,142746,142750,142753,142756,142760,142763,142832,142835,142943,142945,142951,142955,142958,142961,143057,143060,143064,143088,143092,143095,143099,143102,143106,143109,143112,143115,143118,143122,143125,143128,143132,143136,143139,143142,143145,143148,143152,143155,143159,143162,143165,143210,143214,143218,143221,143224,143227,143259,143263,143266,143300,143304,143307,143337],[10,142433,142429],{"id":142434},"_18-2d动画与3d转换",[14,142436,142438],{"id":142437},"_181-css3-2d转换","18.1 CSS3 2D转换",[24,142440,142441],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[24,142443,142444],{},"转换（transform）你可以简单理解为变形",[67,142446,142447,142450,142453],{},[70,142448,142449],{},"移动：translate",[70,142451,142452],{},"旋转：rotate",[70,142454,142455],{},"缩放：scale",[19,142457],{"style":21,"src":142458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[48,142460,142462],{"id":142461},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[160,142464,142466],{"id":142465},"_18111-translate介绍","18.1.1.1 translate介绍",[24,142468,142469,142470],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[469,142471,133390],{},[19,142473],{"style":21,"src":142474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[24,142476,142477],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[24,142479,142480],{},"对于行内元素无效",[24,142482,142483],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[160,142485,142487],{"id":142486},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[87,142489,142490],{"className":182,"code":138920,"language":184,"meta":92,"style":92},[94,142491,142492,142498,142510],{"__ignoreMap":92},[97,142493,142494,142496],{"class":99,"line":100},[97,142495,51795],{"class":107},[97,142497,15762],{"class":103},[97,142499,142500,142502,142504,142506,142508],{"class":99,"line":195},[97,142501,70654],{"class":370},[97,142503,51621],{"class":103},[97,142505,511],{"class":370},[97,142507,51740],{"class":370},[97,142509,1483],{"class":103},[97,142511,142512],{"class":99,"line":241},[97,142513,1757],{"class":103},[48,142515,142517],{"id":142516},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[160,142519,142521],{"id":142520},"_18121-rotate介绍","18.1.2.1 rotate介绍",[24,142523,142524],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[19,142526],{"style":21,"src":142527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[160,142529,142531],{"id":142530},"_18122-旋转效果","18.1.2.2 旋转效果",[87,142533,142535],{"className":182,"code":142534,"language":184,"meta":92,"style":92},"div {\n  transform: rotate(45deg);\n}\n",[94,142536,142537,142543,142561],{"__ignoreMap":92},[97,142538,142539,142541],{"class":99,"line":100},[97,142540,51795],{"class":107},[97,142542,15762],{"class":103},[97,142544,142545,142547,142549,142552,142554,142556,142559],{"class":99,"line":195},[97,142546,136715],{"class":370},[97,142548,51621],{"class":103},[97,142550,142551],{"class":370},"rotate",[97,142553,323],{"class":103},[97,142555,849],{"class":370},[97,142557,142558],{"class":319},"deg",[97,142560,2910],{"class":103},[97,142562,142563],{"class":99,"line":241},[97,142564,1757],{"class":103},[160,142566,142568],{"id":142567},"_18123-三角做法","18.1.2.3 三角做法",[24,142570,142571],{},"该下标当经过最外层大盒子时会实现向上反转",[19,142573],{"style":21,"src":142574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[87,142576,142577],{"className":182,"code":135251,"language":184,"meta":92,"style":92},[94,142578,142579,142583,142589,142599,142609,142625,142635],{"__ignoreMap":92},[97,142580,142581],{"class":99,"line":100},[97,142582,135258],{"class":191},[97,142584,142585,142587],{"class":99,"line":195},[97,142586,135263],{"class":111},[97,142588,15762],{"class":103},[97,142590,142591,142593,142595,142597],{"class":99,"line":241},[97,142592,70752],{"class":370},[97,142594,51621],{"class":103},[97,142596,511],{"class":370},[97,142598,1483],{"class":103},[97,142600,142601,142603,142605,142607],{"class":99,"line":1387},[97,142602,70972],{"class":370},[97,142604,51621],{"class":103},[97,142606,511],{"class":370},[97,142608,1483],{"class":103},[97,142610,142611,142613,142615,142617,142619,142621,142623],{"class":99,"line":1393},[97,142612,71080],{"class":370},[97,142614,51621],{"class":103},[97,142616,766],{"class":370},[97,142618,51676],{"class":319},[97,142620,51705],{"class":370},[97,142622,64175],{"class":370},[97,142624,1483],{"class":103},[97,142626,142627,142629,142631,142633],{"class":99,"line":1407},[97,142628,135306],{"class":370},[97,142630,51621],{"class":103},[97,142632,62553],{"class":370},[97,142634,1483],{"class":103},[97,142636,142637],{"class":99,"line":1413},[97,142638,1757],{"class":103},[48,142640,142642],{"id":142641},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[160,142644,142646],{"id":142645},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[24,142648,142649],{},"设置中心点",[19,142651],{"style":21,"src":142652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[24,142654,142655],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[160,142657,142659],{"id":142658},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[87,142661,142663],{"className":182,"code":142662,"language":184,"meta":92,"style":92},"\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",[94,142664,142665,142670,142676,142691,142696,142701],{"__ignoreMap":92},[97,142666,142667],{"class":99,"line":100},[97,142668,142669],{"class":191},"\u002F* 转换中心点 *\u002F\n",[97,142671,142672,142674],{"class":99,"line":195},[97,142673,51795],{"class":107},[97,142675,15762],{"class":103},[97,142677,142678,142681,142683,142685,142687,142689],{"class":99,"line":241},[97,142679,142680],{"class":370},"  transform-origin",[97,142682,51621],{"class":103},[97,142684,51776],{"class":370},[97,142686,17334],{"class":370},[97,142688,130594],{"class":103},[97,142690,135404],{"class":191},[97,142692,142693],{"class":99,"line":1387},[97,142694,142695],{"class":191},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[97,142697,142698],{"class":99,"line":1393},[97,142699,142700],{"class":191},"  \u002F* transform-origin: left top; *\u002F\n",[97,142702,142703],{"class":99,"line":1407},[97,142704,1757],{"class":103},[160,142706,142708],{"id":142707},"_18133-旋转案例","18.1.3.3 旋转案例",[19,142710],{"style":21,"src":142711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[87,142713,142714],{"className":182,"code":142534,"language":184,"meta":92,"style":92},[94,142715,142716,142722,142738],{"__ignoreMap":92},[97,142717,142718,142720],{"class":99,"line":100},[97,142719,51795],{"class":107},[97,142721,15762],{"class":103},[97,142723,142724,142726,142728,142730,142732,142734,142736],{"class":99,"line":195},[97,142725,136715],{"class":370},[97,142727,51621],{"class":103},[97,142729,142551],{"class":370},[97,142731,323],{"class":103},[97,142733,849],{"class":370},[97,142735,142558],{"class":319},[97,142737,2910],{"class":103},[97,142739,142740],{"class":99,"line":241},[97,142741,1757],{"class":103},[48,142743,142745],{"id":142744},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[160,142747,142749],{"id":142748},"_18141-scale介绍","18.1.4.1 scale介绍",[24,142751,142752],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[19,142754],{"style":21,"src":142755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[160,142757,142759],{"id":142758},"_18142-分页按钮","18.1.4.2 分页按钮",[19,142761],{"style":21,"src":142762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[87,142764,142766],{"className":182,"code":142765,"language":184,"meta":92,"style":92},"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",[94,142767,142768,142774,142790,142794,142798,142803,142809,142823,142828],{"__ignoreMap":92},[97,142769,142770,142772],{"class":99,"line":100},[97,142771,51795],{"class":107},[97,142773,15762],{"class":103},[97,142775,142776,142778,142780,142783,142785,142788],{"class":99,"line":195},[97,142777,136715],{"class":370},[97,142779,51621],{"class":103},[97,142781,142782],{"class":370},"scale",[97,142784,323],{"class":103},[97,142786,142787],{"class":370},"1.2",[97,142789,2910],{"class":103},[97,142791,142792],{"class":99,"line":241},[97,142793,1757],{"class":103},[97,142795,142796],{"class":99,"line":1387},[97,142797,136192],{"class":103},[97,142799,142800],{"class":99,"line":1393},[97,142801,142802],{"class":191},"\u002F* 2D 缩放 *\u002F\n",[97,142804,142805,142807],{"class":99,"line":1407},[97,142806,51795],{"class":107},[97,142808,15762],{"class":103},[97,142810,142811,142813,142815,142817,142819,142821],{"class":99,"line":1413},[97,142812,136715],{"class":370},[97,142814,51621],{"class":103},[97,142816,142782],{"class":370},[97,142818,323],{"class":103},[97,142820,142787],{"class":370},[97,142822,2910],{"class":103},[97,142824,142825],{"class":99,"line":1504},[97,142826,142827],{"class":191},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[97,142829,142830],{"class":99,"line":1510},[97,142831,1757],{"class":103},[24,142833,142834],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[87,142836,142838],{"className":182,"code":142837,"language":184,"meta":92,"style":92},"\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",[94,142839,142840,142845,142855,142876,142897,142901,142906,142912,142939],{"__ignoreMap":92},[97,142841,142842],{"class":99,"line":100},[97,142843,142844],{"class":191},"\u002F* 定义动画 *\u002F\n",[97,142846,142847,142850,142853],{"class":99,"line":195},[97,142848,142849],{"class":319},"@keyframes",[97,142851,142852],{"class":5407}," move",[97,142854,15762],{"class":103},[97,142856,142857,142860,142862,142864,142866,142869,142871,142873],{"class":99,"line":241},[97,142858,142859],{"class":111},"  0%",[97,142861,79991],{"class":103},[97,142863,48324],{"class":370},[97,142865,51621],{"class":103},[97,142867,142868],{"class":370},"translateX",[97,142870,323],{"class":103},[97,142872,511],{"class":370},[97,142874,142875],{"class":103},"); }\n",[97,142877,142878,142881,142883,142885,142887,142889,142891,142893,142895],{"class":99,"line":1387},[97,142879,142880],{"class":111},"  100%",[97,142882,79991],{"class":103},[97,142884,48324],{"class":370},[97,142886,51621],{"class":103},[97,142888,142868],{"class":370},[97,142890,323],{"class":103},[97,142892,631],{"class":370},[97,142894,51676],{"class":319},[97,142896,142875],{"class":103},[97,142898,142899],{"class":99,"line":1393},[97,142900,1757],{"class":103},[97,142902,142903],{"class":99,"line":1407},[97,142904,142905],{"class":191},"\u002F* 调用动画 *\u002F\n",[97,142907,142908,142910],{"class":99,"line":1413},[97,142909,51795],{"class":107},[97,142911,15762],{"class":103},[97,142913,142914,142917,142919,142921,142923,142925,142927,142929,142931,142934,142937],{"class":99,"line":1504},[97,142915,142916],{"class":370},"  animation",[97,142918,51621],{"class":103},[97,142920,135417],{"class":370},[97,142922,25308],{"class":370},[97,142924,1015],{"class":319},[97,142926,78864],{"class":370},[97,142928,4284],{"class":370},[97,142930,1015],{"class":319},[97,142932,142933],{"class":370}," infinite",[97,142935,142936],{"class":370}," alternate",[97,142938,1483],{"class":103},[97,142940,142941],{"class":99,"line":1510},[97,142942,1757],{"class":103},[24,142944,142834],{},[87,142946,142949],{"className":142947,"code":142948,"language":5378},[5376],"\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",[94,142950,142948],{"__ignoreMap":92},[160,142952,142954],{"id":142953},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[24,142956,142957],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[19,142959],{"style":21,"src":142960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[87,142962,142963],{"className":182,"code":142837,"language":184,"meta":92,"style":92},[94,142964,142965,142969,142977,142995,143015,143019,143023,143029,143053],{"__ignoreMap":92},[97,142966,142967],{"class":99,"line":100},[97,142968,142844],{"class":191},[97,142970,142971,142973,142975],{"class":99,"line":195},[97,142972,142849],{"class":319},[97,142974,142852],{"class":5407},[97,142976,15762],{"class":103},[97,142978,142979,142981,142983,142985,142987,142989,142991,142993],{"class":99,"line":241},[97,142980,142859],{"class":111},[97,142982,79991],{"class":103},[97,142984,48324],{"class":370},[97,142986,51621],{"class":103},[97,142988,142868],{"class":370},[97,142990,323],{"class":103},[97,142992,511],{"class":370},[97,142994,142875],{"class":103},[97,142996,142997,142999,143001,143003,143005,143007,143009,143011,143013],{"class":99,"line":1387},[97,142998,142880],{"class":111},[97,143000,79991],{"class":103},[97,143002,48324],{"class":370},[97,143004,51621],{"class":103},[97,143006,142868],{"class":370},[97,143008,323],{"class":103},[97,143010,631],{"class":370},[97,143012,51676],{"class":319},[97,143014,142875],{"class":103},[97,143016,143017],{"class":99,"line":1393},[97,143018,1757],{"class":103},[97,143020,143021],{"class":99,"line":1407},[97,143022,142905],{"class":191},[97,143024,143025,143027],{"class":99,"line":1413},[97,143026,51795],{"class":107},[97,143028,15762],{"class":103},[97,143030,143031,143033,143035,143037,143039,143041,143043,143045,143047,143049,143051],{"class":99,"line":1504},[97,143032,142916],{"class":370},[97,143034,51621],{"class":103},[97,143036,135417],{"class":370},[97,143038,25308],{"class":370},[97,143040,1015],{"class":319},[97,143042,78864],{"class":370},[97,143044,4284],{"class":370},[97,143046,1015],{"class":319},[97,143048,142933],{"class":370},[97,143050,142936],{"class":370},[97,143052,1483],{"class":103},[97,143054,143055],{"class":99,"line":1510},[97,143056,1757],{"class":103},[24,143058,143059],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[48,143061,143063],{"id":143062},"_1823-知识点回顾","18.2.3 知识点回顾",[87,143065,143066],{"className":182,"code":128900,"language":184,"meta":92,"style":92},[94,143067,143068,143074,143084],{"__ignoreMap":92},[97,143069,143070,143072],{"class":99,"line":100},[97,143071,51795],{"class":107},[97,143073,15762],{"class":103},[97,143075,143076,143078,143080,143082],{"class":99,"line":195},[97,143077,128913],{"class":370},[97,143079,51621],{"class":103},[97,143081,61920],{"class":370},[97,143083,1483],{"class":103},[97,143085,143086],{"class":99,"line":241},[97,143087,1757],{"class":103},[14,143089,143091],{"id":143090},"_183-3d-转换","18.3 3D 转换",[24,143093,143094],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[48,143096,143098],{"id":143097},"_1831-坐标轴认识","18.3.1 坐标轴认识",[19,143100],{"style":21,"src":143101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[48,143103,143105],{"id":143104},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[19,143107],{"style":21,"src":143108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[24,143110,143111],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[24,143113,143114],{},"translate3d的效果需要搭配透视perspective来使用",[19,143116],{"style":21,"src":143117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[48,143119,143121],{"id":143120},"_1833-透视-perspective","18.3.3 透视 perspective",[19,143123],{"style":21,"src":143124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[24,143126,143127],{},"透视写在父盒子上，单位为像素",[48,143129,143131],{"id":143130},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[160,143133,143135],{"id":143134},"_18341-分开解释","18.3.4.1 分开解释",[19,143137],{"style":21,"src":143138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[19,143140],{"style":21,"src":143141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[19,143143],{"style":21,"src":143144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[24,143146,143147],{},"总结来说就是左手原则",[160,143149,143151],{"id":143150},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[19,143153],{"style":21,"src":143154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[48,143156,143158],{"id":143157},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[19,143160],{"style":21,"src":143161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[19,143163],{"style":21,"src":143164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[87,143166,143168],{"className":182,"code":143167,"language":184,"meta":92,"style":92},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[94,143169,143170,143176,143189,143206],{"__ignoreMap":92},[97,143171,143172,143174],{"class":99,"line":100},[97,143173,51795],{"class":107},[97,143175,15762],{"class":103},[97,143177,143178,143181,143183,143185,143187],{"class":99,"line":195},[97,143179,143180],{"class":370},"  perspective",[97,143182,51621],{"class":103},[97,143184,65258],{"class":370},[97,143186,51676],{"class":319},[97,143188,1483],{"class":103},[97,143190,143191,143193,143195,143198,143200,143202,143204],{"class":99,"line":241},[97,143192,136715],{"class":370},[97,143194,51621],{"class":103},[97,143196,143197],{"class":370},"rotateX",[97,143199,323],{"class":103},[97,143201,849],{"class":370},[97,143203,142558],{"class":319},[97,143205,2910],{"class":103},[97,143207,143208],{"class":99,"line":1387},[97,143209,1757],{"class":103},[48,143211,143213],{"id":143212},"_1836-案例","18.3.6 案例",[160,143215,143217],{"id":143216},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[19,143219],{"style":21,"src":143220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[19,143222],{"style":21,"src":143223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[19,143225],{"style":21,"src":143226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[87,143228,143230],{"className":182,"code":143229,"language":184,"meta":92,"style":92},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[94,143231,143232,143237,143243,143255],{"__ignoreMap":92},[97,143233,143234],{"class":99,"line":100},[97,143235,143236],{"class":191},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[97,143238,143239,143241],{"class":99,"line":195},[97,143240,133728],{"class":111},[97,143242,15762],{"class":103},[97,143244,143245,143247,143249,143251,143253],{"class":99,"line":241},[97,143246,143180],{"class":370},[97,143248,51621],{"class":103},[97,143250,65258],{"class":370},[97,143252,51676],{"class":319},[97,143254,1483],{"class":103},[97,143256,143257],{"class":99,"line":1387},[97,143258,1757],{"class":103},[160,143260,143262],{"id":143261},"_18362-3d导航栏","18.3.6.2 3D导航栏",[19,143264],{"style":21,"src":143265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[87,143267,143268],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,143269,143270,143274,143288,143292],{"__ignoreMap":92},[97,143271,143272],{"class":99,"line":100},[97,143273,130842],{"class":191},[97,143275,143276,143278,143280,143282,143284,143286],{"class":99,"line":195},[97,143277,104],{"class":103},[97,143279,51795],{"class":107},[97,143281,53670],{"class":111},[97,143283,115],{"class":103},[97,143285,130855],{"class":118},[97,143287,130],{"class":103},[97,143289,143290],{"class":99,"line":241},[97,143291,130862],{"class":103},[97,143293,143294,143296,143298],{"class":99,"line":1387},[97,143295,51969],{"class":103},[97,143297,51795],{"class":107},[97,143299,130],{"class":103},[160,143301,143303],{"id":143302},"_18363-旋转木马","18.3.6.3 旋转木马",[19,143305],{"style":21,"src":143306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[87,143308,143309],{"className":182,"code":142534,"language":184,"meta":92,"style":92},[94,143310,143311,143317,143333],{"__ignoreMap":92},[97,143312,143313,143315],{"class":99,"line":100},[97,143314,51795],{"class":107},[97,143316,15762],{"class":103},[97,143318,143319,143321,143323,143325,143327,143329,143331],{"class":99,"line":195},[97,143320,136715],{"class":370},[97,143322,51621],{"class":103},[97,143324,142551],{"class":370},[97,143326,323],{"class":103},[97,143328,849],{"class":370},[97,143330,142558],{"class":319},[97,143332,2910],{"class":103},[97,143334,143335],{"class":99,"line":241},[97,143336,1757],{"class":103},[231,143338,143339],{},"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":92,"searchDepth":195,"depth":195,"links":143341},[143342,143349],{"id":142437,"depth":195,"text":142438,"children":143343},[143344,143345,143346,143347,143348],{"id":142461,"depth":241,"text":142462},{"id":142516,"depth":241,"text":142517},{"id":142641,"depth":241,"text":142642},{"id":142744,"depth":241,"text":142745},{"id":143062,"depth":241,"text":143063},{"id":143090,"depth":195,"text":143091,"children":143350},[143351,143352,143353,143354,143355,143356],{"id":143097,"depth":241,"text":143098},{"id":143104,"depth":241,"text":143105},{"id":143120,"depth":241,"text":143121},{"id":143130,"depth":241,"text":143131},{"id":143157,"depth":241,"text":143158},{"id":143212,"depth":241,"text":143213},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142429,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":4,"title":5,"body":143363,"description":246,"extension":247,"meta":143506,"navigation":249,"path":250,"seo":143507,"stem":252,"__hash__":253},{"type":7,"value":143364,"toc":143495},[143365,143367,143369,143371,143373,143375,143377,143379,143381,143383,143385,143387,143389,143391,143393,143395,143405,143407,143431,143433,143435,143447,143449,143451,143453,143455,143457,143459,143461,143475,143477,143479,143489,143491,143493],[10,143366,5],{"id":12},[14,143368,17],{"id":16},[19,143370],{"style":21,"src":22},[24,143372,26],{},[14,143374,30],{"id":29},[19,143376],{"style":21,"src":33},[24,143378,36],{},[19,143380],{"style":21,"src":39},[14,143382,43],{"id":42},[24,143384,46],{},[48,143386,51],{"id":50},[19,143388],{"style":21,"src":54},[48,143390,58],{"id":57},[19,143392],{"style":21,"src":61},[48,143394,65],{"id":64},[67,143396,143397,143399,143401,143403],{},[70,143398,72],{},[70,143400,75],{},[70,143402,78],{},[70,143404,81],{},[48,143406,85],{"id":84},[87,143408,143409],{"className":89,"code":90,"language":91,"meta":92,"style":92},[94,143410,143411],{"__ignoreMap":92},[97,143412,143413,143415,143417,143419,143421,143423,143425,143427,143429],{"class":99,"line":100},[97,143414,104],{"class":103},[97,143416,108],{"class":107},[97,143418,112],{"class":111},[97,143420,115],{"class":103},[97,143422,119],{"class":118},[97,143424,122],{"class":111},[97,143426,115],{"class":103},[97,143428,127],{"class":118},[97,143430,130],{"class":103},[19,143432],{"style":21,"src":133},[24,143434,136],{},[138,143436,143437,143439,143441,143443,143445],{},[70,143438,142],{},[70,143440,145],{},[70,143442,148],{},[70,143444,151],{},[70,143446,154],{},[48,143448,158],{"id":157},[160,143450,163],{"id":162},[19,143452],{"style":21,"src":166},[19,143454],{"style":21,"src":169},[160,143456,173],{"id":172},[19,143458],{"style":21,"src":176},[24,143460,179],{},[87,143462,143463],{"className":182,"code":183,"language":184,"meta":92,"style":92},[94,143464,143465,143469],{"__ignoreMap":92},[97,143466,143467],{"class":99,"line":100},[97,143468,192],{"class":191},[97,143470,143471,143473],{"class":99,"line":195},[97,143472,198],{"class":107},[97,143474,201],{"class":103},[160,143476,205],{"id":204},[19,143478],{"style":21,"src":208},[138,143480,143481,143483,143485,143487],{},[70,143482,213],{},[70,143484,216],{},[70,143486,219],{},[70,143488,222],{},[160,143490,226],{"id":225},[19,143492],{"style":21,"src":229},[231,143494,233],{},{"title":92,"searchDepth":195,"depth":195,"links":143496},[143497,143498,143499],{"id":16,"depth":195,"text":17},{"id":29,"depth":195,"text":30},{"id":42,"depth":195,"text":43,"children":143500},[143501,143502,143503,143504,143505],{"id":50,"depth":241,"text":51},{"id":57,"depth":241,"text":58},{"id":64,"depth":241,"text":65},{"id":84,"depth":241,"text":85},{"id":157,"depth":241,"text":158},{},{"title":5,"description":246},{"id":143509,"title":143510,"body":143511,"description":246,"extension":247,"meta":144388,"navigation":249,"path":144389,"seo":144390,"stem":144391,"__hash__":144392},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143512,"toc":144372},[143513,143516,143520,143527,143530,143537,143540,143545,143548,143552,143556,143563,143566,143569,143573,143576,143579,143582,143585,143588,143592,143595,143599,143601,143604,143607,143610,143613,143615,143618,143620,143650,143652,143682,143686,143689,143693,143696,143713,143716,143719,143795,143797,143800,143803,143806,143809,143811,143814,143817,143821,143843,143846,143849,143853,143856,143862,143865,143869,143872,143875,143879,143882,143885,143888,143892,143895,143898,143901,143904,143908,143911,143915,143922,143925,143928,143931,143934,143944,143947,143950,143957,143960,143964,143967,143970,143974,143977,143980,143983,144028,144031,144034,144037,144039,144168,144170,144208,144211,144214,144216,144334,144336,144370],[10,143514,143510],{"id":143515},"_20-移动端布局实战上篇",[14,143517,143519],{"id":143518},"_201-移动端主流方案","20.1 移动端主流方案",[138,143521,143522],{},[70,143523,143524],{},[469,143525,143526],{},"单独移动端页面（主流）",[19,143528],{"style":21,"src":143529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[138,143531,143532],{"start":195},[70,143533,143534],{},[469,143535,143536],{},"响应式兼容PC移动端",[19,143538],{"style":21,"src":143539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[138,143541,143542],{"start":241},[70,143543,143544],{},"两种页面选型布局方式",[19,143546],{"style":21,"src":143547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143549,143551],{"id":143550},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[48,143553,143555],{"id":143554},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[24,143557,143558,143559],{},"官网地址： ",[558,143560,143561],{"href":143561,"rel":143562},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24054],[19,143564],{"style":21,"src":143565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[19,143567],{"style":21,"src":143568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[48,143570,143572],{"id":143571},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[19,143574],{"style":21,"src":143575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[19,143577],{"style":21,"src":143578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[24,143580,143581],{},"去除高亮：",[24,143583,143584],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[24,143586,143587],{},"-webkit- tap-highlight-color: transparent;",[14,143589,143591],{"id":143590},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[19,143593],{"style":21,"src":143594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143596,143598],{"id":143597},"_204-流式布局案例","20.4 流式布局案例",[24,143600,352],{},[24,143602,143603],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[24,143605,143606],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[24,143608,143609],{},"图片格式：",[19,143611],{"style":21,"src":143612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[24,143614,135774],{},[19,143616],{"style":21,"src":143617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[24,143619,140101],{},[87,143621,143622],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,143623,143624],{"__ignoreMap":92},[97,143625,143626,143628,143630,143632,143634,143636,143638,143640,143642,143644,143646,143648],{"class":99,"line":100},[97,143627,104],{"class":103},[97,143629,19],{"class":107},[97,143631,55423],{"class":111},[97,143633,115],{"class":103},[97,143635,134248],{"class":118},[97,143637,55431],{"class":111},[97,143639,115],{"class":103},[97,143641,134255],{"class":118},[97,143643,134258],{"class":111},[97,143645,115],{"class":103},[97,143647,134263],{"class":118},[97,143649,130],{"class":103},[24,143651,140190],{},[87,143653,143654],{"className":89,"code":134233,"language":91,"meta":92,"style":92},[94,143655,143656],{"__ignoreMap":92},[97,143657,143658,143660,143662,143664,143666,143668,143670,143672,143674,143676,143678,143680],{"class":99,"line":100},[97,143659,104],{"class":103},[97,143661,19],{"class":107},[97,143663,55423],{"class":111},[97,143665,115],{"class":103},[97,143667,134248],{"class":118},[97,143669,55431],{"class":111},[97,143671,115],{"class":103},[97,143673,134255],{"class":118},[97,143675,134258],{"class":111},[97,143677,115],{"class":103},[97,143679,134263],{"class":118},[97,143681,130],{"class":103},[14,143683,143685],{"id":143684},"_205-flex布局","20.5 flex布局",[19,143687],{"style":21,"src":143688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[48,143690,143692],{"id":143691},"_2051-布局原理","20.5.1 布局原理",[24,143694,143695],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[67,143697,143698,143701,143704,143707,143710],{},[70,143699,143700],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[70,143702,143703],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[70,143705,143706],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[70,143708,143709],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[70,143711,143712],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[24,143714,143715],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[24,143717,143718],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[87,143720,143722],{"className":182,"code":143721,"language":184,"meta":92,"style":92},"\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",[94,143723,143724,143729,143736,143746,143758,143769,143780,143791],{"__ignoreMap":92},[97,143725,143726],{"class":99,"line":100},[97,143727,143728],{"class":191},"\u002F* Flex 弹性布局 *\u002F\n",[97,143730,143731,143734],{"class":99,"line":195},[97,143732,143733],{"class":111},".container",[97,143735,15762],{"class":103},[97,143737,143738,143740,143742,143744],{"class":99,"line":241},[97,143739,128347],{"class":370},[97,143741,51621],{"class":103},[97,143743,51661],{"class":370},[97,143745,1483],{"class":103},[97,143747,143748,143751,143753,143756],{"class":99,"line":1387},[97,143749,143750],{"class":370},"  flex-direction",[97,143752,51621],{"class":103},[97,143754,143755],{"class":370},"row",[97,143757,1483],{"class":103},[97,143759,143760,143763,143765,143767],{"class":99,"line":1393},[97,143761,143762],{"class":370},"  justify-content",[97,143764,51621],{"class":103},[97,143766,51852],{"class":370},[97,143768,1483],{"class":103},[97,143770,143771,143774,143776,143778],{"class":99,"line":1407},[97,143772,143773],{"class":370},"  align-items",[97,143775,51621],{"class":103},[97,143777,51776],{"class":370},[97,143779,1483],{"class":103},[97,143781,143782,143785,143787,143789],{"class":99,"line":1413},[97,143783,143784],{"class":370},"  flex-wrap",[97,143786,51621],{"class":103},[97,143788,78794],{"class":370},[97,143790,1483],{"class":103},[97,143792,143793],{"class":99,"line":1504},[97,143794,1757],{"class":103},[24,143796,70637],{},[24,143798,143799],{},".form-item .male-label {",[24,143801,143802],{},"   margin-right: 20px;",[24,143804,143805],{},"   display: inline-flex;",[24,143807,143808],{},"   align-items: center;",[24,143810,1265],{},[19,143812],{"style":21,"src":143813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[19,143815],{"style":21,"src":143816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[48,143818,143820],{"id":143819},"_2052-常见父项属性","20.5.2 常见父项属性",[138,143822,143823,143826,143829,143832,143835,143838,143841],{},[70,143824,143825],{},"flex-direction：设置主轴的方向",[70,143827,143828],{},"justify-content：设置主轴上的子元素排列方式",[70,143830,143831],{},"flex-wrap：设置子元素是否换行",[70,143833,143834],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[70,143836,143837],{},"align-items：设置侧轴上的子元素排列方式（单行）",[70,143839,143840],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[70,143842,143825],{},[19,143844],{"style":21,"src":143845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[19,143847],{"style":21,"src":143848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[138,143850,143851],{"start":195},[70,143852,143828],{},[19,143854],{"style":21,"src":143855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[24,143857,143858,143861],{},[94,143859,143860],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[24,143863,143864],{},"跟着主轴走",[138,143866,143867],{"start":241},[70,143868,143831],{},[19,143870],{"style":21,"src":143871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[24,143873,143874],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[138,143876,143877],{"start":1387},[70,143878,143834],{},[19,143880],{"style":21,"src":143881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[24,143883,143884],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[24,143886,143887],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[138,143889,143890],{"start":1393},[70,143891,143837],{},[19,143893],{"style":21,"src":143894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[24,143896,143897],{},"align-items与align-content之间的区别：",[24,143899,143900],{},"单找items，多找content",[19,143902],{"style":21,"src":143903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[138,143905,143906],{"start":1407},[70,143907,143840],{},[19,143909],{"style":21,"src":143910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[48,143912,143914],{"id":143913},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[138,143916,143917],{},[70,143918,143919],{},[469,143920,143921],{},"flex 属性",[24,143923,143924],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[19,143926],{"style":21,"src":143927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[24,143929,143930],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[24,143932,143933],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[138,143935,143936],{"start":195},[70,143937,143938,13986,143941],{},[469,143939,143940],{},"align-self",[469,143942,143943],{},"控制子项自己在侧轴上的排列方式",[19,143945],{"style":21,"src":143946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[24,143948,143949],{},"单个子盒子在父盒子侧轴上的排列方式",[138,143951,143952],{"start":241},[70,143953,143954,143956],{},[469,143955,95481],{}," 属性定义项目的排列顺序",[19,143958],{"style":21,"src":143959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[48,143961,143963],{"id":143962},"_2054-背景线性渐变","20.5.4 背景线性渐变",[19,143965],{"style":21,"src":143966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[24,143968,143969],{},"必须要添加浏览器的私有前缀",[48,143971,143973],{"id":143972},"_2055-携程网首页案例","20.5.5 携程网首页案例",[24,143975,143976],{},"学到最重要的知识：",[24,143978,143979],{},"flex处理这样的布局思路",[19,143981],{"style":21,"src":143982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[87,143984,143986],{"className":182,"code":143985,"language":184,"meta":92,"style":92},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[94,143987,143988,143994,144004,144014,144024],{"__ignoreMap":92},[97,143989,143990,143992],{"class":99,"line":100},[97,143991,143733],{"class":111},[97,143993,15762],{"class":103},[97,143995,143996,143998,144000,144002],{"class":99,"line":195},[97,143997,128347],{"class":370},[97,143999,51621],{"class":103},[97,144001,51661],{"class":370},[97,144003,1483],{"class":103},[97,144005,144006,144008,144010,144012],{"class":99,"line":241},[97,144007,143762],{"class":370},[97,144009,51621],{"class":103},[97,144011,51776],{"class":370},[97,144013,1483],{"class":103},[97,144015,144016,144018,144020,144022],{"class":99,"line":1387},[97,144017,143773],{"class":370},[97,144019,51621],{"class":103},[97,144021,51776],{"class":370},[97,144023,1483],{"class":103},[97,144025,144026],{"class":99,"line":1393},[97,144027,1757],{"class":103},[24,144029,144030],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[24,144032,144033],{},"使用属性选择器",[19,144035],{"style":21,"src":144036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[24,144038,69073],{},[87,144040,144042],{"className":89,"code":144041,"language":91,"meta":92,"style":92},"\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",[94,144043,144044,144049,144063,144068,144088,144093,144112,144117,144136,144141,144160],{"__ignoreMap":92},[97,144045,144046],{"class":99,"line":100},[97,144047,144048],{"class":191},"\u003C!-- 携程网移动端案例结构 -->\n",[97,144050,144051,144053,144055,144057,144059,144061],{"class":99,"line":195},[97,144052,104],{"class":103},[97,144054,51795],{"class":107},[97,144056,53670],{"class":111},[97,144058,115],{"class":103},[97,144060,92507],{"class":118},[97,144062,130],{"class":103},[97,144064,144065],{"class":99,"line":241},[97,144066,144067],{"class":191},"  \u003C!-- 搜索栏 -->\n",[97,144069,144070,144072,144074,144076,144078,144081,144084,144086],{"class":99,"line":1387},[97,144071,52328],{"class":103},[97,144073,51795],{"class":107},[97,144075,53670],{"class":111},[97,144077,115],{"class":103},[97,144079,144080],{"class":118},"\"search-index\"",[97,144082,144083],{"class":103},">...\u003C\u002F",[97,144085,51795],{"class":107},[97,144087,130],{"class":103},[97,144089,144090],{"class":99,"line":1393},[97,144091,144092],{"class":191},"  \u003C!-- 焦点图 -->\n",[97,144094,144095,144097,144099,144101,144103,144106,144108,144110],{"class":99,"line":1407},[97,144096,52328],{"class":103},[97,144098,51795],{"class":107},[97,144100,53670],{"class":111},[97,144102,115],{"class":103},[97,144104,144105],{"class":118},"\"focus\"",[97,144107,144083],{"class":103},[97,144109,51795],{"class":107},[97,144111,130],{"class":103},[97,144113,144114],{"class":99,"line":1413},[97,144115,144116],{"class":191},"  \u003C!-- 主导航 -->\n",[97,144118,144119,144121,144123,144125,144127,144130,144132,144134],{"class":99,"line":1504},[97,144120,52328],{"class":103},[97,144122,51795],{"class":107},[97,144124,53670],{"class":111},[97,144126,115],{"class":103},[97,144128,144129],{"class":118},"\"local-nav\"",[97,144131,144083],{"class":103},[97,144133,51795],{"class":107},[97,144135,130],{"class":103},[97,144137,144138],{"class":99,"line":1510},[97,144139,144140],{"class":191},"  \u003C!-- 子导航 -->\n",[97,144142,144143,144145,144147,144149,144151,144154,144156,144158],{"class":99,"line":1522},[97,144144,52328],{"class":103},[97,144146,51795],{"class":107},[97,144148,53670],{"class":111},[97,144150,115],{"class":103},[97,144152,144153],{"class":118},"\"nav-common\"",[97,144155,144083],{"class":103},[97,144157,51795],{"class":107},[97,144159,130],{"class":103},[97,144161,144162,144164,144166],{"class":99,"line":1804},[97,144163,51969],{"class":103},[97,144165,51795],{"class":107},[97,144167,130],{"class":103},[24,144169,70637],{},[87,144171,144172],{"className":182,"code":137183,"language":184,"meta":92,"style":92},[94,144173,144174,144188,144204],{"__ignoreMap":92},[97,144175,144176,144178,144180,144182,144184,144186],{"class":99,"line":100},[97,144177,54005],{"class":107},[97,144179,1210],{"class":103},[97,144181,103291],{"class":111},[97,144183,115],{"class":319},[97,144185,62883],{"class":118},[97,144187,137200],{"class":103},[97,144189,144190,144192,144194,144196,144198,144200,144202],{"class":99,"line":195},[97,144191,71080],{"class":370},[97,144193,51621],{"class":103},[97,144195,537],{"class":370},[97,144197,51676],{"class":319},[97,144199,51705],{"class":370},[97,144201,130311],{"class":370},[97,144203,1483],{"class":103},[97,144205,144206],{"class":99,"line":241},[97,144207,1757],{"class":103},[24,144209,144210],{},"总代码和效果展示：",[19,144212],{"style":21,"src":144213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[24,144215,69073],{},[87,144217,144218],{"className":89,"code":144041,"language":91,"meta":92,"style":92},[94,144219,144220,144224,144238,144242,144260,144264,144282,144286,144304,144308,144326],{"__ignoreMap":92},[97,144221,144222],{"class":99,"line":100},[97,144223,144048],{"class":191},[97,144225,144226,144228,144230,144232,144234,144236],{"class":99,"line":195},[97,144227,104],{"class":103},[97,144229,51795],{"class":107},[97,144231,53670],{"class":111},[97,144233,115],{"class":103},[97,144235,92507],{"class":118},[97,144237,130],{"class":103},[97,144239,144240],{"class":99,"line":241},[97,144241,144067],{"class":191},[97,144243,144244,144246,144248,144250,144252,144254,144256,144258],{"class":99,"line":1387},[97,144245,52328],{"class":103},[97,144247,51795],{"class":107},[97,144249,53670],{"class":111},[97,144251,115],{"class":103},[97,144253,144080],{"class":118},[97,144255,144083],{"class":103},[97,144257,51795],{"class":107},[97,144259,130],{"class":103},[97,144261,144262],{"class":99,"line":1393},[97,144263,144092],{"class":191},[97,144265,144266,144268,144270,144272,144274,144276,144278,144280],{"class":99,"line":1407},[97,144267,52328],{"class":103},[97,144269,51795],{"class":107},[97,144271,53670],{"class":111},[97,144273,115],{"class":103},[97,144275,144105],{"class":118},[97,144277,144083],{"class":103},[97,144279,51795],{"class":107},[97,144281,130],{"class":103},[97,144283,144284],{"class":99,"line":1413},[97,144285,144116],{"class":191},[97,144287,144288,144290,144292,144294,144296,144298,144300,144302],{"class":99,"line":1504},[97,144289,52328],{"class":103},[97,144291,51795],{"class":107},[97,144293,53670],{"class":111},[97,144295,115],{"class":103},[97,144297,144129],{"class":118},[97,144299,144083],{"class":103},[97,144301,51795],{"class":107},[97,144303,130],{"class":103},[97,144305,144306],{"class":99,"line":1510},[97,144307,144140],{"class":191},[97,144309,144310,144312,144314,144316,144318,144320,144322,144324],{"class":99,"line":1522},[97,144311,52328],{"class":103},[97,144313,51795],{"class":107},[97,144315,53670],{"class":111},[97,144317,115],{"class":103},[97,144319,144153],{"class":118},[97,144321,144083],{"class":103},[97,144323,51795],{"class":107},[97,144325,130],{"class":103},[97,144327,144328,144330,144332],{"class":99,"line":1804},[97,144329,51969],{"class":103},[97,144331,51795],{"class":107},[97,144333,130],{"class":103},[24,144335,70637],{},[87,144337,144338],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,144339,144340,144344,144358,144362],{"__ignoreMap":92},[97,144341,144342],{"class":99,"line":100},[97,144343,130842],{"class":191},[97,144345,144346,144348,144350,144352,144354,144356],{"class":99,"line":195},[97,144347,104],{"class":103},[97,144349,51795],{"class":107},[97,144351,53670],{"class":111},[97,144353,115],{"class":103},[97,144355,130855],{"class":118},[97,144357,130],{"class":103},[97,144359,144360],{"class":99,"line":241},[97,144361,130862],{"class":103},[97,144363,144364,144366,144368],{"class":99,"line":1387},[97,144365,51969],{"class":103},[97,144367,51795],{"class":107},[97,144369,130],{"class":103},[231,144371,138132],{},{"title":92,"searchDepth":195,"depth":195,"links":144373},[144374,144375,144379,144380,144381],{"id":143518,"depth":195,"text":143519},{"id":143550,"depth":195,"text":143551,"children":144376},[144377,144378],{"id":143554,"depth":241,"text":143555},{"id":143571,"depth":241,"text":143572},{"id":143590,"depth":195,"text":143591},{"id":143597,"depth":195,"text":143598},{"id":143684,"depth":195,"text":143685,"children":144382},[144383,144384,144385,144386,144387],{"id":143691,"depth":241,"text":143692},{"id":143819,"depth":241,"text":143820},{"id":143913,"depth":241,"text":143914},{"id":143962,"depth":241,"text":143963},{"id":143972,"depth":241,"text":143973},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143510,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144394,"title":144395,"body":144396,"description":246,"extension":247,"meta":145623,"navigation":249,"path":145624,"seo":145625,"stem":145626,"__hash__":145627},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144397,"toc":145601},[144398,144401,144405,144409,144412,144415,144419,144424,144427,144430,144433,144436,144439,144496,144499,144504,144507,144510,144514,144525,144529,144532,144535,144542,144547,144551,144554,144560,144563,144567,144570,144577,144580,144583,144590,144593,144600,144603,144606,144613,144616,144619,144621,144638,144642,144645,144648,144651,144655,144658,144661,144664,144667,144670,144673,144675,144678,144681,144743,144746,144856,144863,144869,144872,144875,144879,144882,144886,144891,144894,144901,144904,144910,144915,144918,144921,144924,144927,144930,144933,144936,144939,144995,144997,145023,145027,145030,145033,145036,145044,145047,145050,145054,145110,145113,145117,145123,145134,145137,145142,145145,145148,145154,145157,145160,145163,145166,145169,145172,145175,145178,145203,145209,145212,145215,145218,145221,145224,145227,145232,145235,145238,145241,145249,145252,145259,145262,145265,145267,145291,145293,145296,145299,145302,145305,145308,145311,145314,145348,145351,145354,145388,145395,145398,145401,145404,145407,145410,145413,145420,145423,145426,145429,145432,145439,145442,145445,145452,145455,145458,145462,145465,145468,145471,145474,145477,145480,145483,145486,145488,145512,145514,145538,145542,145553,145556,145559,145562,145565,145568,145571,145574,145577,145580,145583,145586,145589,145592,145595,145598],[10,144399,144395],{"id":144400},"_21-移动端布局实战下篇",[14,144402,144404],{"id":144403},"_211-rem适配布局","21.1 rem适配布局",[48,144406,144408],{"id":144407},"_2111-rem单位","21.1.1 rem单位",[19,144410],{"style":21,"src":144411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[24,144413,144414],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[48,144416,144418],{"id":144417},"_2112-媒体查询","21.1.2 媒体查询",[138,144420,144421],{},[70,144422,144423],{},"参数介绍",[19,144425],{"style":21,"src":144426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[19,144428],{"style":21,"src":144429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[19,144431],{"style":21,"src":144432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[19,144434],{"style":21,"src":144435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[19,144437],{"style":21,"src":144438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[87,144440,144442],{"className":182,"code":144441,"language":184,"meta":92,"style":92},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[94,144443,144444,144449,144468,144475,144488,144492],{"__ignoreMap":92},[97,144445,144446],{"class":99,"line":100},[97,144447,144448],{"class":191},"\u002F* 媒体查询 *\u002F\n",[97,144450,144451,144454,144456,144459,144461,144464,144466],{"class":99,"line":195},[97,144452,144453],{"class":319},"@media",[97,144455,1850],{"class":103},[97,144457,144458],{"class":370},"max-width",[97,144460,51621],{"class":103},[97,144462,144463],{"class":370},"768",[97,144465,51676],{"class":319},[97,144467,12633],{"class":103},[97,144469,144470,144473],{"class":99,"line":241},[97,144471,144472],{"class":111},"  .container",[97,144474,15762],{"class":103},[97,144476,144477,144480,144482,144484,144486],{"class":99,"line":1387},[97,144478,144479],{"class":370},"    width",[97,144481,51621],{"class":103},[97,144483,631],{"class":370},[97,144485,648],{"class":319},[97,144487,1483],{"class":103},[97,144489,144490],{"class":99,"line":1393},[97,144491,127527],{"class":103},[97,144493,144494],{"class":99,"line":1407},[97,144495,1757],{"class":103},[24,144497,144498],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[138,144500,144501],{"start":195},[70,144502,144503],{},"引入资源",[19,144505],{"style":21,"src":144506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[24,144508,144509],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[48,144511,144513],{"id":144512},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[67,144515,144516,144519,144522],{},[70,144517,144518],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[70,144520,144521],{},"媒体查询可以根据不同设备宽度来修改样式",[70,144523,144524],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144526,144528],{"id":144527},"_212-less基础","21.2 Less基础",[24,144530,144531],{},"css冗余度较高，不利于复用，没有很好的计算能力",[24,144533,144534],{},"Less可以解决该问题，它是css的扩展语言",[24,144536,144537,144538],{},"Less中文网址： ",[558,144539,144540],{"href":144540,"rel":144541},"http:\u002F\u002Flesscss.cn\u002F",[24054],[24,144543,144544],{},[469,144545,144546],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[48,144548,144550],{"id":144549},"_2121-less安装","21.2.1 less安装",[24,144552,144553],{},"如果使用vscode，则无需进行下方安装步骤",[24,144555,144556],{},[558,144557,144558],{"href":144558,"rel":144559},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24054],[19,144561],{"style":21,"src":144562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[48,144564,144566],{"id":144565},"_2122-less使用","21.2.2 less使用",[24,144568,144569],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[138,144571,144572],{},[70,144573,144574],{},[469,144575,144576],{},"Less 变量",[19,144578],{"style":21,"src":144579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[19,144581],{"style":21,"src":144582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[138,144584,144585],{"start":195},[70,144586,144587],{},[469,144588,144589],{},"Less 编译",[19,144591],{"style":21,"src":144592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[138,144594,144595],{"start":241},[70,144596,144597],{},[469,144598,144599],{},"Less 嵌套",[19,144601],{"style":21,"src":144602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[19,144604],{"style":21,"src":144605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[138,144607,144608],{"start":1387},[70,144609,144610],{},[469,144611,144612],{},"Less 运算",[19,144614],{"style":21,"src":144615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[24,144617,144618],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[24,144620,352],{},[67,144622,144623,144626,144629,144632,144635],{},[70,144624,144625],{},"乘号（*）和除号（\u002F）的写法",[70,144627,144628],{},"运算符中间左右有个空格隔开 1px + 5",[70,144630,144631],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[70,144633,144634],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[70,144636,144637],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144639,144641],{"id":144640},"_213-rem-适配方案","21.3 rem 适配方案",[24,144643,144644],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[24,144646,144647],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[19,144649],{"style":21,"src":144650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[48,144652,144654],{"id":144653},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[24,144656,144657],{},"rem + 媒体查询 + less 技术",[19,144659],{"style":21,"src":144660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[24,144662,144663],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[24,144665,144666],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[19,144668],{"style":21,"src":144669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[24,144671,144672],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[24,144674,14824],{},[19,144676],{"style":21,"src":144677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[24,144679,144680],{},"index.html:",[87,144682,144684],{"className":182,"code":144683,"language":184,"meta":92,"style":92},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[94,144685,144686,144691,144697,144713,144717,144723,144739],{"__ignoreMap":92},[97,144687,144688],{"class":99,"line":100},[97,144689,144690],{"class":191},"\u002F* rem 适配方案 *\u002F\n",[97,144692,144693,144695],{"class":99,"line":195},[97,144694,50825],{"class":107},[97,144696,15762],{"class":103},[97,144698,144699,144701,144703,144706,144708,144710],{"class":99,"line":241},[97,144700,70810],{"class":370},[97,144702,51621],{"class":103},[97,144704,144705],{"class":370},"62.5",[97,144707,648],{"class":319},[97,144709,130594],{"class":103},[97,144711,144712],{"class":191},"\u002F* 1rem = 10px *\u002F\n",[97,144714,144715],{"class":99,"line":1387},[97,144716,1757],{"class":103},[97,144718,144719,144721],{"class":99,"line":1393},[97,144720,130579],{"class":111},[97,144722,15762],{"class":103},[97,144724,144725,144727,144729,144731,144734,144736],{"class":99,"line":1407},[97,144726,70752],{"class":370},[97,144728,51621],{"class":103},[97,144730,766],{"class":370},[97,144732,144733],{"class":319},"rem",[97,144735,130594],{"class":103},[97,144737,144738],{"class":191},"\u002F* 100px *\u002F\n",[97,144740,144741],{"class":99,"line":1413},[97,144742,1757],{"class":103},[24,144744,144745],{},"common.less",[87,144747,144749],{"className":182,"code":144748,"language":184,"meta":92,"style":92},"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",[94,144750,144751,144757,144772,144776,144782,144796,144800,144804,144808,144814,144828,144832,144838,144852],{"__ignoreMap":92},[97,144752,144753,144755],{"class":99,"line":100},[97,144754,50825],{"class":107},[97,144756,15762],{"class":103},[97,144758,144759,144761,144763,144765,144767,144769],{"class":99,"line":195},[97,144760,70810],{"class":370},[97,144762,51621],{"class":103},[97,144764,144705],{"class":370},[97,144766,648],{"class":319},[97,144768,26257],{"class":103},[97,144770,144771],{"class":191},"\u002F* 10px *\u002F\n",[97,144773,144774],{"class":99,"line":241},[97,144775,1757],{"class":103},[97,144777,144778,144780],{"class":99,"line":1387},[97,144779,51795],{"class":107},[97,144781,15762],{"class":103},[97,144783,144784,144786,144788,144790,144792,144794],{"class":99,"line":1393},[97,144785,70752],{"class":370},[97,144787,51621],{"class":103},[97,144789,766],{"class":370},[97,144791,144733],{"class":319},[97,144793,26257],{"class":103},[97,144795,144738],{"class":191},[97,144797,144798],{"class":99,"line":1407},[97,144799,1757],{"class":103},[97,144801,144802],{"class":99,"line":1413},[97,144803,136192],{"class":103},[97,144805,144806],{"class":99,"line":1504},[97,144807,144690],{"class":191},[97,144809,144810,144812],{"class":99,"line":1510},[97,144811,50825],{"class":107},[97,144813,15762],{"class":103},[97,144815,144816,144818,144820,144822,144824,144826],{"class":99,"line":1522},[97,144817,70810],{"class":370},[97,144819,51621],{"class":103},[97,144821,144705],{"class":370},[97,144823,648],{"class":319},[97,144825,130594],{"class":103},[97,144827,144712],{"class":191},[97,144829,144830],{"class":99,"line":1804},[97,144831,1757],{"class":103},[97,144833,144834,144836],{"class":99,"line":1809},[97,144835,130579],{"class":111},[97,144837,15762],{"class":103},[97,144839,144840,144842,144844,144846,144848,144850],{"class":99,"line":1815},[97,144841,70752],{"class":370},[97,144843,51621],{"class":103},[97,144845,766],{"class":370},[97,144847,144733],{"class":319},[97,144849,130594],{"class":103},[97,144851,144738],{"class":191},[97,144853,144854],{"class":99,"line":1820},[97,144855,1757],{"class":103},[24,144857,144858,144859,144862],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23742,144860,144861],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[87,144864,144867],{"className":144865,"code":144866,"language":5378},[5376],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[94,144868,144866],{"__ignoreMap":92},[24,144870,144871],{},"less保存时会自动变成.css文件",[24,144873,144874],{},"好好搞懂上述代码写法",[48,144876,144878],{"id":144877},"_2132-样式导入样式","21.3.2 样式导入样式",[19,144880],{"style":21,"src":144881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[48,144883,144885],{"id":144884},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[138,144887,144888],{},[70,144889,144890],{},"准备工作",[19,144892],{"style":21,"src":144893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[24,144895,144896,144897],{},"github地址：",[558,144898,144899],{"href":144899,"rel":144900},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24054],[24,144902,144903],{},"下载之后，将index.js文件拖到项目中就可以了",[24,144905,144906,144907],{},"js文件引入到index.html中使用的是",[94,144908,144909],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[138,144911,144912],{"start":195},[70,144913,144914],{},"vscode插件",[19,144916],{"style":21,"src":144917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[24,144919,144920],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[24,144922,144923],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[19,144925],{"style":21,"src":144926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[24,144928,144929],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[19,144931],{"style":21,"src":144932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[24,144934,144935],{},"修改成75就可以，alt+z为快捷键",[24,144937,144938],{},"index.css：",[87,144940,144941],{"className":182,"code":144683,"language":184,"meta":92,"style":92},[94,144942,144943,144947,144953,144967,144971,144977,144991],{"__ignoreMap":92},[97,144944,144945],{"class":99,"line":100},[97,144946,144690],{"class":191},[97,144948,144949,144951],{"class":99,"line":195},[97,144950,50825],{"class":107},[97,144952,15762],{"class":103},[97,144954,144955,144957,144959,144961,144963,144965],{"class":99,"line":241},[97,144956,70810],{"class":370},[97,144958,51621],{"class":103},[97,144960,144705],{"class":370},[97,144962,648],{"class":319},[97,144964,130594],{"class":103},[97,144966,144712],{"class":191},[97,144968,144969],{"class":99,"line":1387},[97,144970,1757],{"class":103},[97,144972,144973,144975],{"class":99,"line":1393},[97,144974,130579],{"class":111},[97,144976,15762],{"class":103},[97,144978,144979,144981,144983,144985,144987,144989],{"class":99,"line":1407},[97,144980,70752],{"class":370},[97,144982,51621],{"class":103},[97,144984,766],{"class":370},[97,144986,144733],{"class":319},[97,144988,130594],{"class":103},[97,144990,144738],{"class":191},[97,144992,144993],{"class":99,"line":1413},[97,144994,1757],{"class":103},[24,144996,144680],{},[87,144998,144999],{"className":182,"code":127137,"language":184,"meta":92,"style":92},[94,145000,145001,145007,145019],{"__ignoreMap":92},[97,145002,145003,145005],{"class":99,"line":100},[97,145004,51984],{"class":107},[97,145006,15762],{"class":103},[97,145008,145009,145011,145013,145015,145017],{"class":99,"line":195},[97,145010,70810],{"class":370},[97,145012,51621],{"class":103},[97,145014,921],{"class":370},[97,145016,51676],{"class":319},[97,145018,1483],{"class":103},[97,145020,145021],{"class":99,"line":241},[97,145022,1757],{"class":103},[14,145024,145026],{"id":145025},"_214-响应式开发","21.4 响应式开发",[24,145028,145029],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[19,145031],{"style":21,"src":145032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[24,145034,145035],{},"做法：",[67,145037,145038,145041],{},[70,145039,145040],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[70,145042,145043],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[19,145045],{"style":21,"src":145046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[24,145048,145049],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[48,145051,145053],{"id":145052},"_2141-简单代码示范","21.4.1 简单代码示范",[87,145055,145056],{"className":182,"code":144683,"language":184,"meta":92,"style":92},[94,145057,145058,145062,145068,145082,145086,145092,145106],{"__ignoreMap":92},[97,145059,145060],{"class":99,"line":100},[97,145061,144690],{"class":191},[97,145063,145064,145066],{"class":99,"line":195},[97,145065,50825],{"class":107},[97,145067,15762],{"class":103},[97,145069,145070,145072,145074,145076,145078,145080],{"class":99,"line":241},[97,145071,70810],{"class":370},[97,145073,51621],{"class":103},[97,145075,144705],{"class":370},[97,145077,648],{"class":319},[97,145079,130594],{"class":103},[97,145081,144712],{"class":191},[97,145083,145084],{"class":99,"line":1387},[97,145085,1757],{"class":103},[97,145087,145088,145090],{"class":99,"line":1393},[97,145089,130579],{"class":111},[97,145091,15762],{"class":103},[97,145093,145094,145096,145098,145100,145102,145104],{"class":99,"line":1407},[97,145095,70752],{"class":370},[97,145097,51621],{"class":103},[97,145099,766],{"class":370},[97,145101,144733],{"class":319},[97,145103,130594],{"class":103},[97,145105,144738],{"class":191},[97,145107,145108],{"class":99,"line":1413},[97,145109,1757],{"class":103},[24,145111,145112],{},"父盒子一般命名为container",[48,145114,145116],{"id":145115},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[24,145118,145119,145120],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[469,145121,145122],{},"使得 Web 开发更加快捷",[67,145124,145125],{},[70,145126,145127,145128],{},"官网：",[469,145129,145130],{},[558,145131,145132],{"href":145132,"rel":145133},"http:\u002F\u002Fgetbootstrap.com\u002F",[24054],[24,145135,145136],{},"可以直接去官网拿现成的东西",[138,145138,145139],{},[70,145140,145141],{},"Bootstrap的使用",[24,145143,145144],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[24,145146,145147],{},"Bootstrap 使用四步曲：",[24,145149,145150,145153],{},[469,145151,145152],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[19,145155],{"style":21,"src":145156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[24,145158,145159],{},"打开Bootstrap官网，然后下载",[19,145161],{"style":21,"src":145162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[19,145164],{"style":21,"src":145165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[24,145167,145168],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[24,145170,145171],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[24,145173,145174],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[19,145176],{"style":21,"src":145177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[87,145179,145181],{"className":182,"code":145180,"language":184,"meta":92,"style":92},".center {\n  color: red;\n}\n",[94,145182,145183,145189,145199],{"__ignoreMap":92},[97,145184,145185,145187],{"class":99,"line":100},[97,145186,127024],{"class":111},[97,145188,15762],{"class":103},[97,145190,145191,145193,145195,145197],{"class":99,"line":195},[97,145192,71089],{"class":370},[97,145194,51621],{"class":103},[97,145196,57605],{"class":370},[97,145198,1483],{"class":103},[97,145200,145201],{"class":99,"line":241},[97,145202,1757],{"class":103},[24,145204,145205,145208],{},[94,145206,145207],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[19,145210],{"style":21,"src":145211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[19,145213],{"style":21,"src":145214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[19,145216],{"style":21,"src":145217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[24,145219,145220],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[19,145222],{"style":21,"src":145223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[24,145225,145226],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[138,145228,145229],{"start":195},[70,145230,145231],{},"布局容器",[19,145233],{"style":21,"src":145234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[24,145236,145237],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[24,145239,145240],{},"container-fluid用于移动式布局比较方便",[138,145242,145243],{"start":241},[70,145244,145245,145246],{},"bootstrap ",[469,145247,145248],{},"栅格系统原理",[19,145250],{"style":21,"src":145251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[138,145253,145254],{"start":1387},[70,145255,145256],{},[469,145257,145258],{},"栅格选项参数",[19,145260],{"style":21,"src":145261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[24,145263,145264],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[24,145266,14824],{},[87,145268,145269],{"className":182,"code":145180,"language":184,"meta":92,"style":92},[94,145270,145271,145277,145287],{"__ignoreMap":92},[97,145272,145273,145275],{"class":99,"line":100},[97,145274,127024],{"class":111},[97,145276,15762],{"class":103},[97,145278,145279,145281,145283,145285],{"class":99,"line":195},[97,145280,71089],{"class":370},[97,145282,51621],{"class":103},[97,145284,57605],{"class":370},[97,145286,1483],{"class":103},[97,145288,145289],{"class":99,"line":241},[97,145290,1757],{"class":103},[24,145292,135774],{},[19,145294],{"style":21,"src":145295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[24,145297,145298],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[24,145300,145301],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[24,145303,145304],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[24,145306,145307],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[24,145309,145310],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[24,145312,145313],{},"汇总展示说明：",[87,145315,145316],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,145317,145318,145322,145336,145340],{"__ignoreMap":92},[97,145319,145320],{"class":99,"line":100},[97,145321,130842],{"class":191},[97,145323,145324,145326,145328,145330,145332,145334],{"class":99,"line":195},[97,145325,104],{"class":103},[97,145327,51795],{"class":107},[97,145329,53670],{"class":111},[97,145331,115],{"class":103},[97,145333,130855],{"class":118},[97,145335,130],{"class":103},[97,145337,145338],{"class":99,"line":241},[97,145339,130862],{"class":103},[97,145341,145342,145344,145346],{"class":99,"line":1387},[97,145343,51969],{"class":103},[97,145345,51795],{"class":107},[97,145347,130],{"class":103},[19,145349],{"style":21,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[24,145352,145353],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[87,145355,145356],{"className":89,"code":130835,"language":91,"meta":92,"style":92},[94,145357,145358,145362,145376,145380],{"__ignoreMap":92},[97,145359,145360],{"class":99,"line":100},[97,145361,130842],{"class":191},[97,145363,145364,145366,145368,145370,145372,145374],{"class":99,"line":195},[97,145365,104],{"class":103},[97,145367,51795],{"class":107},[97,145369,53670],{"class":111},[97,145371,115],{"class":103},[97,145373,130855],{"class":118},[97,145375,130],{"class":103},[97,145377,145378],{"class":99,"line":241},[97,145379,130862],{"class":103},[97,145381,145382,145384,145386],{"class":99,"line":1387},[97,145383,51969],{"class":103},[97,145385,51795],{"class":107},[97,145387,130],{"class":103},[138,145389,145390],{"start":1393},[70,145391,145392],{},[469,145393,145394],{},"列嵌套",[19,145396],{"style":21,"src":145397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[24,145399,145400],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[24,145402,145403],{},"没加row内部这样：",[19,145405],{"style":21,"src":145406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[24,145408,145409],{},"加上row之后内部为：",[19,145411],{"style":21,"src":145412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[138,145414,145415],{"start":1407},[70,145416,145417],{},[469,145418,145419],{},"列偏移",[19,145421],{"style":21,"src":145422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[24,145424,145425],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[24,145427,145428],{},"要加偏移量，即偏移份数",[24,145430,145431],{},"偏移的份数=12-两个盒子的份数",[138,145433,145434],{"start":1413},[70,145435,145436],{},[469,145437,145438],{},"列排序",[19,145440],{"style":21,"src":145441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[24,145443,145444],{},"pull拉左；push推右",[138,145446,145447],{"start":1504},[70,145448,145449],{},[469,145450,145451],{},"响应式工具",[19,145453],{"style":21,"src":145454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[24,145456,145457],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[48,145459,145461],{"id":145460},"_2143-响应式小项目","21.4.3 响应式小项目",[24,145463,145464],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[24,145466,145467],{},"ul {",[24,145469,145470],{},"list-style: none;",[24,145472,145473],{},"margin:0;",[24,145475,145476],{},"padding:0; }",[19,145478],{"style":21,"src":145479},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[19,145481],{"style":21,"src":145482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[24,145484,145485],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[24,145487,69073],{},[87,145489,145490],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,145491,145492,145498,145508],{"__ignoreMap":92},[97,145493,145494,145496],{"class":99,"line":100},[97,145495,130579],{"class":111},[97,145497,15762],{"class":103},[97,145499,145500,145502,145504,145506],{"class":99,"line":195},[97,145501,131211],{"class":370},[97,145503,51621],{"class":103},[97,145505,23925],{"class":370},[97,145507,1483],{"class":103},[97,145509,145510],{"class":99,"line":241},[97,145511,1757],{"class":103},[24,145513,70637],{},[87,145515,145516],{"className":182,"code":139401,"language":184,"meta":92,"style":92},[94,145517,145518,145524,145534],{"__ignoreMap":92},[97,145519,145520,145522],{"class":99,"line":100},[97,145521,130579],{"class":111},[97,145523,15762],{"class":103},[97,145525,145526,145528,145530,145532],{"class":99,"line":195},[97,145527,131211],{"class":370},[97,145529,51621],{"class":103},[97,145531,23925],{"class":370},[97,145533,1483],{"class":103},[97,145535,145536],{"class":99,"line":241},[97,145537,1757],{"class":103},[14,145539,145541],{"id":145540},"_215-swiper-插件使用","21.5 swiper 插件使用",[67,145543,145544,145547,145550],{},[70,145545,145546],{},"下载需要的css和js文件html页面中 引入相关文件",[70,145548,145549],{},"官网找到类似案例，复制html结构，css样式 js 语法",[70,145551,145552],{},"根据需求定制修改模块",[19,145554],{"style":21,"src":145555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[24,145557,145558],{},"解压后将这两部分放到项目中",[19,145560],{"style":21,"src":145561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[24,145563,145564],{},"这个插件可以帮助我们实现轮播图效果",[24,145566,145567],{},"用法：",[19,145569],{"style":21,"src":145570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[24,145572,145573],{},"找到自己喜欢的",[19,145575],{"style":21,"src":145576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[24,145578,145579],{},"右键，查看网页源代码",[19,145581],{"style":21,"src":145582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[24,145584,145585],{},"复制人家的结构内容",[24,145587,145588],{},"然后去看API文档：",[19,145590],{"style":21,"src":145591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[24,145593,145594],{},"可以看看如何修改样式",[24,145596,145597],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[231,145599,145600],{},"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":92,"searchDepth":195,"depth":195,"links":145602},[145603,145608,145612,145617,145622],{"id":144403,"depth":195,"text":144404,"children":145604},[145605,145606,145607],{"id":144407,"depth":241,"text":144408},{"id":144417,"depth":241,"text":144418},{"id":144512,"depth":241,"text":144513},{"id":144527,"depth":195,"text":144528,"children":145609},[145610,145611],{"id":144549,"depth":241,"text":144550},{"id":144565,"depth":241,"text":144566},{"id":144640,"depth":195,"text":144641,"children":145613},[145614,145615,145616],{"id":144653,"depth":241,"text":144654},{"id":144877,"depth":241,"text":144878},{"id":144884,"depth":241,"text":144885},{"id":145025,"depth":195,"text":145026,"children":145618},[145619,145620,145621],{"id":145052,"depth":241,"text":145053},{"id":145115,"depth":241,"text":145116},{"id":145460,"depth":241,"text":145461},{"id":145540,"depth":195,"text":145541},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144395,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145629,"title":145630,"body":145631,"description":246,"extension":247,"meta":145851,"navigation":249,"path":145852,"seo":145853,"stem":145854,"__hash__":145855},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145632,"toc":145847},[145633,145636,145640,145643,145658,145663,145666,145671,145706,145711,145723,145728,145741,145746,145763,145768,145788,145793,145811,145814,145817,145820,145823,145827,145830,145833,145836,145839,145842,145845],[10,145634,145630],{"id":145635},"_22-代码提交与新型相对单位",[14,145637,145639],{"id":145638},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[24,145641,145642],{},"法1：",[138,145644,145645,145652,145655],{},[70,145646,145647,145648],{},"登录网站注册：",[558,145649,145650],{"href":145650,"rel":145651},"https:\u002F\u002Fgitee.com\u002F",[24054],[70,145653,145654],{},"码云创建新的仓库",[70,145656,145657],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[67,145659,145660],{},[70,145661,145662],{},"在网站根目录右键-- Git Bash Here",[19,145664],{"style":21,"src":145665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[67,145667,145668],{},[70,145669,145670],{},"如果是第一次利用git提交，请配置好全局选项",[87,145672,145674],{"className":117480,"code":145673,"language":117482,"meta":92,"style":92},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[94,145675,145676,145692],{"__ignoreMap":92},[97,145677,145678,145681,145683,145686,145689],{"class":99,"line":100},[97,145679,145680],{"class":111},"git",[97,145682,119903],{"class":118},[97,145684,145685],{"class":370}," --global",[97,145687,145688],{"class":118}," user.name",[97,145690,145691],{"class":118}," \"你的名字\"\n",[97,145693,145694,145696,145698,145700,145703],{"class":99,"line":195},[97,145695,145680],{"class":111},[97,145697,119903],{"class":118},[97,145699,145685],{"class":370},[97,145701,145702],{"class":118}," user.email",[97,145704,145705],{"class":118}," \"你的邮箱\"\n",[67,145707,145708],{},[70,145709,145710],{},"初始化仓库",[87,145712,145714],{"className":117480,"code":145713,"language":117482,"meta":92,"style":92},"git init\n",[94,145715,145716],{"__ignoreMap":92},[97,145717,145718,145720],{"class":99,"line":100},[97,145719,145680],{"class":111},[97,145721,145722],{"class":118}," init\n",[67,145724,145725],{},[70,145726,145727],{},"把本地文件放到暂存区",[87,145729,145731],{"className":117480,"code":145730,"language":117482,"meta":92,"style":92},"git add .\n",[94,145732,145733],{"__ignoreMap":92},[97,145734,145735,145737,145739],{"class":99,"line":100},[97,145736,145680],{"class":111},[97,145738,5400],{"class":118},[97,145740,28931],{"class":118},[67,145742,145743],{},[70,145744,145745],{},"把本地文件放到本地仓库里面",[87,145747,145749],{"className":117480,"code":145748,"language":117482,"meta":92,"style":92},"git commit -m \"first commit\"\n",[94,145750,145751],{"__ignoreMap":92},[97,145752,145753,145755,145758,145760],{"class":99,"line":100},[97,145754,145680],{"class":111},[97,145756,145757],{"class":118}," commit",[97,145759,101066],{"class":370},[97,145761,145762],{"class":118}," \"first commit\"\n",[67,145764,145765],{},[70,145766,145767],{},"链接远程仓库",[87,145769,145771],{"className":117480,"code":145770,"language":117482,"meta":92,"style":92},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[94,145772,145773],{"__ignoreMap":92},[97,145774,145775,145777,145780,145782,145785],{"class":99,"line":100},[97,145776,145680],{"class":111},[97,145778,145779],{"class":118}," remote",[97,145781,5400],{"class":118},[97,145783,145784],{"class":118}," origin",[97,145786,145787],{"class":118}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[67,145789,145790],{},[70,145791,145792],{},"把本地仓库的文件推送到远程仓库 push",[87,145794,145796],{"className":117480,"code":145795,"language":117482,"meta":92,"style":92},"git push -u origin master\n",[94,145797,145798],{"__ignoreMap":92},[97,145799,145800,145802,145804,145806,145808],{"class":99,"line":100},[97,145801,145680],{"class":111},[97,145803,29206],{"class":118},[97,145805,28480],{"class":370},[97,145807,145784],{"class":118},[97,145809,145810],{"class":118}," master\n",[19,145812],{"style":21,"src":145813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[24,145815,145816],{},"上方方法暂未实现，后边学完git后在整",[24,145818,145819],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[19,145821],{"style":21,"src":145822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145824,145826],{"id":145825},"_222-新型相对单位","22.2 新型相对单位",[19,145828],{"style":21,"src":145829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[19,145831],{"style":21,"src":145832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[24,145834,145835],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[24,145837,145838],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[19,145840],{"style":21,"src":145841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[24,145843,145844],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[231,145846,24147],{},{"title":92,"searchDepth":195,"depth":195,"links":145848},[145849,145850],{"id":145638,"depth":195,"text":145639},{"id":145825,"depth":195,"text":145826},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145630,"description":246},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145857,"title":145858,"body":145859,"description":145863,"extension":247,"meta":145864,"navigation":249,"path":145865,"seo":145866,"stem":145867,"__hash__":145868},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145860,"toc":145861},[],{"title":92,"searchDepth":195,"depth":195,"links":145862},[],"自己正经开始学编程的第一门语言！",{"category":93023},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145858,"description":145863},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145870,"title":145871,"body":145872,"description":246,"extension":247,"meta":147019,"navigation":249,"path":147020,"seo":147021,"stem":147022,"__hash__":147023},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145873,"toc":146995},[145874,145877,145881,145884,145887,145912,145915,145921,145925,145928,145955,145958,145998,146001,146013,146016,146022,146026,146030,146057,146074,146081,146085,146088,146114,146117,146121,146124,146164,146167,146184,146190,146194,146199,146243,146246,146264,146267,146335,146339,146346,146349,146364,146367,146376,146379,146390,146393,146402,146405,146422,146425,146440,146444,146448,146451,146453,146473,146477,146480,146483,146494,146497,146503,146507,146513,146540,146543,146555,146558,146569,146572,146578,146582,146588,146638,146641,146683,146686,146719,146722,146756,146760,146763,146783,146786,146822,146825,146838,146842,146846,146852,146855,146868,146872,146875,146881,146884,146888,146891,146894,146943,146947,146963,146969,146976,146982,146992],[10,145875,145871],{"id":145876},"_1-python环境与第一个程序",[14,145878,145880],{"id":145879},"_11-什么是python","1.1 什么是Python",[24,145882,145883],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[24,145885,145886],{},"理解 Python 时抓住三个关键词：",[138,145888,145889,145892,145895],{},[70,145890,145891],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[70,145893,145894],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[70,145896,145897,145898,532,145901,532,145904,532,145907,532,145909,28575],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[94,145899,145900],{},"os",[94,145902,145903],{},"sys",[94,145905,145906],{},"json",[94,145908,58044],{},[94,145910,145911],{},"datetime",[24,145913,145914],{},"Python 程序的运行链路：",[87,145916,145919],{"className":145917,"code":145918,"language":5378,"meta":92},[5376],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[94,145920,145918],{"__ignoreMap":92},[14,145922,145924],{"id":145923},"_12-python解释器","1.2 Python解释器",[24,145926,145927],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[87,145929,145931],{"className":24011,"code":145930,"language":24013,"meta":92,"style":92},"python --version\npython3 --version\npython\npython3\n",[94,145932,145933,145939,145945,145950],{"__ignoreMap":92},[97,145934,145935,145937],{"class":99,"line":100},[97,145936,30570],{"class":111},[97,145938,26483],{"class":370},[97,145940,145941,145943],{"class":99,"line":195},[97,145942,101063],{"class":111},[97,145944,26483],{"class":370},[97,145946,145947],{"class":99,"line":241},[97,145948,145949],{"class":111},"python\n",[97,145951,145952],{"class":99,"line":1387},[97,145953,145954],{"class":111},"python3\n",[24,145956,145957],{},"进入交互模式后，可以直接输入表达式：",[87,145959,145961],{"className":30568,"code":145960,"language":30570,"meta":92,"style":92},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[94,145962,145963,145974,145979,145993],{"__ignoreMap":92},[97,145964,145965,145968,145970,145972],{"class":99,"line":100},[97,145966,145967],{"class":319},">>>",[97,145969,25308],{"class":370},[97,145971,45756],{"class":319},[97,145973,47913],{"class":370},[97,145975,145976],{"class":99,"line":195},[97,145977,145978],{"class":370},"3\n",[97,145980,145981,145983,145986,145988,145991],{"class":99,"line":241},[97,145982,145967],{"class":319},[97,145984,145985],{"class":370}," print",[97,145987,323],{"class":103},[97,145989,145990],{"class":118},"\"hello python\"",[97,145992,329],{"class":103},[97,145994,145995],{"class":99,"line":1387},[97,145996,145997],{"class":103},"hello python\n",[24,145999,146000],{},"退出交互模式：",[87,146002,146004],{"className":30568,"code":146003,"language":30570,"meta":92,"style":92},"exit()\n",[94,146005,146006],{"__ignoreMap":92},[97,146007,146008,146011],{"class":99,"line":100},[97,146009,146010],{"class":370},"exit",[97,146012,2167],{"class":103},[24,146014,146015],{},"或使用快捷键：",[87,146017,146020],{"className":146018,"code":146019,"language":5378,"meta":92},[5376],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[94,146021,146019],{"__ignoreMap":92},[14,146023,146025],{"id":146024},"_13-安装python","1.3 安装Python",[48,146027,146029],{"id":146028},"_131-windows安装","1.3.1 Windows安装",[138,146031,146032,146039,146042,146048,146054],{},[70,146033,146034,146035],{},"打开 Python 官网：",[558,146036,146037],{"href":146037,"rel":146038},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24054],[70,146040,146041],{},"下载 Windows Installer。",[70,146043,146044,146045,28575],{},"安装时勾选 ",[94,146046,146047],{},"Add Python to PATH",[70,146049,146050,146051,28575],{},"点击 ",[94,146052,146053],{},"Install Now",[70,146055,146056],{},"安装完成后打开命令提示符验证：",[87,146058,146060],{"className":24011,"code":146059,"language":24013,"meta":92,"style":92},"python --version\npip --version\n",[94,146061,146062,146068],{"__ignoreMap":92},[97,146063,146064,146066],{"class":99,"line":100},[97,146065,30570],{"class":111},[97,146067,26483],{"class":370},[97,146069,146070,146072],{"class":99,"line":195},[97,146071,24020],{"class":111},[97,146073,26483],{"class":370},[24,146075,146076,146077,146080],{},"如果提示 ",[94,146078,146079],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[48,146082,146084],{"id":146083},"_132-macos安装","1.3.2 macOS安装",[24,146086,146087],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[87,146089,146091],{"className":24011,"code":146090,"language":24013,"meta":92,"style":92},"brew install python\npython3 --version\npip3 --version\n",[94,146092,146093,146102,146108],{"__ignoreMap":92},[97,146094,146095,146098,146100],{"class":99,"line":100},[97,146096,146097],{"class":111},"brew",[97,146099,24023],{"class":118},[97,146101,124502],{"class":118},[97,146103,146104,146106],{"class":99,"line":195},[97,146105,101063],{"class":111},[97,146107,26483],{"class":370},[97,146109,146110,146112],{"class":99,"line":241},[97,146111,119884],{"class":111},[97,146113,26483],{"class":370},[24,146115,146116],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[48,146118,146120],{"id":146119},"_133-linux安装","1.3.3 Linux安装",[24,146122,146123],{},"Ubuntu\u002FDebian：",[87,146125,146127],{"className":24011,"code":146126,"language":24013,"meta":92,"style":92},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[94,146128,146129,146137,146152,146158],{"__ignoreMap":92},[97,146130,146131,146133,146135],{"class":99,"line":100},[97,146132,24766],{"class":111},[97,146134,117501],{"class":118},[97,146136,26432],{"class":118},[97,146138,146139,146141,146143,146145,146147,146149],{"class":99,"line":195},[97,146140,24766],{"class":111},[97,146142,117501],{"class":118},[97,146144,24023],{"class":118},[97,146146,104587],{"class":118},[97,146148,100982],{"class":118},[97,146150,146151],{"class":118}," python3-venv\n",[97,146153,146154,146156],{"class":99,"line":241},[97,146155,101063],{"class":111},[97,146157,26483],{"class":370},[97,146159,146160,146162],{"class":99,"line":1387},[97,146161,119884],{"class":111},[97,146163,26483],{"class":370},[24,146165,146166],{},"Fedora：",[87,146168,146170],{"className":24011,"code":146169,"language":24013,"meta":92,"style":92},"sudo dnf install python3 python3-pip\n",[94,146171,146172],{"__ignoreMap":92},[97,146173,146174,146176,146178,146180,146182],{"class":99,"line":100},[97,146175,24766],{"class":111},[97,146177,26505],{"class":118},[97,146179,24023],{"class":118},[97,146181,104587],{"class":118},[97,146183,119949],{"class":118},[24,146185,146186,146187,146189],{},"Linux 上通常使用 ",[94,146188,101063],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146191,146193],{"id":146192},"_14-pip包管理器","1.4 pip包管理器",[24,146195,146196,146198],{},[94,146197,24020],{}," 用来安装第三方库。",[87,146200,146202],{"className":24011,"code":146201,"language":24013,"meta":92,"style":92},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[94,146203,146204,146213,146222,146230,146236],{"__ignoreMap":92},[97,146205,146206,146208,146210],{"class":99,"line":100},[97,146207,24020],{"class":111},[97,146209,24023],{"class":118},[97,146211,146212],{"class":118}," requests\n",[97,146214,146215,146217,146220],{"class":99,"line":195},[97,146216,24020],{"class":111},[97,146218,146219],{"class":118}," uninstall",[97,146221,146212],{"class":118},[97,146223,146224,146226,146228],{"class":99,"line":241},[97,146225,24020],{"class":111},[97,146227,117758],{"class":118},[97,146229,146212],{"class":118},[97,146231,146232,146234],{"class":99,"line":1387},[97,146233,24020],{"class":111},[97,146235,119139],{"class":118},[97,146237,146238,146240],{"class":99,"line":1393},[97,146239,24020],{"class":111},[97,146241,146242],{"class":118}," freeze\n",[24,146244,146245],{},"国内网络较慢时可以临时使用镜像：",[87,146247,146249],{"className":24011,"code":146248,"language":24013,"meta":92,"style":92},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[94,146250,146251],{"__ignoreMap":92},[97,146252,146253,146255,146257,146260,146262],{"class":99,"line":100},[97,146254,24020],{"class":111},[97,146256,24023],{"class":118},[97,146258,146259],{"class":118}," requests",[97,146261,26620],{"class":370},[97,146263,119912],{"class":118},[24,146265,146266],{},"常见第三方库：",[457,146268,146269,146278],{},[460,146270,146271],{},[463,146272,146273,146276],{},[466,146274,146275],{},"库",[466,146277,102880],{},[504,146279,146280,146288,146295,146303,146311,146319,146327],{},[463,146281,146282,146285],{},[509,146283,146284],{},"requests",[509,146286,146287],{},"网络请求",[463,146289,146290,146292],{},[509,146291,100810],{},[509,146293,146294],{},"数值计算",[463,146296,146297,146300],{},[509,146298,146299],{},"pandas",[509,146301,146302],{},"表格数据处理",[463,146304,146305,146308],{},[509,146306,146307],{},"matplotlib",[509,146309,146310],{},"绘图",[463,146312,146313,146316],{},[509,146314,146315],{},"pyecharts",[509,146317,146318],{},"ECharts 图表",[463,146320,146321,146324],{},[509,146322,146323],{},"flask",[509,146325,146326],{},"Web 后端",[463,146328,146329,146332],{},[509,146330,146331],{},"pytest",[509,146333,146334],{},"自动化测试",[14,146336,146338],{"id":146337},"_15-虚拟环境","1.5 虚拟环境",[24,146340,146341,146342,146345],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[94,146343,146344],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[24,146347,146348],{},"创建虚拟环境：",[87,146350,146352],{"className":24011,"code":146351,"language":24013,"meta":92,"style":92},"python -m venv .venv\n",[94,146353,146354],{"__ignoreMap":92},[97,146355,146356,146358,146360,146362],{"class":99,"line":100},[97,146357,30570],{"class":111},[97,146359,101066],{"class":370},[97,146361,101069],{"class":118},[97,146363,101072],{"class":118},[24,146365,146366],{},"Windows 激活：",[87,146368,146370],{"className":24011,"code":146369,"language":24013,"meta":92,"style":92},".venv\\Scripts\\activate\n",[94,146371,146372],{"__ignoreMap":92},[97,146373,146374],{"class":99,"line":100},[97,146375,146369],{"class":111},[24,146377,146378],{},"macOS\u002FLinux 激活：",[87,146380,146382],{"className":24011,"code":146381,"language":24013,"meta":92,"style":92},"source .venv\u002Fbin\u002Factivate\n",[94,146383,146384],{"__ignoreMap":92},[97,146385,146386,146388],{"class":99,"line":100},[97,146387,101077],{"class":370},[97,146389,101080],{"class":118},[24,146391,146392],{},"退出虚拟环境：",[87,146394,146396],{"className":24011,"code":146395,"language":24013,"meta":92,"style":92},"deactivate\n",[94,146397,146398],{"__ignoreMap":92},[97,146399,146400],{"class":99,"line":100},[97,146401,146395],{"class":111},[24,146403,146404],{},"保存依赖：",[87,146406,146408],{"className":24011,"code":146407,"language":24013,"meta":92,"style":92},"pip freeze > requirements.txt\n",[94,146409,146410],{"__ignoreMap":92},[97,146411,146412,146414,146417,146419],{"class":99,"line":100},[97,146413,24020],{"class":111},[97,146415,146416],{"class":118}," freeze",[97,146418,26412],{"class":319},[97,146420,146421],{"class":118}," requirements.txt\n",[24,146423,146424],{},"安装依赖：",[87,146426,146428],{"className":24011,"code":146427,"language":24013,"meta":92,"style":92},"pip install -r requirements.txt\n",[94,146429,146430],{"__ignoreMap":92},[97,146431,146432,146434,146436,146438],{"class":99,"line":100},[97,146433,24020],{"class":111},[97,146435,24023],{"class":118},[97,146437,119823],{"class":370},[97,146439,146421],{"class":118},[14,146441,146443],{"id":146442},"_16-开发工具","1.6 开发工具",[48,146445,146447],{"id":146446},"_161-pycharm","1.6.1 PyCharm",[24,146449,146450],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[24,146452,122246],{},[138,146454,146455,146458,146461,146467,146470],{},[70,146456,146457],{},"New Project：创建项目。",[70,146459,146460],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[70,146462,146463,146464,126167],{},"New Python File：创建 ",[94,146465,146466],{},".py",[70,146468,146469],{},"Run：运行当前文件。",[70,146471,146472],{},"Debug：断点调试。",[48,146474,146476],{"id":146475},"_162-vs-code","1.6.2 VS Code",[24,146478,146479],{},"VS Code 轻量，适合后续多语言开发。",[24,146481,146482],{},"建议安装插件：",[138,146484,146485,146488,146491],{},[70,146486,146487],{},"Python。",[70,146489,146490],{},"Pylance。",[70,146492,146493],{},"Jupyter。",[24,146495,146496],{},"选择解释器：",[87,146498,146501],{"className":146499,"code":146500,"language":5378,"meta":92},[5376],"Ctrl + Shift + P -> Python: Select Interpreter\n",[94,146502,146500],{"__ignoreMap":92},[14,146504,146506],{"id":146505},"_17-第一个python程序","1.7 第一个Python程序",[24,146508,146509,146510,24808],{},"创建文件 ",[94,146511,146512],{},"hello.py",[87,146514,146516],{"className":30568,"code":146515,"language":30570,"meta":92,"style":92},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[94,146517,146518,146529],{"__ignoreMap":92},[97,146519,146520,146522,146524,146527],{"class":99,"line":100},[97,146521,30605],{"class":370},[97,146523,323],{"class":103},[97,146525,146526],{"class":118},"\"Hello World\"",[97,146528,329],{"class":103},[97,146530,146531,146533,146535,146538],{"class":99,"line":195},[97,146532,30605],{"class":370},[97,146534,323],{"class":103},[97,146536,146537],{"class":118},"\"你好，Python\"",[97,146539,329],{"class":103},[24,146541,146542],{},"在终端运行：",[87,146544,146546],{"className":24011,"code":146545,"language":24013,"meta":92,"style":92},"python hello.py\n",[94,146547,146548],{"__ignoreMap":92},[97,146549,146550,146552],{"class":99,"line":100},[97,146551,30570],{"class":111},[97,146553,146554],{"class":118}," hello.py\n",[24,146556,146557],{},"或：",[87,146559,146561],{"className":24011,"code":146560,"language":24013,"meta":92,"style":92},"python3 hello.py\n",[94,146562,146563],{"__ignoreMap":92},[97,146564,146565,146567],{"class":99,"line":100},[97,146566,101063],{"class":111},[97,146568,146554],{"class":118},[24,146570,146571],{},"输出：",[87,146573,146576],{"className":146574,"code":146575,"language":5378,"meta":92},[5376],"Hello World\n你好，Python\n",[94,146577,146575],{"__ignoreMap":92},[14,146579,146581],{"id":146580},"_18-print函数","1.8 print函数",[24,146583,146584,146587],{},[94,146585,146586],{},"print()"," 用来输出内容。",[87,146589,146591],{"className":30568,"code":146590,"language":30570,"meta":92,"style":92},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[94,146592,146593,146603,146613,146623],{"__ignoreMap":92},[97,146594,146595,146597,146599,146601],{"class":99,"line":100},[97,146596,30605],{"class":370},[97,146598,323],{"class":103},[97,146600,6035],{"class":118},[97,146602,329],{"class":103},[97,146604,146605,146607,146609,146611],{"class":99,"line":195},[97,146606,30605],{"class":370},[97,146608,323],{"class":103},[97,146610,631],{"class":370},[97,146612,329],{"class":103},[97,146614,146615,146617,146619,146621],{"class":99,"line":241},[97,146616,30605],{"class":370},[97,146618,323],{"class":103},[97,146620,371],{"class":370},[97,146622,329],{"class":103},[97,146624,146625,146627,146629,146632,146634,146636],{"class":99,"line":1387},[97,146626,30605],{"class":370},[97,146628,323],{"class":103},[97,146630,146631],{"class":118},"\"年龄:\"",[97,146633,12626],{"class":103},[97,146635,970],{"class":370},[97,146637,329],{"class":103},[24,146639,146640],{},"多个内容用逗号隔开，默认中间加空格：",[87,146642,146644],{"className":30568,"code":146643,"language":30570,"meta":92,"style":92},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[94,146645,146646,146656,146666],{"__ignoreMap":92},[97,146647,146648,146651,146653],{"class":99,"line":100},[97,146649,146650],{"class":103},"name ",[97,146652,115],{"class":319},[97,146654,146655],{"class":118}," \"张三\"\n",[97,146657,146658,146661,146663],{"class":99,"line":195},[97,146659,146660],{"class":103},"age ",[97,146662,115],{"class":319},[97,146664,146665],{"class":370}," 18\n",[97,146667,146668,146670,146672,146675,146678,146680],{"class":99,"line":241},[97,146669,30605],{"class":370},[97,146671,323],{"class":103},[97,146673,146674],{"class":118},"\"姓名:\"",[97,146676,146677],{"class":103},", name, ",[97,146679,146631],{"class":118},[97,146681,146682],{"class":103},", age)\n",[24,146684,146685],{},"修改分隔符：",[87,146687,146689],{"className":30568,"code":146688,"language":30570,"meta":92,"style":92},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[94,146690,146691],{"__ignoreMap":92},[97,146692,146693,146695,146697,146700,146702,146704,146706,146708,146710,146713,146715,146717],{"class":99,"line":100},[97,146694,30605],{"class":370},[97,146696,323],{"class":103},[97,146698,146699],{"class":118},"\"2024\"",[97,146701,12626],{"class":103},[97,146703,54500],{"class":118},[97,146705,12626],{"class":103},[97,146707,54500],{"class":118},[97,146709,12626],{"class":103},[97,146711,146712],{"class":5407},"sep",[97,146714,115],{"class":319},[97,146716,32673],{"class":118},[97,146718,329],{"class":103},[24,146720,146721],{},"修改结尾符：",[87,146723,146725],{"className":30568,"code":146724,"language":30570,"meta":92,"style":92},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[94,146726,146727,146745],{"__ignoreMap":92},[97,146728,146729,146731,146733,146735,146737,146739,146741,146743],{"class":99,"line":100},[97,146730,30605],{"class":370},[97,146732,323],{"class":103},[97,146734,6035],{"class":118},[97,146736,12626],{"class":103},[97,146738,45991],{"class":5407},[97,146740,115],{"class":319},[97,146742,4550],{"class":118},[97,146744,329],{"class":103},[97,146746,146747,146749,146751,146754],{"class":99,"line":195},[97,146748,30605],{"class":370},[97,146750,323],{"class":103},[97,146752,146753],{"class":118},"\"python\"",[97,146755,329],{"class":103},[14,146757,146759],{"id":146758},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[24,146761,146762],{},"交互运行适合临时验证：",[87,146764,146766],{"className":30568,"code":146765,"language":30570,"meta":92,"style":92},">>> 10 * 3\n30\n",[94,146767,146768,146778],{"__ignoreMap":92},[97,146769,146770,146772,146774,146776],{"class":99,"line":100},[97,146771,145967],{"class":319},[97,146773,2229],{"class":370},[97,146775,6709],{"class":319},[97,146777,120220],{"class":370},[97,146779,146780],{"class":99,"line":195},[97,146781,146782],{"class":370},"30\n",[24,146784,146785],{},"脚本运行适合保存程序：",[87,146787,146789],{"className":30568,"code":146788,"language":30570,"meta":92,"style":92},"price = 8\ncount = 5\nprint(price * count)\n",[94,146790,146791,146801,146810],{"__ignoreMap":92},[97,146792,146793,146796,146798],{"class":99,"line":100},[97,146794,146795],{"class":103},"price ",[97,146797,115],{"class":319},[97,146799,146800],{"class":370}," 8\n",[97,146802,146803,146806,146808],{"class":99,"line":195},[97,146804,146805],{"class":103},"count ",[97,146807,115],{"class":319},[97,146809,54611],{"class":370},[97,146811,146812,146814,146817,146819],{"class":99,"line":241},[97,146813,30605],{"class":370},[97,146815,146816],{"class":103},"(price ",[97,146818,775],{"class":319},[97,146820,146821],{"class":103}," count)\n",[24,146823,146824],{},"实际学习中推荐：",[138,146826,146827,146830,146835],{},[70,146828,146829],{},"临时试一个语法，用交互模式。",[70,146831,146832,146833,126167],{},"写完整练习，用 ",[94,146834,146466],{},[70,146836,146837],{},"写项目，用独立目录和虚拟环境。",[14,146839,146841],{"id":146840},"_110-常见错误","1.10 常见错误",[48,146843,146845],{"id":146844},"_1101-命令找不到","1.10.1 命令找不到",[87,146847,146850],{"className":146848,"code":146849,"language":5378,"meta":92},[5376],"python: command not found\n",[94,146851,146849],{"__ignoreMap":92},[24,146853,146854],{},"原因：",[138,146856,146857,146860,146863],{},[70,146858,146859],{},"没安装 Python。",[70,146861,146862],{},"PATH 没配置。",[70,146864,146865,146866,28575],{},"Linux\u002FmacOS 应该使用 ",[94,146867,101063],{},[48,146869,146871],{"id":146870},"_1102-文件名冲突","1.10.2 文件名冲突",[24,146873,146874],{},"不要把文件命名为：",[87,146876,146879],{"className":146877,"code":146878,"language":5378,"meta":92},[5376],"random.py\njson.py\ntime.py\nrequests.py\n",[94,146880,146878],{"__ignoreMap":92},[24,146882,146883],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[48,146885,146887],{"id":146886},"_1103-中文乱码","1.10.3 中文乱码",[24,146889,146890],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[24,146892,146893],{},"如果读写文件出现乱码，要明确指定编码：",[87,146895,146897],{"className":30568,"code":146896,"language":30570,"meta":92,"style":92},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[94,146898,146899,146933],{"__ignoreMap":92},[97,146900,146901,146903,146906,146908,146911,146913,146916,146918,146921,146923,146926,146928,146930],{"class":99,"line":100},[97,146902,108017],{"class":319},[97,146904,146905],{"class":370}," open",[97,146907,323],{"class":103},[97,146909,146910],{"class":118},"\"data.txt\"",[97,146912,12626],{"class":103},[97,146914,146915],{"class":118},"\"r\"",[97,146917,12626],{"class":103},[97,146919,146920],{"class":5407},"encoding",[97,146922,115],{"class":319},[97,146924,146925],{"class":118},"\"utf-8\"",[97,146927,13905],{"class":103},[97,146929,31573],{"class":319},[97,146931,146932],{"class":103}," f:\n",[97,146934,146935,146938,146940],{"class":99,"line":195},[97,146936,146937],{"class":103},"    content ",[97,146939,115],{"class":319},[97,146941,146942],{"class":103}," f.read()\n",[14,146944,146946],{"id":146945},"_111-本章练习","1.11 本章练习",[138,146948,146949,146952,146958],{},[70,146950,146951],{},"安装 Python，并在终端输出版本号。",[70,146953,146954,146955,146957],{},"新建 ",[94,146956,146512],{},"，输出自己的姓名、年龄、学习目标。",[70,146959,104550,146960,146962],{},[94,146961,146586],{}," 输出下面格式：",[87,146964,146967],{"className":146965,"code":146966,"language":5378,"meta":92},[5376],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[94,146968,146966],{"__ignoreMap":92},[138,146970,146971],{"start":1387},[70,146972,104550,146973,146975],{},[94,146974,146712],{}," 输出日期：",[87,146977,146980],{"className":146978,"code":146979,"language":5378,"meta":92},[5376],"2024-10-10\n",[94,146981,146979],{"__ignoreMap":92},[138,146983,146984],{"start":1393},[70,146985,104550,146986,146988,146989,146991],{},[94,146987,45991],{}," 让两次 ",[94,146990,146586],{}," 输出在同一行。",[231,146993,146994],{},"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":92,"searchDepth":195,"depth":195,"links":146996},[146997,146998,146999,147004,147005,147006,147010,147011,147012,147013,147018],{"id":145879,"depth":195,"text":145880},{"id":145923,"depth":195,"text":145924},{"id":146024,"depth":195,"text":146025,"children":147000},[147001,147002,147003],{"id":146028,"depth":241,"text":146029},{"id":146083,"depth":241,"text":146084},{"id":146119,"depth":241,"text":146120},{"id":146192,"depth":195,"text":146193},{"id":146337,"depth":195,"text":146338},{"id":146442,"depth":195,"text":146443,"children":147007},[147008,147009],{"id":146446,"depth":241,"text":146447},{"id":146475,"depth":241,"text":146476},{"id":146505,"depth":195,"text":146506},{"id":146580,"depth":195,"text":146581},{"id":146758,"depth":195,"text":146759},{"id":146840,"depth":195,"text":146841,"children":147014},[147015,147016,147017],{"id":146844,"depth":241,"text":146845},{"id":146870,"depth":241,"text":146871},{"id":146886,"depth":241,"text":146887},{"id":146945,"depth":195,"text":146946},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145871,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147025,"title":147026,"body":147027,"description":246,"extension":247,"meta":149431,"navigation":249,"path":149432,"seo":149433,"stem":149434,"__hash__":149435},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147028,"toc":149416},[147029,147032,147036,147039,147042,147059,147062,147104,147107,147111,147114,147117,147154,147157,147191,147194,147286,147290,147304,147307,147334,147337,147341,147444,147451,147454,147471,147475,147482,147671,147674,147747,147751,147754,147838,147841,147873,147877,148081,148084,148088,148094,148196,148199,148455,148459,148462,148465,148479,148481,148667,148671,149033,149039,149043,149046,149170,149173,149352,149355,149359,149392,149396,149413],[10,147030,147026],{"id":147031},"_10-json与pyecharts折线图",[14,147033,147035],{"id":147034},"_101-数据可视化","10.1 数据可视化",[24,147037,147038],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[24,147040,147041],{},"常见图表：",[138,147043,147044,147047,147050,147053,147056],{},[70,147045,147046],{},"折线图：看趋势。",[70,147048,147049],{},"柱状图：看分类对比。",[70,147051,147052],{},"饼图：看占比。",[70,147054,147055],{},"地图：看地域分布。",[70,147057,147058],{},"散点图：看两个变量之间的关系。",[24,147060,147061],{},"Python 可视化常用库：",[457,147063,147064,147072],{},[460,147065,147066],{},[463,147067,147068,147070],{},[466,147069,146275],{},[466,147071,23929],{},[504,147073,147074,147081,147089,147096],{},[463,147075,147076,147078],{},[509,147077,146307],{},[509,147079,147080],{},"基础、经典、可定制",[463,147082,147083,147086],{},[509,147084,147085],{},"seaborn",[509,147087,147088],{},"统计图表更美观",[463,147090,147091,147093],{},[509,147092,146315],{},[509,147094,147095],{},"生成交互式网页图表",[463,147097,147098,147101],{},[509,147099,147100],{},"plotly",[509,147102,147103],{},"交互图表能力强",[24,147105,147106],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147108,147110],{"id":147109},"_102-json回顾","10.2 JSON回顾",[24,147112,147113],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[24,147115,147116],{},"Python 字典：",[87,147118,147120],{"className":30568,"code":147119,"language":30570,"meta":92,"style":92},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[94,147121,147122,147130,147141,147150],{"__ignoreMap":92},[97,147123,147124,147126,147128],{"class":99,"line":100},[97,147125,101842],{"class":103},[97,147127,115],{"class":319},[97,147129,15762],{"class":103},[97,147131,147132,147135,147137,147139],{"class":99,"line":195},[97,147133,147134],{"class":118},"    \"name\"",[97,147136,51621],{"class":103},[97,147138,69453],{"class":118},[97,147140,31656],{"class":103},[97,147142,147143,147146,147148],{"class":99,"line":241},[97,147144,147145],{"class":118},"    \"value\"",[97,147147,51621],{"class":103},[97,147149,97642],{"class":370},[97,147151,147152],{"class":99,"line":1387},[97,147153,1757],{"class":103},[24,147155,147156],{},"JSON 字符串：",[87,147158,147161],{"className":147159,"code":147160,"language":145906,"meta":92,"style":92},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[94,147162,147163,147167,147178,147187],{"__ignoreMap":92},[97,147164,147165],{"class":99,"line":100},[97,147166,1738],{"class":103},[97,147168,147169,147172,147174,147176],{"class":99,"line":195},[97,147170,147171],{"class":370},"  \"name\"",[97,147173,51621],{"class":103},[97,147175,69453],{"class":118},[97,147177,31656],{"class":103},[97,147179,147180,147183,147185],{"class":99,"line":241},[97,147181,147182],{"class":370},"  \"value\"",[97,147184,51621],{"class":103},[97,147186,97642],{"class":370},[97,147188,147189],{"class":99,"line":1387},[97,147190,1757],{"class":103},[24,147192,147193],{},"Python 与 JSON 的转换：",[87,147195,147197],{"className":30568,"code":147196,"language":30570,"meta":92,"style":92},"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",[94,147198,147199,147206,147210,147235,147239,147258,147265,147269,147279],{"__ignoreMap":92},[97,147200,147201,147203],{"class":99,"line":100},[97,147202,30582],{"class":319},[97,147204,147205],{"class":103}," json\n",[97,147207,147208],{"class":99,"line":195},[97,147209,2591],{"emptyLinePlaceholder":249},[97,147211,147212,147214,147216,147218,147220,147222,147224,147226,147229,147231,147233],{"class":99,"line":241},[97,147213,101842],{"class":103},[97,147215,115],{"class":319},[97,147217,4639],{"class":103},[97,147219,62863],{"class":118},[97,147221,51621],{"class":103},[97,147223,69453],{"class":118},[97,147225,12626],{"class":103},[97,147227,147228],{"class":118},"\"value\"",[97,147230,51621],{"class":103},[97,147232,631],{"class":370},[97,147234,1757],{"class":103},[97,147236,147237],{"class":99,"line":1387},[97,147238,2591],{"emptyLinePlaceholder":249},[97,147240,147241,147244,147246,147249,147252,147254,147256],{"class":99,"line":1393},[97,147242,147243],{"class":103},"json_text ",[97,147245,115],{"class":319},[97,147247,147248],{"class":103}," json.dumps(data, ",[97,147250,147251],{"class":5407},"ensure_ascii",[97,147253,115],{"class":319},[97,147255,34177],{"class":370},[97,147257,329],{"class":103},[97,147259,147260,147262],{"class":99,"line":1407},[97,147261,30605],{"class":370},[97,147263,147264],{"class":103},"(json_text)\n",[97,147266,147267],{"class":99,"line":1413},[97,147268,2591],{"emptyLinePlaceholder":249},[97,147270,147271,147274,147276],{"class":99,"line":1504},[97,147272,147273],{"class":103},"new_data ",[97,147275,115],{"class":319},[97,147277,147278],{"class":103}," json.loads(json_text)\n",[97,147280,147281,147283],{"class":99,"line":1510},[97,147282,30605],{"class":370},[97,147284,147285],{"class":103},"(new_data)\n",[14,147287,147289],{"id":147288},"_103-安装pyecharts","10.3 安装pyecharts",[87,147291,147293],{"className":24011,"code":147292,"language":24013,"meta":92,"style":92},"pip install pyecharts\n",[94,147294,147295],{"__ignoreMap":92},[97,147296,147297,147299,147301],{"class":99,"line":100},[97,147298,24020],{"class":111},[97,147300,24023],{"class":118},[97,147302,147303],{"class":118}," pyecharts\n",[24,147305,147306],{},"验证：",[87,147308,147310],{"className":30568,"code":147309,"language":30570,"meta":92,"style":92},"import pyecharts\n\nprint(pyecharts.__version__)\n",[94,147311,147312,147318,147322],{"__ignoreMap":92},[97,147313,147314,147316],{"class":99,"line":100},[97,147315,30582],{"class":319},[97,147317,147303],{"class":103},[97,147319,147320],{"class":99,"line":195},[97,147321,2591],{"emptyLinePlaceholder":249},[97,147323,147324,147326,147329,147332],{"class":99,"line":241},[97,147325,30605],{"class":370},[97,147327,147328],{"class":103},"(pyecharts.",[97,147330,147331],{"class":370},"__version__",[97,147333,329],{"class":103},[24,147335,147336],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147338,147340],{"id":147339},"_104-第一个折线图","10.4 第一个折线图",[87,147342,147344],{"className":30568,"code":147343,"language":30570,"meta":92,"style":92},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[94,147345,147346,147358,147362,147372,147402,147434],{"__ignoreMap":92},[97,147347,147348,147350,147353,147355],{"class":99,"line":100},[97,147349,30927],{"class":319},[97,147351,147352],{"class":103}," pyecharts.charts ",[97,147354,30582],{"class":319},[97,147356,147357],{"class":103}," Line\n",[97,147359,147360],{"class":99,"line":195},[97,147361,2591],{"emptyLinePlaceholder":249},[97,147363,147364,147367,147369],{"class":99,"line":241},[97,147365,147366],{"class":103},"line ",[97,147368,115],{"class":319},[97,147370,147371],{"class":103}," Line()\n",[97,147373,147374,147377,147380,147382,147385,147387,147390,147392,147395,147397,147400],{"class":99,"line":1387},[97,147375,147376],{"class":103},"line.add_xaxis([",[97,147378,147379],{"class":118},"\"周一\"",[97,147381,12626],{"class":103},[97,147383,147384],{"class":118},"\"周二\"",[97,147386,12626],{"class":103},[97,147388,147389],{"class":118},"\"周三\"",[97,147391,12626],{"class":103},[97,147393,147394],{"class":118},"\"周四\"",[97,147396,12626],{"class":103},[97,147398,147399],{"class":118},"\"周五\"",[97,147401,4848],{"class":103},[97,147403,147404,147407,147410,147412,147414,147416,147418,147420,147422,147424,147427,147429,147432],{"class":99,"line":1393},[97,147405,147406],{"class":103},"line.add_yaxis(",[97,147408,147409],{"class":118},"\"销售额\"",[97,147411,77702],{"class":103},[97,147413,631],{"class":370},[97,147415,12626],{"class":103},[97,147417,1137],{"class":370},[97,147419,12626],{"class":103},[97,147421,1182],{"class":370},[97,147423,12626],{"class":103},[97,147425,147426],{"class":370},"150",[97,147428,12626],{"class":103},[97,147430,147431],{"class":370},"180",[97,147433,4848],{"class":103},[97,147435,147436,147439,147442],{"class":99,"line":1407},[97,147437,147438],{"class":103},"line.render(",[97,147440,147441],{"class":118},"\"line.html\"",[97,147443,329],{"class":103},[24,147445,147446,147447,147450],{},"运行后会生成 ",[94,147448,147449],{},"line.html","，用浏览器打开即可看到图表。",[24,147452,147453],{},"核心步骤：",[138,147455,147456,147459,147462,147465,147468],{},[70,147457,147458],{},"导入图表类。",[70,147460,147461],{},"创建图表对象。",[70,147463,147464],{},"添加 x 轴数据。",[70,147466,147467],{},"添加 y 轴数据。",[70,147469,147470],{},"渲染为 HTML。",[14,147472,147474],{"id":147473},"_105-全局配置","10.5 全局配置",[24,147476,147477,147478,147481],{},"常用配置在 ",[94,147479,147480],{},"pyecharts.options"," 中。",[87,147483,147485],{"className":30568,"code":147484,"language":30570,"meta":92,"style":92},"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",[94,147486,147487,147504,147514,147518,147526,147550,147578,147583,147602,147621,147639,147659,147663],{"__ignoreMap":92},[97,147488,147489,147491,147494,147496,147499,147501],{"class":99,"line":100},[97,147490,30927],{"class":319},[97,147492,147493],{"class":103}," pyecharts ",[97,147495,30582],{"class":319},[97,147497,147498],{"class":103}," options ",[97,147500,31573],{"class":319},[97,147502,147503],{"class":103}," opts\n",[97,147505,147506,147508,147510,147512],{"class":99,"line":195},[97,147507,30927],{"class":319},[97,147509,147352],{"class":103},[97,147511,30582],{"class":319},[97,147513,147357],{"class":103},[97,147515,147516],{"class":99,"line":241},[97,147517,2591],{"emptyLinePlaceholder":249},[97,147519,147520,147522,147524],{"class":99,"line":1387},[97,147521,147366],{"class":103},[97,147523,115],{"class":319},[97,147525,147371],{"class":103},[97,147527,147528,147530,147532,147534,147536,147538,147540,147542,147544,147546,147548],{"class":99,"line":1393},[97,147529,147376],{"class":103},[97,147531,147379],{"class":118},[97,147533,12626],{"class":103},[97,147535,147384],{"class":118},[97,147537,12626],{"class":103},[97,147539,147389],{"class":118},[97,147541,12626],{"class":103},[97,147543,147394],{"class":118},[97,147545,12626],{"class":103},[97,147547,147399],{"class":118},[97,147549,4848],{"class":103},[97,147551,147552,147554,147556,147558,147560,147562,147564,147566,147568,147570,147572,147574,147576],{"class":99,"line":1407},[97,147553,147406],{"class":103},[97,147555,147409],{"class":118},[97,147557,77702],{"class":103},[97,147559,631],{"class":370},[97,147561,12626],{"class":103},[97,147563,1137],{"class":370},[97,147565,12626],{"class":103},[97,147567,1182],{"class":370},[97,147569,12626],{"class":103},[97,147571,147426],{"class":370},[97,147573,12626],{"class":103},[97,147575,147431],{"class":370},[97,147577,4848],{"class":103},[97,147579,147580],{"class":99,"line":1413},[97,147581,147582],{"class":103},"line.set_global_opts(\n",[97,147584,147585,147588,147590,147593,147595,147597,147600],{"class":99,"line":1504},[97,147586,147587],{"class":5407},"    title_opts",[97,147589,115],{"class":319},[97,147591,147592],{"class":103},"opts.TitleOpts(",[97,147594,51591],{"class":5407},[97,147596,115],{"class":319},[97,147598,147599],{"class":118},"\"一周销售额\"",[97,147601,38237],{"class":103},[97,147603,147604,147607,147609,147612,147614,147616,147619],{"class":99,"line":1510},[97,147605,147606],{"class":5407},"    xaxis_opts",[97,147608,115],{"class":319},[97,147610,147611],{"class":103},"opts.AxisOpts(",[97,147613,79994],{"class":5407},[97,147615,115],{"class":319},[97,147617,147618],{"class":118},"\"日期\"",[97,147620,38237],{"class":103},[97,147622,147623,147626,147628,147630,147632,147634,147637],{"class":99,"line":1522},[97,147624,147625],{"class":5407},"    yaxis_opts",[97,147627,115],{"class":319},[97,147629,147611],{"class":103},[97,147631,79994],{"class":5407},[97,147633,115],{"class":319},[97,147635,147636],{"class":118},"\"金额\"",[97,147638,38237],{"class":103},[97,147640,147641,147644,147646,147649,147652,147654,147657],{"class":99,"line":1804},[97,147642,147643],{"class":5407},"    tooltip_opts",[97,147645,115],{"class":319},[97,147647,147648],{"class":103},"opts.TooltipOpts(",[97,147650,147651],{"class":5407},"trigger",[97,147653,115],{"class":319},[97,147655,147656],{"class":118},"\"axis\"",[97,147658,38237],{"class":103},[97,147660,147661],{"class":99,"line":1809},[97,147662,329],{"class":103},[97,147664,147665,147667,147669],{"class":99,"line":1815},[97,147666,147438],{"class":103},[97,147668,147441],{"class":118},[97,147670,329],{"class":103},[24,147672,147673],{},"常见全局配置：",[457,147675,147676,147685],{},[460,147677,147678],{},[463,147679,147680,147683],{},[466,147681,147682],{},"配置",[466,147684,102880],{},[504,147686,147687,147697,147707,147717,147727,147737],{},[463,147688,147689,147694],{},[509,147690,147691],{},[94,147692,147693],{},"TitleOpts",[509,147695,147696],{},"标题",[463,147698,147699,147704],{},[509,147700,147701],{},[94,147702,147703],{},"LegendOpts",[509,147705,147706],{},"图例",[463,147708,147709,147714],{},[509,147710,147711],{},[94,147712,147713],{},"TooltipOpts",[509,147715,147716],{},"提示框",[463,147718,147719,147724],{},[509,147720,147721],{},[94,147722,147723],{},"AxisOpts",[509,147725,147726],{},"坐标轴",[463,147728,147729,147734],{},[509,147730,147731],{},[94,147732,147733],{},"VisualMapOpts",[509,147735,147736],{},"视觉映射",[463,147738,147739,147744],{},[509,147740,147741],{},[94,147742,147743],{},"DataZoomOpts",[509,147745,147746],{},"区域缩放",[14,147748,147750],{"id":147749},"_106-系列配置","10.6 系列配置",[24,147752,147753],{},"系列配置作用于某一组数据。",[87,147755,147757],{"className":30568,"code":147756,"language":30570,"meta":92,"style":92},"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",[94,147758,147759,147764,147775,147804,147815,147834],{"__ignoreMap":92},[97,147760,147761],{"class":99,"line":100},[97,147762,147763],{"class":103},"line.add_yaxis(\n",[97,147765,147766,147769,147771,147773],{"class":99,"line":195},[97,147767,147768],{"class":5407},"    series_name",[97,147770,115],{"class":319},[97,147772,147409],{"class":118},[97,147774,31656],{"class":103},[97,147776,147777,147780,147782,147784,147786,147788,147790,147792,147794,147796,147798,147800,147802],{"class":99,"line":241},[97,147778,147779],{"class":5407},"    y_axis",[97,147781,115],{"class":319},[97,147783,1210],{"class":103},[97,147785,631],{"class":370},[97,147787,12626],{"class":103},[97,147789,1137],{"class":370},[97,147791,12626],{"class":103},[97,147793,1182],{"class":370},[97,147795,12626],{"class":103},[97,147797,147426],{"class":370},[97,147799,12626],{"class":103},[97,147801,147431],{"class":370},[97,147803,88020],{"class":103},[97,147805,147806,147809,147811,147813],{"class":99,"line":1387},[97,147807,147808],{"class":5407},"    is_smooth",[97,147810,115],{"class":319},[97,147812,31666],{"class":370},[97,147814,31656],{"class":103},[97,147816,147817,147820,147822,147825,147828,147830,147832],{"class":99,"line":1393},[97,147818,147819],{"class":5407},"    label_opts",[97,147821,115],{"class":319},[97,147823,147824],{"class":103},"opts.LabelOpts(",[97,147826,147827],{"class":5407},"is_show",[97,147829,115],{"class":319},[97,147831,31666],{"class":370},[97,147833,38237],{"class":103},[97,147835,147836],{"class":99,"line":1407},[97,147837,329],{"class":103},[24,147839,147840],{},"常用参数：",[138,147842,147843,147849,147855,147861,147867],{},[70,147844,147845,147848],{},[94,147846,147847],{},"series_name","：系列名称。",[70,147850,147851,147854],{},[94,147852,147853],{},"y_axis","：y 轴数据。",[70,147856,147857,147860],{},[94,147858,147859],{},"is_smooth","：是否平滑曲线。",[70,147862,147863,147866],{},[94,147864,147865],{},"label_opts","：标签配置。",[70,147868,147869,147872],{},[94,147870,147871],{},"symbol_size","：标记点大小。",[14,147874,147876],{"id":147875},"_107-多条折线","10.7 多条折线",[87,147878,147880],{"className":30568,"code":147879,"language":30570,"meta":92,"style":92},"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",[94,147881,147882,147896,147906,147910,147939,147943,147951,147956,147994,148031,148035,148052,148068,148072],{"__ignoreMap":92},[97,147883,147884,147886,147888,147890,147892,147894],{"class":99,"line":100},[97,147885,30927],{"class":319},[97,147887,147493],{"class":103},[97,147889,30582],{"class":319},[97,147891,147498],{"class":103},[97,147893,31573],{"class":319},[97,147895,147503],{"class":103},[97,147897,147898,147900,147902,147904],{"class":99,"line":195},[97,147899,30927],{"class":319},[97,147901,147352],{"class":103},[97,147903,30582],{"class":319},[97,147905,147357],{"class":103},[97,147907,147908],{"class":99,"line":241},[97,147909,2591],{"emptyLinePlaceholder":249},[97,147911,147912,147915,147917,147919,147921,147923,147925,147927,147929,147931,147933,147935,147937],{"class":99,"line":1387},[97,147913,147914],{"class":103},"dates ",[97,147916,115],{"class":319},[97,147918,52410],{"class":103},[97,147920,147379],{"class":118},[97,147922,12626],{"class":103},[97,147924,147384],{"class":118},[97,147926,12626],{"class":103},[97,147928,147389],{"class":118},[97,147930,12626],{"class":103},[97,147932,147394],{"class":118},[97,147934,12626],{"class":103},[97,147936,147399],{"class":118},[97,147938,33436],{"class":103},[97,147940,147941],{"class":99,"line":1393},[97,147942,2591],{"emptyLinePlaceholder":249},[97,147944,147945,147947,147949],{"class":99,"line":1407},[97,147946,147366],{"class":103},[97,147948,115],{"class":319},[97,147950,147371],{"class":103},[97,147952,147953],{"class":99,"line":1413},[97,147954,147955],{"class":103},"line.add_xaxis(dates)\n",[97,147957,147958,147960,147963,147965,147967,147969,147972,147974,147976,147978,147980,147982,147984,147986,147988,147990,147992],{"class":99,"line":1504},[97,147959,147406],{"class":103},[97,147961,147962],{"class":118},"\"线上销售\"",[97,147964,77702],{"class":103},[97,147966,631],{"class":370},[97,147968,12626],{"class":103},[97,147970,147971],{"class":370},"130",[97,147973,12626],{"class":103},[97,147975,1137],{"class":370},[97,147977,12626],{"class":103},[97,147979,21238],{"class":370},[97,147981,12626],{"class":103},[97,147983,1914],{"class":370},[97,147985,112386],{"class":103},[97,147987,147859],{"class":5407},[97,147989,115],{"class":319},[97,147991,31666],{"class":370},[97,147993,329],{"class":103},[97,147995,147996,147998,148001,148003,148005,148007,148009,148011,148013,148015,148017,148019,148021,148023,148025,148027,148029],{"class":99,"line":1510},[97,147997,147406],{"class":103},[97,147999,148000],{"class":118},"\"线下销售\"",[97,148002,77702],{"class":103},[97,148004,932],{"class":370},[97,148006,12626],{"class":103},[97,148008,1182],{"class":370},[97,148010,12626],{"class":103},[97,148012,631],{"class":370},[97,148014,12626],{"class":103},[97,148016,1137],{"class":370},[97,148018,12626],{"class":103},[97,148020,147426],{"class":370},[97,148022,112386],{"class":103},[97,148024,147859],{"class":5407},[97,148026,115],{"class":319},[97,148028,31666],{"class":370},[97,148030,329],{"class":103},[97,148032,148033],{"class":99,"line":1522},[97,148034,147582],{"class":103},[97,148036,148037,148039,148041,148043,148045,148047,148050],{"class":99,"line":1804},[97,148038,147587],{"class":5407},[97,148040,115],{"class":319},[97,148042,147592],{"class":103},[97,148044,51591],{"class":5407},[97,148046,115],{"class":319},[97,148048,148049],{"class":118},"\"线上线下销售趋势\"",[97,148051,38237],{"class":103},[97,148053,148054,148056,148058,148060,148062,148064,148066],{"class":99,"line":1809},[97,148055,147643],{"class":5407},[97,148057,115],{"class":319},[97,148059,147648],{"class":103},[97,148061,147651],{"class":5407},[97,148063,115],{"class":319},[97,148065,147656],{"class":118},[97,148067,38237],{"class":103},[97,148069,148070],{"class":99,"line":1815},[97,148071,329],{"class":103},[97,148073,148074,148076,148079],{"class":99,"line":1820},[97,148075,147438],{"class":103},[97,148077,148078],{"class":118},"\"sales.html\"",[97,148080,329],{"class":103},[24,148082,148083],{},"多条折线适合比较不同指标或不同地区。",[14,148085,148087],{"id":148086},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[24,148089,148090,148091,24808],{},"假设 ",[94,148092,148093],{},"sales.json",[87,148095,148097],{"className":147159,"code":148096,"language":145906,"meta":92,"style":92},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[94,148098,148099,148104,148136,148164,148192],{"__ignoreMap":92},[97,148100,148101],{"class":99,"line":100},[97,148102,148103],{"class":103},"[\n",[97,148105,148106,148109,148112,148114,148116,148118,148121,148123,148125,148127,148130,148132,148134],{"class":99,"line":195},[97,148107,148108],{"class":103},"  {",[97,148110,148111],{"class":370},"\"date\"",[97,148113,51621],{"class":103},[97,148115,147379],{"class":118},[97,148117,12626],{"class":103},[97,148119,148120],{"class":370},"\"online\"",[97,148122,51621],{"class":103},[97,148124,631],{"class":370},[97,148126,12626],{"class":103},[97,148128,148129],{"class":370},"\"offline\"",[97,148131,51621],{"class":103},[97,148133,932],{"class":370},[97,148135,5121],{"class":103},[97,148137,148138,148140,148142,148144,148146,148148,148150,148152,148154,148156,148158,148160,148162],{"class":99,"line":241},[97,148139,148108],{"class":103},[97,148141,148111],{"class":370},[97,148143,51621],{"class":103},[97,148145,147384],{"class":118},[97,148147,12626],{"class":103},[97,148149,148120],{"class":370},[97,148151,51621],{"class":103},[97,148153,147971],{"class":370},[97,148155,12626],{"class":103},[97,148157,148129],{"class":370},[97,148159,51621],{"class":103},[97,148161,1182],{"class":370},[97,148163,5121],{"class":103},[97,148165,148166,148168,148170,148172,148174,148176,148178,148180,148182,148184,148186,148188,148190],{"class":99,"line":1387},[97,148167,148108],{"class":103},[97,148169,148111],{"class":370},[97,148171,51621],{"class":103},[97,148173,147389],{"class":118},[97,148175,12626],{"class":103},[97,148177,148120],{"class":370},[97,148179,51621],{"class":103},[97,148181,1137],{"class":370},[97,148183,12626],{"class":103},[97,148185,148129],{"class":370},[97,148187,51621],{"class":103},[97,148189,631],{"class":370},[97,148191,1757],{"class":103},[97,148193,148194],{"class":99,"line":1393},[97,148195,33436],{"class":103},[24,148197,148198],{},"读取并绘图：",[87,148200,148202],{"className":30568,"code":148201,"language":30570,"meta":92,"style":92},"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",[94,148203,148204,148210,148224,148234,148238,148270,148283,148287,148295,148304,148313,148317,148329,148338,148347,148356,148360,148368,148372,148389,148406,148410,148427,148443,148447],{"__ignoreMap":92},[97,148205,148206,148208],{"class":99,"line":100},[97,148207,30582],{"class":319},[97,148209,147205],{"class":103},[97,148211,148212,148214,148216,148218,148220,148222],{"class":99,"line":195},[97,148213,30927],{"class":319},[97,148215,147493],{"class":103},[97,148217,30582],{"class":319},[97,148219,147498],{"class":103},[97,148221,31573],{"class":319},[97,148223,147503],{"class":103},[97,148225,148226,148228,148230,148232],{"class":99,"line":241},[97,148227,30927],{"class":319},[97,148229,147352],{"class":103},[97,148231,30582],{"class":319},[97,148233,147357],{"class":103},[97,148235,148236],{"class":99,"line":1387},[97,148237,2591],{"emptyLinePlaceholder":249},[97,148239,148240,148242,148244,148246,148249,148251,148253,148255,148257,148259,148261,148263,148265,148268],{"class":99,"line":1393},[97,148241,108017],{"class":319},[97,148243,146905],{"class":370},[97,148245,323],{"class":103},[97,148247,148248],{"class":118},"\"sales.json\"",[97,148250,12626],{"class":103},[97,148252,146915],{"class":118},[97,148254,12626],{"class":103},[97,148256,146920],{"class":5407},[97,148258,115],{"class":319},[97,148260,146925],{"class":118},[97,148262,13905],{"class":103},[97,148264,31573],{"class":319},[97,148266,148267],{"class":5407}," file",[97,148269,3930],{"class":103},[97,148271,148272,148274,148276,148279,148281],{"class":99,"line":1407},[97,148273,101605],{"class":103},[97,148275,115],{"class":319},[97,148277,148278],{"class":103}," json.load(",[97,148280,45544],{"class":5407},[97,148282,329],{"class":103},[97,148284,148285],{"class":99,"line":1413},[97,148286,2591],{"emptyLinePlaceholder":249},[97,148288,148289,148291,148293],{"class":99,"line":1504},[97,148290,147914],{"class":103},[97,148292,115],{"class":319},[97,148294,52022],{"class":103},[97,148296,148297,148300,148302],{"class":99,"line":1510},[97,148298,148299],{"class":103},"online_sales ",[97,148301,115],{"class":319},[97,148303,52022],{"class":103},[97,148305,148306,148309,148311],{"class":99,"line":1522},[97,148307,148308],{"class":103},"offline_sales ",[97,148310,115],{"class":319},[97,148312,52022],{"class":103},[97,148314,148315],{"class":99,"line":1804},[97,148316,2591],{"emptyLinePlaceholder":249},[97,148318,148319,148321,148324,148326],{"class":99,"line":1809},[97,148320,3216],{"class":319},[97,148322,148323],{"class":103}," item ",[97,148325,26233],{"class":319},[97,148327,148328],{"class":103}," data:\n",[97,148330,148331,148334,148336],{"class":99,"line":1815},[97,148332,148333],{"class":103},"    dates.append(item[",[97,148335,148111],{"class":118},[97,148337,4848],{"class":103},[97,148339,148340,148343,148345],{"class":99,"line":1820},[97,148341,148342],{"class":103},"    online_sales.append(item[",[97,148344,148120],{"class":118},[97,148346,4848],{"class":103},[97,148348,148349,148352,148354],{"class":99,"line":1834},[97,148350,148351],{"class":103},"    offline_sales.append(item[",[97,148353,148129],{"class":118},[97,148355,4848],{"class":103},[97,148357,148358],{"class":99,"line":1839},[97,148359,2591],{"emptyLinePlaceholder":249},[97,148361,148362,148364,148366],{"class":99,"line":1845},[97,148363,147366],{"class":103},[97,148365,115],{"class":319},[97,148367,147371],{"class":103},[97,148369,148370],{"class":99,"line":1866},[97,148371,147955],{"class":103},[97,148373,148374,148376,148378,148381,148383,148385,148387],{"class":99,"line":1871},[97,148375,147406],{"class":103},[97,148377,147962],{"class":118},[97,148379,148380],{"class":103},", online_sales, ",[97,148382,147859],{"class":5407},[97,148384,115],{"class":319},[97,148386,31666],{"class":370},[97,148388,329],{"class":103},[97,148390,148391,148393,148395,148398,148400,148402,148404],{"class":99,"line":1885},[97,148392,147406],{"class":103},[97,148394,148000],{"class":118},[97,148396,148397],{"class":103},", offline_sales, ",[97,148399,147859],{"class":5407},[97,148401,115],{"class":319},[97,148403,31666],{"class":370},[97,148405,329],{"class":103},[97,148407,148408],{"class":99,"line":1890},[97,148409,147582],{"class":103},[97,148411,148412,148414,148416,148418,148420,148422,148425],{"class":99,"line":1919},[97,148413,147587],{"class":5407},[97,148415,115],{"class":319},[97,148417,147592],{"class":103},[97,148419,51591],{"class":5407},[97,148421,115],{"class":319},[97,148423,148424],{"class":118},"\"销售趋势\"",[97,148426,38237],{"class":103},[97,148428,148429,148431,148433,148435,148437,148439,148441],{"class":99,"line":1924},[97,148430,147643],{"class":5407},[97,148432,115],{"class":319},[97,148434,147648],{"class":103},[97,148436,147651],{"class":5407},[97,148438,115],{"class":319},[97,148440,147656],{"class":118},[97,148442,38237],{"class":103},[97,148444,148445],{"class":99,"line":1941},[97,148446,329],{"class":103},[97,148448,148449,148451,148453],{"class":99,"line":1946},[97,148450,147438],{"class":103},[97,148452,148078],{"class":118},[97,148454,329],{"class":103},[14,148456,148458],{"id":148457},"_109-数据清洗","10.9 数据清洗",[24,148460,148461],{},"真实数据经常不整齐，需要清洗。",[24,148463,148464],{},"常见问题：",[138,148466,148467,148470,148473,148476],{},[70,148468,148469],{},"数字是字符串。",[70,148471,148472],{},"字段缺失。",[70,148474,148475],{},"空值。",[70,148477,148478],{},"日期格式不统一。",[24,148480,15325],{},[87,148482,148484],{"className":30568,"code":148483,"language":30570,"meta":92,"style":92},"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",[94,148485,148486,148495,148518,148538,148559,148563,148567,148575,148584,148588,148599,148613,148622,148627,148631,148639,148649,148653,148660],{"__ignoreMap":92},[97,148487,148488,148491,148493],{"class":99,"line":100},[97,148489,148490],{"class":103},"raw_data ",[97,148492,115],{"class":319},[97,148494,55631],{"class":103},[97,148496,148497,148500,148502,148504,148506,148508,148511,148513,148516],{"class":99,"line":195},[97,148498,148499],{"class":103},"    {",[97,148501,148111],{"class":118},[97,148503,51621],{"class":103},[97,148505,147379],{"class":118},[97,148507,12626],{"class":103},[97,148509,148510],{"class":118},"\"sales\"",[97,148512,51621],{"class":103},[97,148514,148515],{"class":118},"\"100\"",[97,148517,5121],{"class":103},[97,148519,148520,148522,148524,148526,148528,148530,148532,148534,148536],{"class":99,"line":241},[97,148521,148499],{"class":103},[97,148523,148111],{"class":118},[97,148525,51621],{"class":103},[97,148527,147384],{"class":118},[97,148529,12626],{"class":103},[97,148531,148510],{"class":118},[97,148533,51621],{"class":103},[97,148535,7843],{"class":118},[97,148537,5121],{"class":103},[97,148539,148540,148542,148544,148546,148548,148550,148552,148554,148557],{"class":99,"line":1387},[97,148541,148499],{"class":103},[97,148543,148111],{"class":118},[97,148545,51621],{"class":103},[97,148547,147389],{"class":118},[97,148549,12626],{"class":103},[97,148551,148510],{"class":118},[97,148553,51621],{"class":103},[97,148555,148556],{"class":118},"\"120\"",[97,148558,5121],{"class":103},[97,148560,148561],{"class":99,"line":1393},[97,148562,33436],{"class":103},[97,148564,148565],{"class":99,"line":1407},[97,148566,2591],{"emptyLinePlaceholder":249},[97,148568,148569,148571,148573],{"class":99,"line":1413},[97,148570,147914],{"class":103},[97,148572,115],{"class":319},[97,148574,52022],{"class":103},[97,148576,148577,148580,148582],{"class":99,"line":1504},[97,148578,148579],{"class":103},"sales ",[97,148581,115],{"class":319},[97,148583,52022],{"class":103},[97,148585,148586],{"class":99,"line":1510},[97,148587,2591],{"emptyLinePlaceholder":249},[97,148589,148590,148592,148594,148596],{"class":99,"line":1522},[97,148591,3216],{"class":319},[97,148593,148323],{"class":103},[97,148595,26233],{"class":319},[97,148597,148598],{"class":103}," raw_data:\n",[97,148600,148601,148604,148606,148609,148611],{"class":99,"line":1804},[97,148602,148603],{"class":103},"    value ",[97,148605,115],{"class":319},[97,148607,148608],{"class":103}," item.get(",[97,148610,148510],{"class":118},[97,148612,329],{"class":103},[97,148614,148615,148617,148619],{"class":99,"line":1809},[97,148616,3292],{"class":319},[97,148618,39120],{"class":319},[97,148620,148621],{"class":103}," value:\n",[97,148623,148624],{"class":99,"line":1815},[97,148625,148626],{"class":319},"        continue\n",[97,148628,148629],{"class":99,"line":1820},[97,148630,2591],{"emptyLinePlaceholder":249},[97,148632,148633,148635,148637],{"class":99,"line":1834},[97,148634,148333],{"class":103},[97,148636,148111],{"class":118},[97,148638,4848],{"class":103},[97,148640,148641,148644,148646],{"class":99,"line":1839},[97,148642,148643],{"class":103},"    sales.append(",[97,148645,326],{"class":370},[97,148647,148648],{"class":103},"(value))\n",[97,148650,148651],{"class":99,"line":1845},[97,148652,2591],{"emptyLinePlaceholder":249},[97,148654,148655,148657],{"class":99,"line":1866},[97,148656,30605],{"class":370},[97,148658,148659],{"class":103},"(dates)\n",[97,148661,148662,148664],{"class":99,"line":1871},[97,148663,30605],{"class":370},[97,148665,148666],{"class":103},"(sales)\n",[14,148668,148670],{"id":148669},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[87,148672,148674],{"className":30568,"code":148673,"language":30570,"meta":92,"style":92},"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",[94,148675,148676,148690,148700,148704,148712,148733,148755,148777,148799,148821,148825,148829,148851,148872,148876,148884,148888,148892,148902,148911,148921,148937,148941,148945,148962,148978,148994,149010,149020,149024],{"__ignoreMap":92},[97,148677,148678,148680,148682,148684,148686,148688],{"class":99,"line":100},[97,148679,30927],{"class":319},[97,148681,147493],{"class":103},[97,148683,30582],{"class":319},[97,148685,147498],{"class":103},[97,148687,31573],{"class":319},[97,148689,147503],{"class":103},[97,148691,148692,148694,148696,148698],{"class":99,"line":195},[97,148693,30927],{"class":319},[97,148695,147352],{"class":103},[97,148697,30582],{"class":319},[97,148699,147357],{"class":103},[97,148701,148702],{"class":99,"line":241},[97,148703,2591],{"emptyLinePlaceholder":249},[97,148705,148706,148708,148710],{"class":99,"line":1387},[97,148707,148579],{"class":103},[97,148709,115],{"class":319},[97,148711,55631],{"class":103},[97,148713,148714,148716,148718,148720,148723,148725,148727,148729,148731],{"class":99,"line":1393},[97,148715,148499],{"class":103},[97,148717,148111],{"class":118},[97,148719,51621],{"class":103},[97,148721,148722],{"class":118},"\"2024-10-01\"",[97,148724,12626],{"class":103},[97,148726,84268],{"class":118},[97,148728,51621],{"class":103},[97,148730,92207],{"class":370},[97,148732,5121],{"class":103},[97,148734,148735,148737,148739,148741,148744,148746,148748,148750,148753],{"class":99,"line":1407},[97,148736,148499],{"class":103},[97,148738,148111],{"class":118},[97,148740,51621],{"class":103},[97,148742,148743],{"class":118},"\"2024-10-02\"",[97,148745,12626],{"class":103},[97,148747,84268],{"class":118},[97,148749,51621],{"class":103},[97,148751,148752],{"class":370},"1800",[97,148754,5121],{"class":103},[97,148756,148757,148759,148761,148763,148766,148768,148770,148772,148775],{"class":99,"line":1413},[97,148758,148499],{"class":103},[97,148760,148111],{"class":118},[97,148762,51621],{"class":103},[97,148764,148765],{"class":118},"\"2024-10-03\"",[97,148767,12626],{"class":103},[97,148769,84268],{"class":118},[97,148771,51621],{"class":103},[97,148773,148774],{"class":370},"1500",[97,148776,5121],{"class":103},[97,148778,148779,148781,148783,148785,148788,148790,148792,148794,148797],{"class":99,"line":1504},[97,148780,148499],{"class":103},[97,148782,148111],{"class":118},[97,148784,51621],{"class":103},[97,148786,148787],{"class":118},"\"2024-10-04\"",[97,148789,12626],{"class":103},[97,148791,84268],{"class":118},[97,148793,51621],{"class":103},[97,148795,148796],{"class":370},"2100",[97,148798,5121],{"class":103},[97,148800,148801,148803,148805,148807,148810,148812,148814,148816,148819],{"class":99,"line":1510},[97,148802,148499],{"class":103},[97,148804,148111],{"class":118},[97,148806,51621],{"class":103},[97,148808,148809],{"class":118},"\"2024-10-05\"",[97,148811,12626],{"class":103},[97,148813,84268],{"class":118},[97,148815,51621],{"class":103},[97,148817,148818],{"class":370},"2600",[97,148820,5121],{"class":103},[97,148822,148823],{"class":99,"line":1522},[97,148824,33436],{"class":103},[97,148826,148827],{"class":99,"line":1804},[97,148828,2591],{"emptyLinePlaceholder":249},[97,148830,148831,148833,148835,148838,148840,148842,148844,148846,148848],{"class":99,"line":1809},[97,148832,147914],{"class":103},[97,148834,115],{"class":319},[97,148836,148837],{"class":103}," [item[",[97,148839,148111],{"class":118},[97,148841,4634],{"class":103},[97,148843,3216],{"class":319},[97,148845,148323],{"class":103},[97,148847,26233],{"class":319},[97,148849,148850],{"class":103}," sales]\n",[97,148852,148853,148856,148858,148860,148862,148864,148866,148868,148870],{"class":99,"line":1815},[97,148854,148855],{"class":103},"amounts ",[97,148857,115],{"class":319},[97,148859,148837],{"class":103},[97,148861,84268],{"class":118},[97,148863,4634],{"class":103},[97,148865,3216],{"class":319},[97,148867,148323],{"class":103},[97,148869,26233],{"class":319},[97,148871,148850],{"class":103},[97,148873,148874],{"class":99,"line":1820},[97,148875,2591],{"emptyLinePlaceholder":249},[97,148877,148878,148880,148882],{"class":99,"line":1834},[97,148879,147366],{"class":103},[97,148881,115],{"class":319},[97,148883,147371],{"class":103},[97,148885,148886],{"class":99,"line":1839},[97,148887,147955],{"class":103},[97,148889,148890],{"class":99,"line":1845},[97,148891,147763],{"class":103},[97,148893,148894,148896,148898,148900],{"class":99,"line":1866},[97,148895,147768],{"class":5407},[97,148897,115],{"class":319},[97,148899,147409],{"class":118},[97,148901,31656],{"class":103},[97,148903,148904,148906,148908],{"class":99,"line":1871},[97,148905,147779],{"class":5407},[97,148907,115],{"class":319},[97,148909,148910],{"class":103},"amounts,\n",[97,148912,148913,148915,148917,148919],{"class":99,"line":1885},[97,148914,147808],{"class":5407},[97,148916,115],{"class":319},[97,148918,31666],{"class":370},[97,148920,31656],{"class":103},[97,148922,148923,148925,148927,148929,148931,148933,148935],{"class":99,"line":1890},[97,148924,147819],{"class":5407},[97,148926,115],{"class":319},[97,148928,147824],{"class":103},[97,148930,147827],{"class":5407},[97,148932,115],{"class":319},[97,148934,31666],{"class":370},[97,148936,38237],{"class":103},[97,148938,148939],{"class":99,"line":1919},[97,148940,329],{"class":103},[97,148942,148943],{"class":99,"line":1924},[97,148944,147582],{"class":103},[97,148946,148947,148949,148951,148953,148955,148957,148960],{"class":99,"line":1941},[97,148948,147587],{"class":5407},[97,148950,115],{"class":319},[97,148952,147592],{"class":103},[97,148954,51591],{"class":5407},[97,148956,115],{"class":319},[97,148958,148959],{"class":118},"\"每日销售额\"",[97,148961,38237],{"class":103},[97,148963,148964,148966,148968,148970,148972,148974,148976],{"class":99,"line":1946},[97,148965,147606],{"class":5407},[97,148967,115],{"class":319},[97,148969,147611],{"class":103},[97,148971,79994],{"class":5407},[97,148973,115],{"class":319},[97,148975,147618],{"class":118},[97,148977,38237],{"class":103},[97,148979,148980,148982,148984,148986,148988,148990,148992],{"class":99,"line":1951},[97,148981,147625],{"class":5407},[97,148983,115],{"class":319},[97,148985,147611],{"class":103},[97,148987,79994],{"class":5407},[97,148989,115],{"class":319},[97,148991,147636],{"class":118},[97,148993,38237],{"class":103},[97,148995,148996,148998,149000,149002,149004,149006,149008],{"class":99,"line":1956},[97,148997,147643],{"class":5407},[97,148999,115],{"class":319},[97,149001,147648],{"class":103},[97,149003,147651],{"class":5407},[97,149005,115],{"class":319},[97,149007,147656],{"class":118},[97,149009,38237],{"class":103},[97,149011,149012,149015,149017],{"class":99,"line":1970},[97,149013,149014],{"class":5407},"    datazoom_opts",[97,149016,115],{"class":319},[97,149018,149019],{"class":103},"[opts.DataZoomOpts()],\n",[97,149021,149022],{"class":99,"line":1975},[97,149023,329],{"class":103},[97,149025,149026,149028,149031],{"class":99,"line":2768},[97,149027,147438],{"class":103},[97,149029,149030],{"class":118},"\"daily_sales.html\"",[97,149032,329],{"class":103},[24,149034,149035,149038],{},[94,149036,149037],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149040,149042],{"id":149041},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[24,149044,149045],{},"如果数据结构如下：",[87,149047,149049],{"className":30568,"code":149048,"language":30570,"meta":92,"style":92},"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",[94,149050,149051,149059,149067,149089,149110,149115,149122,149142,149162,149166],{"__ignoreMap":92},[97,149052,149053,149055,149057],{"class":99,"line":100},[97,149054,101842],{"class":103},[97,149056,115],{"class":319},[97,149058,15762],{"class":103},[97,149060,149061,149064],{"class":99,"line":195},[97,149062,149063],{"class":118},"    \"北京\"",[97,149065,149066],{"class":103},": [\n",[97,149068,149069,149071,149073,149075,149078,149080,149083,149085,149087],{"class":99,"line":241},[97,149070,5108],{"class":103},[97,149072,148111],{"class":118},[97,149074,51621],{"class":103},[97,149076,149077],{"class":118},"\"2024-01-01\"",[97,149079,12626],{"class":103},[97,149081,149082],{"class":118},"\"confirm\"",[97,149084,51621],{"class":103},[97,149086,766],{"class":370},[97,149088,5121],{"class":103},[97,149090,149091,149093,149095,149097,149100,149102,149104,149106,149108],{"class":99,"line":1387},[97,149092,5108],{"class":103},[97,149094,148111],{"class":118},[97,149096,51621],{"class":103},[97,149098,149099],{"class":118},"\"2024-01-02\"",[97,149101,12626],{"class":103},[97,149103,149082],{"class":118},[97,149105,51621],{"class":103},[97,149107,818],{"class":370},[97,149109,5121],{"class":103},[97,149111,149112],{"class":99,"line":1393},[97,149113,149114],{"class":103},"    ],\n",[97,149116,149117,149120],{"class":99,"line":1407},[97,149118,149119],{"class":118},"    \"上海\"",[97,149121,149066],{"class":103},[97,149123,149124,149126,149128,149130,149132,149134,149136,149138,149140],{"class":99,"line":1413},[97,149125,5108],{"class":103},[97,149127,148111],{"class":118},[97,149129,51621],{"class":103},[97,149131,149077],{"class":118},[97,149133,12626],{"class":103},[97,149135,149082],{"class":118},[97,149137,51621],{"class":103},[97,149139,715],{"class":370},[97,149141,5121],{"class":103},[97,149143,149144,149146,149148,149150,149152,149154,149156,149158,149160],{"class":99,"line":1504},[97,149145,5108],{"class":103},[97,149147,148111],{"class":118},[97,149149,51621],{"class":103},[97,149151,149099],{"class":118},[97,149153,12626],{"class":103},[97,149155,149082],{"class":118},[97,149157,51621],{"class":103},[97,149159,843],{"class":370},[97,149161,5121],{"class":103},[97,149163,149164],{"class":99,"line":1510},[97,149165,149114],{"class":103},[97,149167,149168],{"class":99,"line":1522},[97,149169,1757],{"class":103},[24,149171,149172],{},"绘制多地区趋势：",[87,149174,149176],{"className":30568,"code":149175,"language":30570,"meta":92,"style":92},"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",[94,149177,149178,149192,149202,149206,149231,149235,149243,149247,149251,149263,149285,149298,149302,149306,149323,149339,149343],{"__ignoreMap":92},[97,149179,149180,149182,149184,149186,149188,149190],{"class":99,"line":100},[97,149181,30927],{"class":319},[97,149183,147493],{"class":103},[97,149185,30582],{"class":319},[97,149187,147498],{"class":103},[97,149189,31573],{"class":319},[97,149191,147503],{"class":103},[97,149193,149194,149196,149198,149200],{"class":99,"line":195},[97,149195,30927],{"class":319},[97,149197,147352],{"class":103},[97,149199,30582],{"class":319},[97,149201,147357],{"class":103},[97,149203,149204],{"class":99,"line":241},[97,149205,2591],{"emptyLinePlaceholder":249},[97,149207,149208,149210,149212,149214,149216,149218,149220,149222,149224,149227,149229],{"class":99,"line":1387},[97,149209,147914],{"class":103},[97,149211,115],{"class":319},[97,149213,148837],{"class":103},[97,149215,148111],{"class":118},[97,149217,4634],{"class":103},[97,149219,3216],{"class":319},[97,149221,148323],{"class":103},[97,149223,26233],{"class":319},[97,149225,149226],{"class":103}," data[",[97,149228,69453],{"class":118},[97,149230,77711],{"class":103},[97,149232,149233],{"class":99,"line":1393},[97,149234,2591],{"emptyLinePlaceholder":249},[97,149236,149237,149239,149241],{"class":99,"line":1407},[97,149238,147366],{"class":103},[97,149240,115],{"class":319},[97,149242,147371],{"class":103},[97,149244,149245],{"class":99,"line":1413},[97,149246,147955],{"class":103},[97,149248,149249],{"class":99,"line":1504},[97,149250,2591],{"emptyLinePlaceholder":249},[97,149252,149253,149255,149258,149260],{"class":99,"line":1510},[97,149254,3216],{"class":319},[97,149256,149257],{"class":103}," city, records ",[97,149259,26233],{"class":319},[97,149261,149262],{"class":103}," data.items():\n",[97,149264,149265,149268,149270,149272,149274,149276,149278,149280,149282],{"class":99,"line":1522},[97,149266,149267],{"class":103},"    values ",[97,149269,115],{"class":319},[97,149271,148837],{"class":103},[97,149273,149082],{"class":118},[97,149275,4634],{"class":103},[97,149277,3216],{"class":319},[97,149279,148323],{"class":103},[97,149281,26233],{"class":319},[97,149283,149284],{"class":103}," records]\n",[97,149286,149287,149290,149292,149294,149296],{"class":99,"line":1804},[97,149288,149289],{"class":103},"    line.add_yaxis(city, values, ",[97,149291,147859],{"class":5407},[97,149293,115],{"class":319},[97,149295,31666],{"class":370},[97,149297,329],{"class":103},[97,149299,149300],{"class":99,"line":1809},[97,149301,2591],{"emptyLinePlaceholder":249},[97,149303,149304],{"class":99,"line":1815},[97,149305,147582],{"class":103},[97,149307,149308,149310,149312,149314,149316,149318,149321],{"class":99,"line":1820},[97,149309,147587],{"class":5407},[97,149311,115],{"class":319},[97,149313,147592],{"class":103},[97,149315,51591],{"class":5407},[97,149317,115],{"class":319},[97,149319,149320],{"class":118},"\"多地区趋势图\"",[97,149322,38237],{"class":103},[97,149324,149325,149327,149329,149331,149333,149335,149337],{"class":99,"line":1834},[97,149326,147643],{"class":5407},[97,149328,115],{"class":319},[97,149330,147648],{"class":103},[97,149332,147651],{"class":5407},[97,149334,115],{"class":319},[97,149336,147656],{"class":118},[97,149338,38237],{"class":103},[97,149340,149341],{"class":99,"line":1839},[97,149342,329],{"class":103},[97,149344,149345,149347,149350],{"class":99,"line":1845},[97,149346,147438],{"class":103},[97,149348,149349],{"class":118},"\"trend.html\"",[97,149351,329],{"class":103},[24,149353,149354],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149356,149358],{"id":149357},"_1012-易错点","10.12 易错点",[138,149360,149361,149367,149373,149383,149389],{},[70,149362,149363,149366],{},[94,149364,149365],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[70,149368,149369,149372],{},[94,149370,149371],{},"render()"," 生成的是 HTML，不是图片。",[70,149374,149375,149376,149379,149380,28575],{},"JSON 字符串用 ",[94,149377,149378],{},"json.loads()","，JSON 文件用 ",[94,149381,149382],{},"json.load()",[70,149384,149385,149386,28575],{},"中文 JSON 保存时加 ",[94,149387,149388],{},"ensure_ascii=False",[70,149390,149391],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149393,149395],{"id":149394},"_1013-本章练习","10.13 本章练习",[138,149397,149398,149401,149404,149407,149410],{},[70,149399,149400],{},"安装 pyecharts 并生成第一个折线图。",[70,149402,149403],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[70,149405,149406],{},"绘制两条折线，对比线上和线下销售额。",[70,149408,149409],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[70,149411,149412],{},"对含有空值的销售数据进行清洗后再绘图。",[231,149414,149415],{},"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":92,"searchDepth":195,"depth":195,"links":149417},[149418,149419,149420,149421,149422,149423,149424,149425,149426,149427,149428,149429,149430],{"id":147034,"depth":195,"text":147035},{"id":147109,"depth":195,"text":147110},{"id":147288,"depth":195,"text":147289},{"id":147339,"depth":195,"text":147340},{"id":147473,"depth":195,"text":147474},{"id":147749,"depth":195,"text":147750},{"id":147875,"depth":195,"text":147876},{"id":148086,"depth":195,"text":148087},{"id":148457,"depth":195,"text":148458},{"id":148669,"depth":195,"text":148670},{"id":149041,"depth":195,"text":149042},{"id":149357,"depth":195,"text":149358},{"id":149394,"depth":195,"text":149395},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147026,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149437,"title":149438,"body":149439,"description":246,"extension":247,"meta":151799,"navigation":249,"path":151800,"seo":151801,"stem":151802,"__hash__":151803},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149440,"toc":151776},[149441,149444,149448,149451,149454,149530,149533,149624,149627,149631,149634,149678,149691,149695,149698,149765,149768,149772,149775,149859,149867,149871,149876,150017,150020,150031,150037,150043,150157,150161,150164,150167,150420,150423,150427,150430,150534,150537,150541,150692,150696,150703,150816,150820,150823,150929,150932,150936,150939,150970,150973,151078,151081,151085,151089,151099,151167,151171,151178,151242,151245,151249,151255,151351,151360,151364,151688,151697,151701,151729,151733,151773],[10,149442,149438],{"id":149443},"_11-面向对象基础",[14,149445,149447],{"id":149446},"_111-什么是面向对象","11.1 什么是面向对象",[24,149449,149450],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[24,149452,149453],{},"面向过程：",[87,149455,149457],{"className":30568,"code":149456,"language":30570,"meta":92,"style":92},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[94,149458,149459,149468,149476,149480,149490,149521,149525],{"__ignoreMap":92},[97,149460,149461,149463,149465],{"class":99,"line":100},[97,149462,146650],{"class":103},[97,149464,115],{"class":319},[97,149466,149467],{"class":118}," \"小明\"\n",[97,149469,149470,149472,149474],{"class":99,"line":195},[97,149471,146660],{"class":103},[97,149473,115],{"class":319},[97,149475,146665],{"class":370},[97,149477,149478],{"class":99,"line":241},[97,149479,2591],{"emptyLinePlaceholder":249},[97,149481,149482,149484,149487],{"class":99,"line":1387},[97,149483,32137],{"class":319},[97,149485,149486],{"class":111}," introduce",[97,149488,149489],{"class":103},"(name, age):\n",[97,149491,149492,149494,149496,149498,149501,149503,149505,149507,149510,149512,149514,149516,149519],{"class":99,"line":1393},[97,149493,31489],{"class":370},[97,149495,323],{"class":103},[97,149497,374],{"class":319},[97,149499,149500],{"class":118},"\"我叫",[97,149502,1216],{"class":370},[97,149504,79994],{"class":103},[97,149506,1265],{"class":370},[97,149508,149509],{"class":118},"，今年",[97,149511,1216],{"class":370},[97,149513,70405],{"class":103},[97,149515,1265],{"class":370},[97,149517,149518],{"class":118},"岁\"",[97,149520,329],{"class":103},[97,149522,149523],{"class":99,"line":1407},[97,149524,2591],{"emptyLinePlaceholder":249},[97,149526,149527],{"class":99,"line":1413},[97,149528,149529],{"class":103},"introduce(name, age)\n",[24,149531,149532],{},"面向对象：",[87,149534,149536],{"className":30568,"code":149535,"language":30570,"meta":92,"style":92},"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",[94,149537,149538,149546,149554,149583,149587,149591,149601,149610,149619],{"__ignoreMap":92},[97,149539,149540,149542,149544],{"class":99,"line":100},[97,149541,14885],{"class":319},[97,149543,8089],{"class":111},[97,149545,3930],{"class":103},[97,149547,149548,149550,149552],{"class":99,"line":195},[97,149549,30991],{"class":319},[97,149551,149486],{"class":111},[97,149553,30997],{"class":103},[97,149555,149556,149558,149560,149562,149564,149567,149569,149571,149573,149575,149577,149579,149581],{"class":99,"line":241},[97,149557,32641],{"class":370},[97,149559,323],{"class":103},[97,149561,374],{"class":319},[97,149563,149500],{"class":118},[97,149565,149566],{"class":370},"{self",[97,149568,80485],{"class":103},[97,149570,1265],{"class":370},[97,149572,149509],{"class":118},[97,149574,149566],{"class":370},[97,149576,80497],{"class":103},[97,149578,1265],{"class":370},[97,149580,149518],{"class":118},[97,149582,329],{"class":103},[97,149584,149585],{"class":99,"line":1387},[97,149586,2591],{"emptyLinePlaceholder":249},[97,149588,149589],{"class":99,"line":1393},[97,149590,2591],{"emptyLinePlaceholder":249},[97,149592,149593,149596,149598],{"class":99,"line":1407},[97,149594,149595],{"class":103},"student ",[97,149597,115],{"class":319},[97,149599,149600],{"class":103}," Student()\n",[97,149602,149603,149606,149608],{"class":99,"line":1413},[97,149604,149605],{"class":103},"student.name ",[97,149607,115],{"class":319},[97,149609,149467],{"class":118},[97,149611,149612,149615,149617],{"class":99,"line":1504},[97,149613,149614],{"class":103},"student.age ",[97,149616,115],{"class":319},[97,149618,146665],{"class":370},[97,149620,149621],{"class":99,"line":1510},[97,149622,149623],{"class":103},"student.introduce()\n",[24,149625,149626],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149628,149630],{"id":149629},"_112-类和对象","11.2 类和对象",[24,149632,149633],{},"类是模板，对象是根据模板创建出来的具体实例。",[87,149635,149637],{"className":30568,"code":149636,"language":30570,"meta":92,"style":92},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[94,149638,149639,149647,149652,149656,149660,149669],{"__ignoreMap":92},[97,149640,149641,149643,149645],{"class":99,"line":100},[97,149642,14885],{"class":319},[97,149644,8089],{"class":111},[97,149646,3930],{"class":103},[97,149648,149649],{"class":99,"line":195},[97,149650,149651],{"class":319},"    pass\n",[97,149653,149654],{"class":99,"line":241},[97,149655,2591],{"emptyLinePlaceholder":249},[97,149657,149658],{"class":99,"line":1387},[97,149659,2591],{"emptyLinePlaceholder":249},[97,149661,149662,149665,149667],{"class":99,"line":1393},[97,149663,149664],{"class":103},"student1 ",[97,149666,115],{"class":319},[97,149668,149600],{"class":103},[97,149670,149671,149674,149676],{"class":99,"line":1407},[97,149672,149673],{"class":103},"student2 ",[97,149675,115],{"class":319},[97,149677,149600],{"class":103},[24,149679,149680,149683,149684,101202,149687,149690],{},[94,149681,149682],{},"Student"," 是类，",[94,149685,149686],{},"student1",[94,149688,149689],{},"student2"," 是对象。",[14,149692,149694],{"id":149693},"_113-属性","11.3 属性",[24,149696,149697],{},"属性是对象保存的数据。",[87,149699,149701],{"className":30568,"code":149700,"language":30570,"meta":92,"style":92},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[94,149702,149703,149711,149715,149719,149723,149731,149739,149747,149751,149758],{"__ignoreMap":92},[97,149704,149705,149707,149709],{"class":99,"line":100},[97,149706,14885],{"class":319},[97,149708,8089],{"class":111},[97,149710,3930],{"class":103},[97,149712,149713],{"class":99,"line":195},[97,149714,149651],{"class":319},[97,149716,149717],{"class":99,"line":241},[97,149718,2591],{"emptyLinePlaceholder":249},[97,149720,149721],{"class":99,"line":1387},[97,149722,2591],{"emptyLinePlaceholder":249},[97,149724,149725,149727,149729],{"class":99,"line":1393},[97,149726,149595],{"class":103},[97,149728,115],{"class":319},[97,149730,149600],{"class":103},[97,149732,149733,149735,149737],{"class":99,"line":1407},[97,149734,149605],{"class":103},[97,149736,115],{"class":319},[97,149738,149467],{"class":118},[97,149740,149741,149743,149745],{"class":99,"line":1413},[97,149742,149614],{"class":103},[97,149744,115],{"class":319},[97,149746,146665],{"class":370},[97,149748,149749],{"class":99,"line":1504},[97,149750,2591],{"emptyLinePlaceholder":249},[97,149752,149753,149755],{"class":99,"line":1510},[97,149754,30605],{"class":370},[97,149756,149757],{"class":103},"(student.name)\n",[97,149759,149760,149762],{"class":99,"line":1522},[97,149761,30605],{"class":370},[97,149763,149764],{"class":103},"(student.age)\n",[24,149766,149767],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149769,149771],{"id":149770},"_114-方法","11.4 方法",[24,149773,149774],{},"类中的函数叫方法。",[87,149776,149777],{"className":30568,"code":149535,"language":30570,"meta":92,"style":92},[94,149778,149779,149787,149795,149823,149827,149831,149839,149847,149855],{"__ignoreMap":92},[97,149780,149781,149783,149785],{"class":99,"line":100},[97,149782,14885],{"class":319},[97,149784,8089],{"class":111},[97,149786,3930],{"class":103},[97,149788,149789,149791,149793],{"class":99,"line":195},[97,149790,30991],{"class":319},[97,149792,149486],{"class":111},[97,149794,30997],{"class":103},[97,149796,149797,149799,149801,149803,149805,149807,149809,149811,149813,149815,149817,149819,149821],{"class":99,"line":241},[97,149798,32641],{"class":370},[97,149800,323],{"class":103},[97,149802,374],{"class":319},[97,149804,149500],{"class":118},[97,149806,149566],{"class":370},[97,149808,80485],{"class":103},[97,149810,1265],{"class":370},[97,149812,149509],{"class":118},[97,149814,149566],{"class":370},[97,149816,80497],{"class":103},[97,149818,1265],{"class":370},[97,149820,149518],{"class":118},[97,149822,329],{"class":103},[97,149824,149825],{"class":99,"line":1387},[97,149826,2591],{"emptyLinePlaceholder":249},[97,149828,149829],{"class":99,"line":1393},[97,149830,2591],{"emptyLinePlaceholder":249},[97,149832,149833,149835,149837],{"class":99,"line":1407},[97,149834,149595],{"class":103},[97,149836,115],{"class":319},[97,149838,149600],{"class":103},[97,149840,149841,149843,149845],{"class":99,"line":1413},[97,149842,149605],{"class":103},[97,149844,115],{"class":319},[97,149846,149467],{"class":118},[97,149848,149849,149851,149853],{"class":99,"line":1504},[97,149850,149614],{"class":103},[97,149852,115],{"class":319},[97,149854,146665],{"class":370},[97,149856,149857],{"class":99,"line":1510},[97,149858,149623],{"class":103},[24,149860,149861,149863,149864,149866],{},[94,149862,31013],{}," 表示当前对象。调用方法时不需要手动传入 ",[94,149865,31013],{},"，Python 会自动传。",[14,149868,149870],{"id":149869},"_115-构造方法__init__","11.5 构造方法__init__",[24,149872,149873,149875],{},[94,149874,31019],{}," 在对象创建时自动执行，用于初始化属性。",[87,149877,149879],{"className":30568,"code":149878,"language":30570,"meta":92,"style":92},"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",[94,149880,149881,149889,149898,149910,149922,149933,149937,149945,149983,149987,149991,150013],{"__ignoreMap":92},[97,149882,149883,149885,149887],{"class":99,"line":100},[97,149884,14885],{"class":319},[97,149886,8089],{"class":111},[97,149888,3930],{"class":103},[97,149890,149891,149893,149895],{"class":99,"line":195},[97,149892,30991],{"class":319},[97,149894,30994],{"class":370},[97,149896,149897],{"class":103},"(self, name, age, score):\n",[97,149899,149900,149902,149905,149907],{"class":99,"line":241},[97,149901,31035],{"class":370},[97,149903,149904],{"class":103},".name ",[97,149906,115],{"class":319},[97,149908,149909],{"class":103}," name\n",[97,149911,149912,149914,149917,149919],{"class":99,"line":1387},[97,149913,31035],{"class":370},[97,149915,149916],{"class":103},".age ",[97,149918,115],{"class":319},[97,149920,149921],{"class":103}," age\n",[97,149923,149924,149926,149929,149931],{"class":99,"line":1393},[97,149925,31035],{"class":370},[97,149927,149928],{"class":103},".score ",[97,149930,115],{"class":319},[97,149932,1771],{"class":103},[97,149934,149935],{"class":99,"line":1407},[97,149936,2591],{"emptyLinePlaceholder":249},[97,149938,149939,149941,149943],{"class":99,"line":1413},[97,149940,30991],{"class":319},[97,149942,149486],{"class":111},[97,149944,30997],{"class":103},[97,149946,149947,149949,149951,149953,149955,149957,149959,149961,149963,149965,149967,149969,149972,149974,149977,149979,149981],{"class":99,"line":1504},[97,149948,32641],{"class":370},[97,149950,323],{"class":103},[97,149952,374],{"class":319},[97,149954,149500],{"class":118},[97,149956,149566],{"class":370},[97,149958,80485],{"class":103},[97,149960,1265],{"class":370},[97,149962,149509],{"class":118},[97,149964,149566],{"class":370},[97,149966,80497],{"class":103},[97,149968,1265],{"class":370},[97,149970,149971],{"class":118},"岁，成绩",[97,149973,149566],{"class":370},[97,149975,149976],{"class":103},".score",[97,149978,1265],{"class":370},[97,149980,571],{"class":118},[97,149982,329],{"class":103},[97,149984,149985],{"class":99,"line":1510},[97,149986,2591],{"emptyLinePlaceholder":249},[97,149988,149989],{"class":99,"line":1522},[97,149990,2591],{"emptyLinePlaceholder":249},[97,149992,149993,149995,149997,150000,150003,150005,150007,150009,150011],{"class":99,"line":1804},[97,149994,149595],{"class":103},[97,149996,115],{"class":319},[97,149998,149999],{"class":103}," Student(",[97,150001,150002],{"class":118},"\"小明\"",[97,150004,12626],{"class":103},[97,150006,970],{"class":370},[97,150008,12626],{"class":103},[97,150010,1308],{"class":370},[97,150012,329],{"class":103},[97,150014,150015],{"class":99,"line":1809},[97,150016,149623],{"class":103},[24,150018,150019],{},"构造方法的好处：",[138,150021,150022,150025,150028],{},[70,150023,150024],{},"创建对象时必须提供必要数据。",[70,150026,150027],{},"属性初始化集中，不容易漏。",[70,150029,150030],{},"对象状态更完整。",[14,150032,150034,150035],{"id":150033},"_116-str","11.6 ",[469,150036,1492],{},[24,150038,150039,150040,28575],{},"直接打印对象时，默认输出不直观。可以定义 ",[94,150041,150042],{},"__str__",[87,150044,150046],{"className":30568,"code":150045,"language":30570,"meta":92,"style":92},"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",[94,150047,150048,150056,150065,150075,150085,150089,150098,150126,150130,150134,150150],{"__ignoreMap":92},[97,150049,150050,150052,150054],{"class":99,"line":100},[97,150051,14885],{"class":319},[97,150053,8089],{"class":111},[97,150055,3930],{"class":103},[97,150057,150058,150060,150062],{"class":99,"line":195},[97,150059,30991],{"class":319},[97,150061,30994],{"class":370},[97,150063,150064],{"class":103},"(self, name, age):\n",[97,150066,150067,150069,150071,150073],{"class":99,"line":241},[97,150068,31035],{"class":370},[97,150070,149904],{"class":103},[97,150072,115],{"class":319},[97,150074,149909],{"class":103},[97,150076,150077,150079,150081,150083],{"class":99,"line":1387},[97,150078,31035],{"class":370},[97,150080,149916],{"class":103},[97,150082,115],{"class":319},[97,150084,149921],{"class":103},[97,150086,150087],{"class":99,"line":1393},[97,150088,2591],{"emptyLinePlaceholder":249},[97,150090,150091,150093,150096],{"class":99,"line":1407},[97,150092,30991],{"class":319},[97,150094,150095],{"class":370}," __str__",[97,150097,30997],{"class":103},[97,150099,150100,150102,150105,150108,150110,150112,150114,150117,150119,150121,150123],{"class":99,"line":1413},[97,150101,14943],{"class":319},[97,150103,150104],{"class":319}," f",[97,150106,150107],{"class":118},"\"Student(name=",[97,150109,149566],{"class":370},[97,150111,80485],{"class":103},[97,150113,1265],{"class":370},[97,150115,150116],{"class":118},", age=",[97,150118,149566],{"class":370},[97,150120,80497],{"class":103},[97,150122,1265],{"class":370},[97,150124,150125],{"class":118},")\"\n",[97,150127,150128],{"class":99,"line":1504},[97,150129,2591],{"emptyLinePlaceholder":249},[97,150131,150132],{"class":99,"line":1510},[97,150133,2591],{"emptyLinePlaceholder":249},[97,150135,150136,150138,150140,150142,150144,150146,150148],{"class":99,"line":1522},[97,150137,149595],{"class":103},[97,150139,115],{"class":319},[97,150141,149999],{"class":103},[97,150143,150002],{"class":118},[97,150145,12626],{"class":103},[97,150147,970],{"class":370},[97,150149,329],{"class":103},[97,150151,150152,150154],{"class":99,"line":1804},[97,150153,30605],{"class":370},[97,150155,150156],{"class":103},"(student)\n",[14,150158,150160],{"id":150159},"_117-封装","11.7 封装",[24,150162,150163],{},"封装就是把数据和方法放到类中，并控制访问方式。",[24,150165,150166],{},"Python 中以双下划线开头的属性通常视为私有属性。",[87,150168,150170],{"className":30568,"code":150169,"language":30570,"meta":92,"style":92},"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",[94,150171,150172,150181,150190,150202,150214,150218,150227,150236,150240,150250,150263,150274,150279,150290,150294,150303,150315,150326,150330,150343,150354,150358,150369,150373,150377,150395,150404,150413],{"__ignoreMap":92},[97,150173,150174,150176,150179],{"class":99,"line":100},[97,150175,14885],{"class":319},[97,150177,150178],{"class":111}," Account",[97,150180,3930],{"class":103},[97,150182,150183,150185,150187],{"class":99,"line":195},[97,150184,30991],{"class":319},[97,150186,30994],{"class":370},[97,150188,150189],{"class":103},"(self, owner, balance):\n",[97,150191,150192,150194,150197,150199],{"class":99,"line":241},[97,150193,31035],{"class":370},[97,150195,150196],{"class":103},".owner ",[97,150198,115],{"class":319},[97,150200,150201],{"class":103}," owner\n",[97,150203,150204,150206,150209,150211],{"class":99,"line":1387},[97,150205,31035],{"class":370},[97,150207,150208],{"class":103},".__balance ",[97,150210,115],{"class":319},[97,150212,150213],{"class":103}," balance\n",[97,150215,150216],{"class":99,"line":1393},[97,150217,2591],{"emptyLinePlaceholder":249},[97,150219,150220,150222,150225],{"class":99,"line":1407},[97,150221,30991],{"class":319},[97,150223,150224],{"class":111}," get_balance",[97,150226,30997],{"class":103},[97,150228,150229,150231,150233],{"class":99,"line":1413},[97,150230,14943],{"class":319},[97,150232,39063],{"class":370},[97,150234,150235],{"class":103},".__balance\n",[97,150237,150238],{"class":99,"line":1504},[97,150239,2591],{"emptyLinePlaceholder":249},[97,150241,150242,150244,150247],{"class":99,"line":1510},[97,150243,30991],{"class":319},[97,150245,150246],{"class":111}," deposit",[97,150248,150249],{"class":103},"(self, money):\n",[97,150251,150252,150254,150257,150259,150261],{"class":99,"line":1522},[97,150253,2688],{"class":319},[97,150255,150256],{"class":103}," money ",[97,150258,1780],{"class":319},[97,150260,4284],{"class":370},[97,150262,3930],{"class":103},[97,150264,150265,150267,150269,150272],{"class":99,"line":1804},[97,150266,34840],{"class":370},[97,150268,323],{"class":103},[97,150270,150271],{"class":118},"\"存款金额必须大于0\"",[97,150273,329],{"class":103},[97,150275,150276],{"class":99,"line":1809},[97,150277,150278],{"class":319},"            return\n",[97,150280,150281,150283,150285,150287],{"class":99,"line":1815},[97,150282,31035],{"class":370},[97,150284,150208],{"class":103},[97,150286,9668],{"class":319},[97,150288,150289],{"class":103}," money\n",[97,150291,150292],{"class":99,"line":1820},[97,150293,2591],{"emptyLinePlaceholder":249},[97,150295,150296,150298,150301],{"class":99,"line":1834},[97,150297,30991],{"class":319},[97,150299,150300],{"class":111}," withdraw",[97,150302,150249],{"class":103},[97,150304,150305,150307,150309,150311,150313],{"class":99,"line":1839},[97,150306,2688],{"class":319},[97,150308,150256],{"class":103},[97,150310,1780],{"class":319},[97,150312,4284],{"class":370},[97,150314,3930],{"class":103},[97,150316,150317,150319,150321,150324],{"class":99,"line":1845},[97,150318,34840],{"class":370},[97,150320,323],{"class":103},[97,150322,150323],{"class":118},"\"取款金额必须大于0\"",[97,150325,329],{"class":103},[97,150327,150328],{"class":99,"line":1866},[97,150329,150278],{"class":319},[97,150331,150332,150334,150336,150338,150340],{"class":99,"line":1871},[97,150333,2688],{"class":319},[97,150335,150256],{"class":103},[97,150337,1279],{"class":319},[97,150339,39063],{"class":370},[97,150341,150342],{"class":103},".__balance:\n",[97,150344,150345,150347,150349,150352],{"class":99,"line":1885},[97,150346,34840],{"class":370},[97,150348,323],{"class":103},[97,150350,150351],{"class":118},"\"余额不足\"",[97,150353,329],{"class":103},[97,150355,150356],{"class":99,"line":1890},[97,150357,150278],{"class":319},[97,150359,150360,150362,150364,150367],{"class":99,"line":1919},[97,150361,31035],{"class":370},[97,150363,150208],{"class":103},[97,150365,150366],{"class":319},"-=",[97,150368,150289],{"class":103},[97,150370,150371],{"class":99,"line":1924},[97,150372,2591],{"emptyLinePlaceholder":249},[97,150374,150375],{"class":99,"line":1941},[97,150376,2591],{"emptyLinePlaceholder":249},[97,150378,150379,150382,150384,150387,150389,150391,150393],{"class":99,"line":1946},[97,150380,150381],{"class":103},"account ",[97,150383,115],{"class":319},[97,150385,150386],{"class":103}," Account(",[97,150388,150002],{"class":118},[97,150390,12626],{"class":103},[97,150392,6601],{"class":370},[97,150394,329],{"class":103},[97,150396,150397,150400,150402],{"class":99,"line":1951},[97,150398,150399],{"class":103},"account.deposit(",[97,150401,1914],{"class":370},[97,150403,329],{"class":103},[97,150405,150406,150409,150411],{"class":99,"line":1956},[97,150407,150408],{"class":103},"account.withdraw(",[97,150410,631],{"class":370},[97,150412,329],{"class":103},[97,150414,150415,150417],{"class":99,"line":1970},[97,150416,30605],{"class":370},[97,150418,150419],{"class":103},"(account.get_balance())\n",[24,150421,150422],{},"封装的意义是避免外部随意修改内部状态。",[14,150424,150426],{"id":150425},"_118-继承","11.8 继承",[24,150428,150429],{},"继承可以让子类复用父类的属性和方法。",[87,150431,150433],{"className":30568,"code":150432,"language":30570,"meta":92,"style":92},"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",[94,150434,150435,150444,150453,150464,150468,150472,150486,150495,150506,150510,150514,150524,150529],{"__ignoreMap":92},[97,150436,150437,150439,150442],{"class":99,"line":100},[97,150438,14885],{"class":319},[97,150440,150441],{"class":111}," Animal",[97,150443,3930],{"class":103},[97,150445,150446,150448,150451],{"class":99,"line":195},[97,150447,30991],{"class":319},[97,150449,150450],{"class":111}," eat",[97,150452,30997],{"class":103},[97,150454,150455,150457,150459,150462],{"class":99,"line":241},[97,150456,32641],{"class":370},[97,150458,323],{"class":103},[97,150460,150461],{"class":118},"\"吃东西\"",[97,150463,329],{"class":103},[97,150465,150466],{"class":99,"line":1387},[97,150467,2591],{"emptyLinePlaceholder":249},[97,150469,150470],{"class":99,"line":1393},[97,150471,2591],{"emptyLinePlaceholder":249},[97,150473,150474,150476,150479,150481,150484],{"class":99,"line":1407},[97,150475,14885],{"class":319},[97,150477,150478],{"class":111}," Dog",[97,150480,323],{"class":103},[97,150482,150483],{"class":111},"Animal",[97,150485,30976],{"class":103},[97,150487,150488,150490,150493],{"class":99,"line":1413},[97,150489,30991],{"class":319},[97,150491,150492],{"class":111}," bark",[97,150494,30997],{"class":103},[97,150496,150497,150499,150501,150504],{"class":99,"line":1504},[97,150498,32641],{"class":370},[97,150500,323],{"class":103},[97,150502,150503],{"class":118},"\"汪汪\"",[97,150505,329],{"class":103},[97,150507,150508],{"class":99,"line":1510},[97,150509,2591],{"emptyLinePlaceholder":249},[97,150511,150512],{"class":99,"line":1522},[97,150513,2591],{"emptyLinePlaceholder":249},[97,150515,150516,150519,150521],{"class":99,"line":1804},[97,150517,150518],{"class":103},"dog ",[97,150520,115],{"class":319},[97,150522,150523],{"class":103}," Dog()\n",[97,150525,150526],{"class":99,"line":1809},[97,150527,150528],{"class":103},"dog.eat()\n",[97,150530,150531],{"class":99,"line":1815},[97,150532,150533],{"class":103},"dog.bark()\n",[24,150535,150536],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150538,150540],{"id":150539},"_119-方法重写","11.9 方法重写",[87,150542,150544],{"className":30568,"code":150543,"language":30570,"meta":92,"style":92},"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",[94,150545,150546,150554,150563,150574,150578,150582,150594,150602,150612,150616,150620,150633,150641,150652,150656,150660,150668,150678,150682,150687],{"__ignoreMap":92},[97,150547,150548,150550,150552],{"class":99,"line":100},[97,150549,14885],{"class":319},[97,150551,150441],{"class":111},[97,150553,3930],{"class":103},[97,150555,150556,150558,150561],{"class":99,"line":195},[97,150557,30991],{"class":319},[97,150559,150560],{"class":111}," speak",[97,150562,30997],{"class":103},[97,150564,150565,150567,150569,150572],{"class":99,"line":241},[97,150566,32641],{"class":370},[97,150568,323],{"class":103},[97,150570,150571],{"class":118},"\"动物叫\"",[97,150573,329],{"class":103},[97,150575,150576],{"class":99,"line":1387},[97,150577,2591],{"emptyLinePlaceholder":249},[97,150579,150580],{"class":99,"line":1393},[97,150581,2591],{"emptyLinePlaceholder":249},[97,150583,150584,150586,150588,150590,150592],{"class":99,"line":1407},[97,150585,14885],{"class":319},[97,150587,150478],{"class":111},[97,150589,323],{"class":103},[97,150591,150483],{"class":111},[97,150593,30976],{"class":103},[97,150595,150596,150598,150600],{"class":99,"line":1413},[97,150597,30991],{"class":319},[97,150599,150560],{"class":111},[97,150601,30997],{"class":103},[97,150603,150604,150606,150608,150610],{"class":99,"line":1504},[97,150605,32641],{"class":370},[97,150607,323],{"class":103},[97,150609,150503],{"class":118},[97,150611,329],{"class":103},[97,150613,150614],{"class":99,"line":1510},[97,150615,2591],{"emptyLinePlaceholder":249},[97,150617,150618],{"class":99,"line":1522},[97,150619,2591],{"emptyLinePlaceholder":249},[97,150621,150622,150624,150627,150629,150631],{"class":99,"line":1804},[97,150623,14885],{"class":319},[97,150625,150626],{"class":111}," Cat",[97,150628,323],{"class":103},[97,150630,150483],{"class":111},[97,150632,30976],{"class":103},[97,150634,150635,150637,150639],{"class":99,"line":1809},[97,150636,30991],{"class":319},[97,150638,150560],{"class":111},[97,150640,30997],{"class":103},[97,150642,150643,150645,150647,150650],{"class":99,"line":1815},[97,150644,32641],{"class":370},[97,150646,323],{"class":103},[97,150648,150649],{"class":118},"\"喵喵\"",[97,150651,329],{"class":103},[97,150653,150654],{"class":99,"line":1820},[97,150655,2591],{"emptyLinePlaceholder":249},[97,150657,150658],{"class":99,"line":1834},[97,150659,2591],{"emptyLinePlaceholder":249},[97,150661,150662,150664,150666],{"class":99,"line":1839},[97,150663,150518],{"class":103},[97,150665,115],{"class":319},[97,150667,150523],{"class":103},[97,150669,150670,150673,150675],{"class":99,"line":1845},[97,150671,150672],{"class":103},"cat ",[97,150674,115],{"class":319},[97,150676,150677],{"class":103}," Cat()\n",[97,150679,150680],{"class":99,"line":1866},[97,150681,2591],{"emptyLinePlaceholder":249},[97,150683,150684],{"class":99,"line":1871},[97,150685,150686],{"class":103},"dog.speak()\n",[97,150688,150689],{"class":99,"line":1885},[97,150690,150691],{"class":103},"cat.speak()\n",[14,150693,150695],{"id":150694},"_1110-super","11.10 super",[24,150697,150698,150699,150702],{},"子类可以通过 ",[94,150700,150701],{},"super()"," 调用父类方法。",[87,150704,150706],{"className":30568,"code":150705,"language":30570,"meta":92,"style":92},"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",[94,150707,150708,150716,150725,150735,150739,150743,150755,150764,150775,150785,150789,150793,150809],{"__ignoreMap":92},[97,150709,150710,150712,150714],{"class":99,"line":100},[97,150711,14885],{"class":319},[97,150713,15759],{"class":111},[97,150715,3930],{"class":103},[97,150717,150718,150720,150722],{"class":99,"line":195},[97,150719,30991],{"class":319},[97,150721,30994],{"class":370},[97,150723,150724],{"class":103},"(self, name):\n",[97,150726,150727,150729,150731,150733],{"class":99,"line":241},[97,150728,31035],{"class":370},[97,150730,149904],{"class":103},[97,150732,115],{"class":319},[97,150734,149909],{"class":103},[97,150736,150737],{"class":99,"line":1387},[97,150738,2591],{"emptyLinePlaceholder":249},[97,150740,150741],{"class":99,"line":1393},[97,150742,2591],{"emptyLinePlaceholder":249},[97,150744,150745,150747,150749,150751,150753],{"class":99,"line":1407},[97,150746,14885],{"class":319},[97,150748,8089],{"class":111},[97,150750,323],{"class":103},[97,150752,19236],{"class":111},[97,150754,30976],{"class":103},[97,150756,150757,150759,150761],{"class":99,"line":1413},[97,150758,30991],{"class":319},[97,150760,30994],{"class":370},[97,150762,150763],{"class":103},"(self, name, score):\n",[97,150765,150766,150768,150770,150772],{"class":99,"line":1504},[97,150767,31007],{"class":370},[97,150769,17451],{"class":103},[97,150771,31019],{"class":370},[97,150773,150774],{"class":103},"(name)\n",[97,150776,150777,150779,150781,150783],{"class":99,"line":1510},[97,150778,31035],{"class":370},[97,150780,149928],{"class":103},[97,150782,115],{"class":319},[97,150784,1771],{"class":103},[97,150786,150787],{"class":99,"line":1522},[97,150788,2591],{"emptyLinePlaceholder":249},[97,150790,150791],{"class":99,"line":1804},[97,150792,2591],{"emptyLinePlaceholder":249},[97,150794,150795,150797,150799,150801,150803,150805,150807],{"class":99,"line":1809},[97,150796,149595],{"class":103},[97,150798,115],{"class":319},[97,150800,149999],{"class":103},[97,150802,150002],{"class":118},[97,150804,12626],{"class":103},[97,150806,1308],{"class":370},[97,150808,329],{"class":103},[97,150810,150811,150813],{"class":99,"line":1815},[97,150812,30605],{"class":370},[97,150814,150815],{"class":103},"(student.name, student.score)\n",[14,150817,150819],{"id":150818},"_1111-多态","11.11 多态",[24,150821,150822],{},"多态指不同对象响应同一个方法，表现出不同结果。",[87,150824,150826],{"className":30568,"code":150825,"language":30570,"meta":92,"style":92},"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",[94,150827,150828,150836,150844,150854,150858,150862,150870,150878,150888,150892,150896,150906,150911,150915,150919,150924],{"__ignoreMap":92},[97,150829,150830,150832,150834],{"class":99,"line":100},[97,150831,14885],{"class":319},[97,150833,150478],{"class":111},[97,150835,3930],{"class":103},[97,150837,150838,150840,150842],{"class":99,"line":195},[97,150839,30991],{"class":319},[97,150841,150560],{"class":111},[97,150843,30997],{"class":103},[97,150845,150846,150848,150850,150852],{"class":99,"line":241},[97,150847,32641],{"class":370},[97,150849,323],{"class":103},[97,150851,150503],{"class":118},[97,150853,329],{"class":103},[97,150855,150856],{"class":99,"line":1387},[97,150857,2591],{"emptyLinePlaceholder":249},[97,150859,150860],{"class":99,"line":1393},[97,150861,2591],{"emptyLinePlaceholder":249},[97,150863,150864,150866,150868],{"class":99,"line":1407},[97,150865,14885],{"class":319},[97,150867,150626],{"class":111},[97,150869,3930],{"class":103},[97,150871,150872,150874,150876],{"class":99,"line":1413},[97,150873,30991],{"class":319},[97,150875,150560],{"class":111},[97,150877,30997],{"class":103},[97,150879,150880,150882,150884,150886],{"class":99,"line":1504},[97,150881,32641],{"class":370},[97,150883,323],{"class":103},[97,150885,150649],{"class":118},[97,150887,329],{"class":103},[97,150889,150890],{"class":99,"line":1510},[97,150891,2591],{"emptyLinePlaceholder":249},[97,150893,150894],{"class":99,"line":1522},[97,150895,2591],{"emptyLinePlaceholder":249},[97,150897,150898,150900,150903],{"class":99,"line":1804},[97,150899,32137],{"class":319},[97,150901,150902],{"class":111}," make_sound",[97,150904,150905],{"class":103},"(animal):\n",[97,150907,150908],{"class":99,"line":1809},[97,150909,150910],{"class":103},"    animal.speak()\n",[97,150912,150913],{"class":99,"line":1815},[97,150914,2591],{"emptyLinePlaceholder":249},[97,150916,150917],{"class":99,"line":1820},[97,150918,2591],{"emptyLinePlaceholder":249},[97,150920,150921],{"class":99,"line":1834},[97,150922,150923],{"class":103},"make_sound(Dog())\n",[97,150925,150926],{"class":99,"line":1839},[97,150927,150928],{"class":103},"make_sound(Cat())\n",[24,150930,150931],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150933,150935],{"id":150934},"_1112-类属性和实例属性","11.12 类属性和实例属性",[24,150937,150938],{},"实例属性属于对象：",[87,150940,150942],{"className":30568,"code":150941,"language":30570,"meta":92,"style":92},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[94,150943,150944,150952,150960],{"__ignoreMap":92},[97,150945,150946,150948,150950],{"class":99,"line":100},[97,150947,14885],{"class":319},[97,150949,8089],{"class":111},[97,150951,3930],{"class":103},[97,150953,150954,150956,150958],{"class":99,"line":195},[97,150955,30991],{"class":319},[97,150957,30994],{"class":370},[97,150959,150724],{"class":103},[97,150961,150962,150964,150966,150968],{"class":99,"line":241},[97,150963,31035],{"class":370},[97,150965,149904],{"class":103},[97,150967,115],{"class":319},[97,150969,149909],{"class":103},[24,150971,150972],{},"类属性属于类，所有对象共享：",[87,150974,150976],{"className":30568,"code":150975,"language":30570,"meta":92,"style":92},"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",[94,150977,150978,150986,150996,151000,151008,151018,151022,151026,151039,151053,151057,151064,151071],{"__ignoreMap":92},[97,150979,150980,150982,150984],{"class":99,"line":100},[97,150981,14885],{"class":319},[97,150983,8089],{"class":111},[97,150985,3930],{"class":103},[97,150987,150988,150991,150993],{"class":99,"line":195},[97,150989,150990],{"class":103},"    school ",[97,150992,115],{"class":319},[97,150994,150995],{"class":118}," \"黑马学校\"\n",[97,150997,150998],{"class":99,"line":241},[97,150999,2591],{"emptyLinePlaceholder":249},[97,151001,151002,151004,151006],{"class":99,"line":1387},[97,151003,30991],{"class":319},[97,151005,30994],{"class":370},[97,151007,150724],{"class":103},[97,151009,151010,151012,151014,151016],{"class":99,"line":1393},[97,151011,31035],{"class":370},[97,151013,149904],{"class":103},[97,151015,115],{"class":319},[97,151017,149909],{"class":103},[97,151019,151020],{"class":99,"line":1407},[97,151021,2591],{"emptyLinePlaceholder":249},[97,151023,151024],{"class":99,"line":1413},[97,151025,2591],{"emptyLinePlaceholder":249},[97,151027,151028,151031,151033,151035,151037],{"class":99,"line":1504},[97,151029,151030],{"class":103},"s1 ",[97,151032,115],{"class":319},[97,151034,149999],{"class":103},[97,151036,150002],{"class":118},[97,151038,329],{"class":103},[97,151040,151041,151044,151046,151048,151051],{"class":99,"line":1510},[97,151042,151043],{"class":103},"s2 ",[97,151045,115],{"class":319},[97,151047,149999],{"class":103},[97,151049,151050],{"class":118},"\"小红\"",[97,151052,329],{"class":103},[97,151054,151055],{"class":99,"line":1522},[97,151056,2591],{"emptyLinePlaceholder":249},[97,151058,151059,151061],{"class":99,"line":1804},[97,151060,30605],{"class":370},[97,151062,151063],{"class":103},"(s1.school)\n",[97,151065,151066,151068],{"class":99,"line":1809},[97,151067,30605],{"class":370},[97,151069,151070],{"class":103},"(s2.school)\n",[97,151072,151073,151075],{"class":99,"line":1815},[97,151074,30605],{"class":370},[97,151076,151077],{"class":103},"(Student.school)\n",[24,151079,151080],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151082,151084],{"id":151083},"_1113-类方法和静态方法","11.13 类方法和静态方法",[48,151086,151088],{"id":151087},"_11131-类方法","11.13.1 类方法",[24,151090,151091,151092,151095,151096,28575],{},"类方法使用 ",[94,151093,151094],{},"@classmethod","，第一个参数通常是 ",[94,151097,151098],{},"cls",[87,151100,151102],{"className":30568,"code":151101,"language":30570,"meta":92,"style":92},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[94,151103,151104,151112,151120,151124,151132,151142,151152,151156,151160],{"__ignoreMap":92},[97,151105,151106,151108,151110],{"class":99,"line":100},[97,151107,14885],{"class":319},[97,151109,8089],{"class":111},[97,151111,3930],{"class":103},[97,151113,151114,151116,151118],{"class":99,"line":195},[97,151115,150990],{"class":103},[97,151117,115],{"class":319},[97,151119,150995],{"class":118},[97,151121,151122],{"class":99,"line":241},[97,151123,2591],{"emptyLinePlaceholder":249},[97,151125,151126,151129],{"class":99,"line":1387},[97,151127,151128],{"class":111},"    @",[97,151130,151131],{"class":370},"classmethod\n",[97,151133,151134,151136,151139],{"class":99,"line":1393},[97,151135,30991],{"class":319},[97,151137,151138],{"class":111}," get_school",[97,151140,151141],{"class":103},"(cls):\n",[97,151143,151144,151146,151149],{"class":99,"line":1407},[97,151145,14943],{"class":319},[97,151147,151148],{"class":370}," cls",[97,151150,151151],{"class":103},".school\n",[97,151153,151154],{"class":99,"line":1413},[97,151155,2591],{"emptyLinePlaceholder":249},[97,151157,151158],{"class":99,"line":1504},[97,151159,2591],{"emptyLinePlaceholder":249},[97,151161,151162,151164],{"class":99,"line":1510},[97,151163,30605],{"class":370},[97,151165,151166],{"class":103},"(Student.get_school())\n",[48,151168,151170],{"id":151169},"_11132-静态方法","11.13.2 静态方法",[24,151172,151173,151174,151177],{},"静态方法使用 ",[94,151175,151176],{},"@staticmethod","，不需要访问实例和类。",[87,151179,151181],{"className":30568,"code":151180,"language":30570,"meta":92,"style":92},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[94,151182,151183,151192,151199,151208,151219,151223,151227],{"__ignoreMap":92},[97,151184,151185,151187,151190],{"class":99,"line":100},[97,151186,14885],{"class":319},[97,151188,151189],{"class":111}," MathUtils",[97,151191,3930],{"class":103},[97,151193,151194,151196],{"class":99,"line":195},[97,151195,151128],{"class":111},[97,151197,151198],{"class":370},"staticmethod\n",[97,151200,151201,151203,151205],{"class":99,"line":241},[97,151202,30991],{"class":319},[97,151204,5400],{"class":111},[97,151206,151207],{"class":103},"(a, b):\n",[97,151209,151210,151212,151214,151216],{"class":99,"line":1387},[97,151211,14943],{"class":319},[97,151213,11060],{"class":103},[97,151215,801],{"class":319},[97,151217,151218],{"class":103}," b\n",[97,151220,151221],{"class":99,"line":1393},[97,151222,2591],{"emptyLinePlaceholder":249},[97,151224,151225],{"class":99,"line":1407},[97,151226,2591],{"emptyLinePlaceholder":249},[97,151228,151229,151231,151234,151236,151238,151240],{"class":99,"line":1413},[97,151230,30605],{"class":370},[97,151232,151233],{"class":103},"(MathUtils.add(",[97,151235,537],{"class":370},[97,151237,12626],{"class":103},[97,151239,398],{"class":370},[97,151241,30687],{"class":103},[24,151243,151244],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151246,151248],{"id":151247},"_1114-dataclass","11.14 dataclass",[24,151250,151251,151254],{},[94,151252,151253],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[87,151256,151258],{"className":30568,"code":151257,"language":30570,"meta":92,"style":92},"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",[94,151259,151260,151272,151276,151280,151285,151293,151301,151309,151317,151321,151325,151345],{"__ignoreMap":92},[97,151261,151262,151264,151267,151269],{"class":99,"line":100},[97,151263,30927],{"class":319},[97,151265,151266],{"class":103}," dataclasses ",[97,151268,30582],{"class":319},[97,151270,151271],{"class":103}," dataclass\n",[97,151273,151274],{"class":99,"line":195},[97,151275,2591],{"emptyLinePlaceholder":249},[97,151277,151278],{"class":99,"line":241},[97,151279,2591],{"emptyLinePlaceholder":249},[97,151281,151282],{"class":99,"line":1387},[97,151283,151284],{"class":111},"@dataclass\n",[97,151286,151287,151289,151291],{"class":99,"line":1393},[97,151288,14885],{"class":319},[97,151290,8089],{"class":111},[97,151292,3930],{"class":103},[97,151294,151295,151298],{"class":99,"line":1407},[97,151296,151297],{"class":103},"    name: ",[97,151299,151300],{"class":370},"str\n",[97,151302,151303,151306],{"class":99,"line":1413},[97,151304,151305],{"class":103},"    age: ",[97,151307,151308],{"class":370},"int\n",[97,151310,151311,151314],{"class":99,"line":1504},[97,151312,151313],{"class":103},"    score: ",[97,151315,151316],{"class":370},"float\n",[97,151318,151319],{"class":99,"line":1510},[97,151320,2591],{"emptyLinePlaceholder":249},[97,151322,151323],{"class":99,"line":1522},[97,151324,2591],{"emptyLinePlaceholder":249},[97,151326,151327,151329,151331,151333,151335,151337,151339,151341,151343],{"class":99,"line":1804},[97,151328,149595],{"class":103},[97,151330,115],{"class":319},[97,151332,149999],{"class":103},[97,151334,150002],{"class":118},[97,151336,12626],{"class":103},[97,151338,970],{"class":370},[97,151340,12626],{"class":103},[97,151342,1308],{"class":370},[97,151344,329],{"class":103},[97,151346,151347,151349],{"class":99,"line":1809},[97,151348,30605],{"class":370},[97,151350,150156],{"class":103},[24,151352,151353,151354,532,151356,151359],{},"它会自动生成 ",[94,151355,31019],{},[94,151357,151358],{},"__repr__"," 等方法。适合数据模型类。",[14,151361,151363],{"id":151362},"_1115-小案例学生类","11.15 小案例：学生类",[87,151365,151367],{"className":30568,"code":151366,"language":30570,"meta":92,"style":92},"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",[94,151368,151369,151377,151386,151398,151408,151418,151428,151432,151441,151454,151458,151467,151473,151485,151497,151509,151521,151525,151529,151535,151545,151554,151564,151572,151580,151589,151593,151597,151605,151641,151645,151649,151674,151681],{"__ignoreMap":92},[97,151370,151371,151373,151375],{"class":99,"line":100},[97,151372,14885],{"class":319},[97,151374,8089],{"class":111},[97,151376,3930],{"class":103},[97,151378,151379,151381,151383],{"class":99,"line":195},[97,151380,30991],{"class":319},[97,151382,30994],{"class":370},[97,151384,151385],{"class":103},"(self, student_id, name, age, score):\n",[97,151387,151388,151390,151393,151395],{"class":99,"line":241},[97,151389,31035],{"class":370},[97,151391,151392],{"class":103},".student_id ",[97,151394,115],{"class":319},[97,151396,151397],{"class":103}," student_id\n",[97,151399,151400,151402,151404,151406],{"class":99,"line":1387},[97,151401,31035],{"class":370},[97,151403,149904],{"class":103},[97,151405,115],{"class":319},[97,151407,149909],{"class":103},[97,151409,151410,151412,151414,151416],{"class":99,"line":1393},[97,151411,31035],{"class":370},[97,151413,149916],{"class":103},[97,151415,115],{"class":319},[97,151417,149921],{"class":103},[97,151419,151420,151422,151424,151426],{"class":99,"line":1407},[97,151421,31035],{"class":370},[97,151423,149928],{"class":103},[97,151425,115],{"class":319},[97,151427,1771],{"class":103},[97,151429,151430],{"class":99,"line":1413},[97,151431,2591],{"emptyLinePlaceholder":249},[97,151433,151434,151436,151439],{"class":99,"line":1504},[97,151435,30991],{"class":319},[97,151437,151438],{"class":111}," is_passed",[97,151440,30997],{"class":103},[97,151442,151443,151445,151447,151449,151451],{"class":99,"line":1510},[97,151444,14943],{"class":319},[97,151446,39063],{"class":370},[97,151448,149928],{"class":103},[97,151450,1902],{"class":319},[97,151452,151453],{"class":370}," 60\n",[97,151455,151456],{"class":99,"line":1522},[97,151457,2591],{"emptyLinePlaceholder":249},[97,151459,151460,151462,151465],{"class":99,"line":1804},[97,151461,30991],{"class":319},[97,151463,151464],{"class":111}," to_dict",[97,151466,30997],{"class":103},[97,151468,151469,151471],{"class":99,"line":1809},[97,151470,14943],{"class":319},[97,151472,15762],{"class":103},[97,151474,151475,151478,151480,151482],{"class":99,"line":1815},[97,151476,151477],{"class":118},"            \"student_id\"",[97,151479,51621],{"class":103},[97,151481,31013],{"class":370},[97,151483,151484],{"class":103},".student_id,\n",[97,151486,151487,151490,151492,151494],{"class":99,"line":1820},[97,151488,151489],{"class":118},"            \"name\"",[97,151491,51621],{"class":103},[97,151493,31013],{"class":370},[97,151495,151496],{"class":103},".name,\n",[97,151498,151499,151502,151504,151506],{"class":99,"line":1834},[97,151500,151501],{"class":118},"            \"age\"",[97,151503,51621],{"class":103},[97,151505,31013],{"class":370},[97,151507,151508],{"class":103},".age,\n",[97,151510,151511,151514,151516,151518],{"class":99,"line":1839},[97,151512,151513],{"class":118},"            \"score\"",[97,151515,51621],{"class":103},[97,151517,31013],{"class":370},[97,151519,151520],{"class":103},".score,\n",[97,151522,151523],{"class":99,"line":1845},[97,151524,2720],{"class":103},[97,151526,151527],{"class":99,"line":1866},[97,151528,2591],{"emptyLinePlaceholder":249},[97,151530,151531,151533],{"class":99,"line":1871},[97,151532,151128],{"class":111},[97,151534,151131],{"class":370},[97,151536,151537,151539,151542],{"class":99,"line":1885},[97,151538,30991],{"class":319},[97,151540,151541],{"class":111}," from_dict",[97,151543,151544],{"class":103},"(cls, data):\n",[97,151546,151547,151549,151551],{"class":99,"line":1890},[97,151548,14943],{"class":319},[97,151550,151148],{"class":370},[97,151552,151553],{"class":103},"(\n",[97,151555,151556,151559,151562],{"class":99,"line":1919},[97,151557,151558],{"class":103},"            data[",[97,151560,151561],{"class":118},"\"student_id\"",[97,151563,88020],{"class":103},[97,151565,151566,151568,151570],{"class":99,"line":1924},[97,151567,151558],{"class":103},[97,151569,62863],{"class":118},[97,151571,88020],{"class":103},[97,151573,151574,151576,151578],{"class":99,"line":1941},[97,151575,151558],{"class":103},[97,151577,69308],{"class":118},[97,151579,88020],{"class":103},[97,151581,151582,151584,151587],{"class":99,"line":1946},[97,151583,151558],{"class":103},[97,151585,151586],{"class":118},"\"score\"",[97,151588,88020],{"class":103},[97,151590,151591],{"class":99,"line":1951},[97,151592,38316],{"class":103},[97,151594,151595],{"class":99,"line":1956},[97,151596,2591],{"emptyLinePlaceholder":249},[97,151598,151599,151601,151603],{"class":99,"line":1970},[97,151600,30991],{"class":319},[97,151602,150095],{"class":370},[97,151604,30997],{"class":103},[97,151606,151607,151609,151611,151613,151615,151618,151620,151623,151625,151627,151629,151631,151633,151635,151637,151639],{"class":99,"line":1975},[97,151608,14943],{"class":319},[97,151610,150104],{"class":319},[97,151612,571],{"class":118},[97,151614,149566],{"class":370},[97,151616,151617],{"class":103},".student_id",[97,151619,1265],{"class":370},[97,151621,151622],{"class":370}," {self",[97,151624,80485],{"class":103},[97,151626,1265],{"class":370},[97,151628,151622],{"class":370},[97,151630,80497],{"class":103},[97,151632,1265],{"class":370},[97,151634,151622],{"class":370},[97,151636,149976],{"class":103},[97,151638,1265],{"class":370},[97,151640,25323],{"class":118},[97,151642,151643],{"class":99,"line":2768},[97,151644,2591],{"emptyLinePlaceholder":249},[97,151646,151647],{"class":99,"line":2782},[97,151648,2591],{"emptyLinePlaceholder":249},[97,151650,151651,151653,151655,151657,151660,151662,151664,151666,151668,151670,151672],{"class":99,"line":2790},[97,151652,149595],{"class":103},[97,151654,115],{"class":319},[97,151656,149999],{"class":103},[97,151658,151659],{"class":118},"\"001\"",[97,151661,12626],{"class":103},[97,151663,150002],{"class":118},[97,151665,12626],{"class":103},[97,151667,970],{"class":370},[97,151669,12626],{"class":103},[97,151671,1308],{"class":370},[97,151673,329],{"class":103},[97,151675,151676,151678],{"class":99,"line":2795},[97,151677,30605],{"class":370},[97,151679,151680],{"class":103},"(student.is_passed())\n",[97,151682,151683,151685],{"class":99,"line":2801},[97,151684,30605],{"class":370},[97,151686,151687],{"class":103},"(student.to_dict())\n",[24,151689,151690,101202,151693,151696],{},[94,151691,151692],{},"to_dict()",[94,151694,151695],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151698,151700],{"id":151699},"_1116-易错点","11.16 易错点",[138,151702,151703,151709,151715,151720,151723,151726],{},[70,151704,151705,151706,28575],{},"类名推荐使用大驼峰，如 ",[94,151707,151708],{},"StudentManager",[70,151710,151711,151712,151714],{},"方法第一个参数必须写 ",[94,151713,31013],{},"，调用时不用传。",[70,151716,151717,151719],{},[94,151718,31019],{}," 不是普通方法，它在创建对象时自动执行。",[70,151721,151722],{},"私有属性不是绝对安全，只是约定和名称改写。",[70,151724,151725],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[70,151727,151728],{},"类中方法太多时，说明职责可能过重。",[14,151730,151732],{"id":151731},"_1117-本章练习","11.17 本章练习",[138,151734,151735,151741,151747,151752,151765],{},[70,151736,151737,151738,151740],{},"定义 ",[94,151739,149682],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[70,151742,151737,151743,151746],{},[94,151744,151745],{},"Account"," 类，实现存款、取款、查询余额。",[70,151748,151737,151749,151751],{},[94,151750,17416],{}," 类，计算圆的周长和面积。",[70,151753,151737,151754,532,151757,151760,151761,151764],{},[94,151755,151756],{},"Dog",[94,151758,151759],{},"Cat"," 类，并用同一个函数调用它们的 ",[94,151762,151763],{},"speak()"," 方法。",[70,151766,104550,151767,151769,151770,28575],{},[94,151768,151253],{}," 定义一个商品类 ",[94,151771,151772],{},"Product",[231,151774,151775],{},"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":92,"searchDepth":195,"depth":195,"links":151777},[151778,151779,151780,151781,151782,151783,151785,151786,151787,151788,151789,151790,151791,151795,151796,151797,151798],{"id":149446,"depth":195,"text":149447},{"id":149629,"depth":195,"text":149630},{"id":149693,"depth":195,"text":149694},{"id":149770,"depth":195,"text":149771},{"id":149869,"depth":195,"text":149870},{"id":150033,"depth":195,"text":151784},"11.6 str",{"id":150159,"depth":195,"text":150160},{"id":150425,"depth":195,"text":150426},{"id":150539,"depth":195,"text":150540},{"id":150694,"depth":195,"text":150695},{"id":150818,"depth":195,"text":150819},{"id":150934,"depth":195,"text":150935},{"id":151083,"depth":195,"text":151084,"children":151792},[151793,151794],{"id":151087,"depth":241,"text":151088},{"id":151169,"depth":241,"text":151170},{"id":151247,"depth":195,"text":151248},{"id":151362,"depth":195,"text":151363},{"id":151699,"depth":195,"text":151700},{"id":151731,"depth":195,"text":151732},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149438,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151805,"title":151806,"body":151807,"description":246,"extension":247,"meta":155120,"navigation":249,"path":155121,"seo":155122,"stem":155123,"__hash__":155124},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151808,"toc":155096},[151809,151812,151816,151819,151822,151851,151854,151862,151866,151870,151873,151896,151899,151905,151909,153355,153358,153379,153383,153386,153398,153401,153585,153588,153714,153717,153721,153725,153861,153865,153951,153955,154037,154041,154078,154082,154271,154275,154278,154508,154512,154515,154696,154699,154703,154706,154712,154715,154741,154745,154748,154762,154765,154790,154793,154807,154810,154827,154830,154847,154850,154867,154871,154897,154901,154924,154928,154931,154933,154939,154941,154962,154965,154971,154977,154981,154984,155060,155063,155067,155093],[10,151810,151806],{"id":151811},"_12-综合案例与复习路线",[14,151813,151815],{"id":151814},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[24,151817,151818],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[24,151820,151821],{},"一个合格的入门综合项目最好覆盖：",[138,151823,151824,151827,151830,151833,151836,151839,151842,151845,151848],{},[70,151825,151826],{},"输入输出。",[70,151828,151829],{},"判断和循环。",[70,151831,151832],{},"函数拆分。",[70,151834,151835],{},"列表、字典等容器。",[70,151837,151838],{},"文件持久化。",[70,151840,151841],{},"异常处理。",[70,151843,151844],{},"模块拆分。",[70,151846,151847],{},"可选：面向对象。",[70,151849,151850],{},"可选：数据可视化。",[24,151852,151853],{},"本章整理两个方向：",[138,151855,151856,151859],{},[70,151857,151858],{},"学生管理系统。",[70,151860,151861],{},"销售数据统计和可视化。",[14,151863,151865],{"id":151864},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[48,151867,151869],{"id":151868},"_1221-需求","12.2.1 需求",[24,151871,151872],{},"实现一个命令行学生管理系统：",[138,151874,151875,151878,151881,151884,151887,151890,151893],{},[70,151876,151877],{},"添加学生。",[70,151879,151880],{},"删除学生。",[70,151882,151883],{},"修改学生。",[70,151885,151886],{},"查询学生。",[70,151888,151889],{},"显示所有学生。",[70,151891,151892],{},"保存到 JSON 文件。",[70,151894,151895],{},"程序启动时自动读取 JSON 文件。",[24,151897,151898],{},"学生字段：",[87,151900,151903],{"className":151901,"code":151902,"language":5378,"meta":92},[5376],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[94,151904,151902],{"__ignoreMap":92},[14,151906,151908],{"id":151907},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[87,151910,151912],{"className":30568,"code":151911,"language":30570,"meta":92,"style":92},"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",[94,151913,151914,151920,151930,151934,151948,151952,151956,151965,151977,151983,151987,151993,152024,152034,152041,152052,152058,152062,152066,152076,152107,152133,152137,152141,152150,152161,152172,152183,152194,152205,152216,152227,152231,152235,152245,152257,152273,152280,152287,152291,152295,152305,152313,152320,152333,152343,152354,152358,152362,152371,152379,152385,152397,152405,152416,152420,152424,152433,152449,152453,152460,152471,152476,152480,152496,152511,152526,152530,152535,152543,152551,152559,152567,152571,152576,152587,152591,152595,152604,152619,152629,152633,152645,152656,152660,152664,152669,152673,152684,152688,152692,152701,152716,152724,152728,152740,152750,152754,152758,152773,152786,152799,152803,152816,152828,152840,152844,152848,152859,152863,152867,152876,152891,152899,152903,152915,152925,152929,152933,152938,152942,152946,152956,152962,152984,153003,153022,153041,153046,153050,153054,153063,153071,153082,153086,153090,153116,153126,153131,153135,153139,153147,153157,153161,153169,153174,153190,153194,153208,153213,153227,153232,153245,153250,153263,153268,153281,153286,153299,153310,153314,153320,153331,153335,153339,153351],{"__ignoreMap":92},[97,151915,151916,151918],{"class":99,"line":100},[97,151917,30582],{"class":319},[97,151919,147205],{"class":103},[97,151921,151922,151924,151926,151928],{"class":99,"line":195},[97,151923,30927],{"class":319},[97,151925,108495],{"class":103},[97,151927,30582],{"class":319},[97,151929,108500],{"class":103},[97,151931,151932],{"class":99,"line":241},[97,151933,2591],{"emptyLinePlaceholder":249},[97,151935,151936,151939,151941,151943,151946],{"class":99,"line":1387},[97,151937,151938],{"class":370},"DATA_FILE",[97,151940,13755],{"class":319},[97,151942,108729],{"class":103},[97,151944,151945],{"class":118},"\"students.json\"",[97,151947,329],{"class":103},[97,151949,151950],{"class":99,"line":1393},[97,151951,2591],{"emptyLinePlaceholder":249},[97,151953,151954],{"class":99,"line":1407},[97,151955,2591],{"emptyLinePlaceholder":249},[97,151957,151958,151960,151963],{"class":99,"line":1413},[97,151959,32137],{"class":319},[97,151961,151962],{"class":111}," load_students",[97,151964,32143],{"class":103},[97,151966,151967,151969,151971,151974],{"class":99,"line":1504},[97,151968,3292],{"class":319},[97,151970,39120],{"class":319},[97,151972,151973],{"class":370}," DATA_FILE",[97,151975,151976],{"class":103},".exists():\n",[97,151978,151979,151981],{"class":99,"line":1510},[97,151980,14943],{"class":319},[97,151982,52022],{"class":103},[97,151984,151985],{"class":99,"line":1522},[97,151986,2591],{"emptyLinePlaceholder":249},[97,151988,151989,151991],{"class":99,"line":1804},[97,151990,125968],{"class":319},[97,151992,3930],{"class":103},[97,151994,151995,151998,152000,152002,152004,152006,152008,152010,152012,152014,152016,152018,152020,152022],{"class":99,"line":1809},[97,151996,151997],{"class":319},"        with",[97,151999,146905],{"class":370},[97,152001,323],{"class":103},[97,152003,151938],{"class":370},[97,152005,12626],{"class":103},[97,152007,146915],{"class":118},[97,152009,12626],{"class":103},[97,152011,146920],{"class":5407},[97,152013,115],{"class":319},[97,152015,146925],{"class":118},[97,152017,13905],{"class":103},[97,152019,31573],{"class":319},[97,152021,148267],{"class":5407},[97,152023,3930],{"class":103},[97,152025,152026,152028,152030,152032],{"class":99,"line":1815},[97,152027,15922],{"class":319},[97,152029,148278],{"class":103},[97,152031,45544],{"class":5407},[97,152033,329],{"class":103},[97,152035,152036,152038],{"class":99,"line":1820},[97,152037,125996],{"class":319},[97,152039,152040],{"class":103}," json.JSONDecodeError:\n",[97,152042,152043,152045,152047,152050],{"class":99,"line":1834},[97,152044,32641],{"class":370},[97,152046,323],{"class":103},[97,152048,152049],{"class":118},"\"数据文件格式错误，已使用空数据启动\"",[97,152051,329],{"class":103},[97,152053,152054,152056],{"class":99,"line":1839},[97,152055,14943],{"class":319},[97,152057,52022],{"class":103},[97,152059,152060],{"class":99,"line":1845},[97,152061,2591],{"emptyLinePlaceholder":249},[97,152063,152064],{"class":99,"line":1866},[97,152065,2591],{"emptyLinePlaceholder":249},[97,152067,152068,152070,152073],{"class":99,"line":1871},[97,152069,32137],{"class":319},[97,152071,152072],{"class":111}," save_students",[97,152074,152075],{"class":103},"(students):\n",[97,152077,152078,152080,152082,152084,152086,152088,152091,152093,152095,152097,152099,152101,152103,152105],{"class":99,"line":1885},[97,152079,34368],{"class":319},[97,152081,146905],{"class":370},[97,152083,323],{"class":103},[97,152085,151938],{"class":370},[97,152087,12626],{"class":103},[97,152089,152090],{"class":118},"\"w\"",[97,152092,12626],{"class":103},[97,152094,146920],{"class":5407},[97,152096,115],{"class":319},[97,152098,146925],{"class":118},[97,152100,13905],{"class":103},[97,152102,31573],{"class":319},[97,152104,148267],{"class":5407},[97,152106,3930],{"class":103},[97,152108,152109,152112,152114,152116,152118,152120,152122,152124,152127,152129,152131],{"class":99,"line":1890},[97,152110,152111],{"class":103},"        json.dump(students, ",[97,152113,45544],{"class":5407},[97,152115,12626],{"class":103},[97,152117,147251],{"class":5407},[97,152119,115],{"class":319},[97,152121,34177],{"class":370},[97,152123,12626],{"class":103},[97,152125,152126],{"class":5407},"indent",[97,152128,115],{"class":319},[97,152130,398],{"class":370},[97,152132,329],{"class":103},[97,152134,152135],{"class":99,"line":1919},[97,152136,2591],{"emptyLinePlaceholder":249},[97,152138,152139],{"class":99,"line":1924},[97,152140,2591],{"emptyLinePlaceholder":249},[97,152142,152143,152145,152148],{"class":99,"line":1941},[97,152144,32137],{"class":319},[97,152146,152147],{"class":111}," show_menu",[97,152149,32143],{"class":103},[97,152151,152152,152154,152156,152159],{"class":99,"line":1946},[97,152153,31489],{"class":370},[97,152155,323],{"class":103},[97,152157,152158],{"class":118},"\"====== 学生管理系统 ======\"",[97,152160,329],{"class":103},[97,152162,152163,152165,152167,152170],{"class":99,"line":1951},[97,152164,31489],{"class":370},[97,152166,323],{"class":103},[97,152168,152169],{"class":118},"\"1. 添加学生\"",[97,152171,329],{"class":103},[97,152173,152174,152176,152178,152181],{"class":99,"line":1956},[97,152175,31489],{"class":370},[97,152177,323],{"class":103},[97,152179,152180],{"class":118},"\"2. 删除学生\"",[97,152182,329],{"class":103},[97,152184,152185,152187,152189,152192],{"class":99,"line":1970},[97,152186,31489],{"class":370},[97,152188,323],{"class":103},[97,152190,152191],{"class":118},"\"3. 修改学生\"",[97,152193,329],{"class":103},[97,152195,152196,152198,152200,152203],{"class":99,"line":1975},[97,152197,31489],{"class":370},[97,152199,323],{"class":103},[97,152201,152202],{"class":118},"\"4. 查询学生\"",[97,152204,329],{"class":103},[97,152206,152207,152209,152211,152214],{"class":99,"line":2768},[97,152208,31489],{"class":370},[97,152210,323],{"class":103},[97,152212,152213],{"class":118},"\"5. 显示所有学生\"",[97,152215,329],{"class":103},[97,152217,152218,152220,152222,152225],{"class":99,"line":2782},[97,152219,31489],{"class":370},[97,152221,323],{"class":103},[97,152223,152224],{"class":118},"\"0. 退出系统\"",[97,152226,329],{"class":103},[97,152228,152229],{"class":99,"line":2790},[97,152230,2591],{"emptyLinePlaceholder":249},[97,152232,152233],{"class":99,"line":2795},[97,152234,2591],{"emptyLinePlaceholder":249},[97,152236,152237,152239,152242],{"class":99,"line":2801},[97,152238,32137],{"class":319},[97,152240,152241],{"class":111}," find_student",[97,152243,152244],{"class":103},"(students, student_id):\n",[97,152246,152247,152249,152252,152254],{"class":99,"line":2807},[97,152248,3392],{"class":319},[97,152250,152251],{"class":103}," student ",[97,152253,26233],{"class":319},[97,152255,152256],{"class":103}," students:\n",[97,152258,152259,152261,152264,152266,152268,152270],{"class":99,"line":2812},[97,152260,2688],{"class":319},[97,152262,152263],{"class":103}," student[",[97,152265,151561],{"class":118},[97,152267,4634],{"class":103},[97,152269,3140],{"class":319},[97,152271,152272],{"class":103}," student_id:\n",[97,152274,152275,152277],{"class":99,"line":8139},[97,152276,15922],{"class":319},[97,152278,152279],{"class":103}," student\n",[97,152281,152282,152284],{"class":99,"line":8163},[97,152283,4281],{"class":319},[97,152285,152286],{"class":370}," None\n",[97,152288,152289],{"class":99,"line":8168},[97,152290,2591],{"emptyLinePlaceholder":249},[97,152292,152293],{"class":99,"line":8174},[97,152294,2591],{"emptyLinePlaceholder":249},[97,152296,152297,152299,152302],{"class":99,"line":8201},[97,152298,32137],{"class":319},[97,152300,152301],{"class":111}," input_int",[97,152303,152304],{"class":103},"(prompt):\n",[97,152306,152307,152309,152311],{"class":99,"line":8206},[97,152308,2442],{"class":319},[97,152310,95476],{"class":370},[97,152312,3930],{"class":103},[97,152314,152315,152318],{"class":99,"line":8212},[97,152316,152317],{"class":319},"        try",[97,152319,3930],{"class":103},[97,152321,152322,152324,152326,152328,152330],{"class":99,"line":8224},[97,152323,15922],{"class":319},[97,152325,2573],{"class":370},[97,152327,323],{"class":103},[97,152329,54005],{"class":370},[97,152331,152332],{"class":103},"(prompt))\n",[97,152334,152335,152338,152341],{"class":99,"line":8236},[97,152336,152337],{"class":319},"        except",[97,152339,152340],{"class":370}," ValueError",[97,152342,3930],{"class":103},[97,152344,152345,152347,152349,152352],{"class":99,"line":8248},[97,152346,34840],{"class":370},[97,152348,323],{"class":103},[97,152350,152351],{"class":118},"\"请输入整数\"",[97,152353,329],{"class":103},[97,152355,152356],{"class":99,"line":9907},[97,152357,2591],{"emptyLinePlaceholder":249},[97,152359,152360],{"class":99,"line":9932},[97,152361,2591],{"emptyLinePlaceholder":249},[97,152363,152364,152366,152369],{"class":99,"line":9955},[97,152365,32137],{"class":319},[97,152367,152368],{"class":111}," input_float",[97,152370,152304],{"class":103},[97,152372,152373,152375,152377],{"class":99,"line":9979},[97,152374,2442],{"class":319},[97,152376,95476],{"class":370},[97,152378,3930],{"class":103},[97,152380,152381,152383],{"class":99,"line":9984},[97,152382,152317],{"class":319},[97,152384,3930],{"class":103},[97,152386,152387,152389,152391,152393,152395],{"class":99,"line":9989},[97,152388,15922],{"class":319},[97,152390,109981],{"class":370},[97,152392,323],{"class":103},[97,152394,54005],{"class":370},[97,152396,152332],{"class":103},[97,152398,152399,152401,152403],{"class":99,"line":9994},[97,152400,152337],{"class":319},[97,152402,152340],{"class":370},[97,152404,3930],{"class":103},[97,152406,152407,152409,152411,152414],{"class":99,"line":10003},[97,152408,34840],{"class":370},[97,152410,323],{"class":103},[97,152412,152413],{"class":118},"\"请输入数字\"",[97,152415,329],{"class":103},[97,152417,152418],{"class":99,"line":10008},[97,152419,2591],{"emptyLinePlaceholder":249},[97,152421,152422],{"class":99,"line":10014},[97,152423,2591],{"emptyLinePlaceholder":249},[97,152425,152426,152428,152431],{"class":99,"line":10035},[97,152427,32137],{"class":319},[97,152429,152430],{"class":111}," add_student",[97,152432,152075],{"class":103},[97,152434,152435,152438,152440,152442,152444,152447],{"class":99,"line":10041},[97,152436,152437],{"class":103},"    student_id ",[97,152439,115],{"class":319},[97,152441,60789],{"class":370},[97,152443,323],{"class":103},[97,152445,152446],{"class":118},"\"请输入学号:\"",[97,152448,329],{"class":103},[97,152450,152451],{"class":99,"line":10055},[97,152452,2591],{"emptyLinePlaceholder":249},[97,152454,152455,152457],{"class":99,"line":10061},[97,152456,3292],{"class":319},[97,152458,152459],{"class":103}," find_student(students, student_id):\n",[97,152461,152462,152464,152466,152469],{"class":99,"line":10088},[97,152463,32641],{"class":370},[97,152465,323],{"class":103},[97,152467,152468],{"class":118},"\"学号已存在\"",[97,152470,329],{"class":103},[97,152472,152473],{"class":99,"line":10097},[97,152474,152475],{"class":319},"        return\n",[97,152477,152478],{"class":99,"line":10103},[97,152479,2591],{"emptyLinePlaceholder":249},[97,152481,152482,152485,152487,152489,152491,152494],{"class":99,"line":10111},[97,152483,152484],{"class":103},"    name ",[97,152486,115],{"class":319},[97,152488,60789],{"class":370},[97,152490,323],{"class":103},[97,152492,152493],{"class":118},"\"请输入姓名:\"",[97,152495,329],{"class":103},[97,152497,152498,152501,152503,152506,152509],{"class":99,"line":10116},[97,152499,152500],{"class":103},"    age ",[97,152502,115],{"class":319},[97,152504,152505],{"class":103}," input_int(",[97,152507,152508],{"class":118},"\"请输入年龄:\"",[97,152510,329],{"class":103},[97,152512,152513,152516,152518,152521,152524],{"class":99,"line":16794},[97,152514,152515],{"class":103},"    score ",[97,152517,115],{"class":319},[97,152519,152520],{"class":103}," input_float(",[97,152522,152523],{"class":118},"\"请输入成绩:\"",[97,152525,329],{"class":103},[97,152527,152528],{"class":99,"line":16800},[97,152529,2591],{"emptyLinePlaceholder":249},[97,152531,152532],{"class":99,"line":16823},[97,152533,152534],{"class":103},"    students.append({\n",[97,152536,152537,152540],{"class":99,"line":16829},[97,152538,152539],{"class":118},"        \"student_id\"",[97,152541,152542],{"class":103},": student_id,\n",[97,152544,152545,152548],{"class":99,"line":16852},[97,152546,152547],{"class":118},"        \"name\"",[97,152549,152550],{"class":103},": name,\n",[97,152552,152553,152556],{"class":99,"line":16866},[97,152554,152555],{"class":118},"        \"age\"",[97,152557,152558],{"class":103},": age,\n",[97,152560,152561,152564],{"class":99,"line":16886},[97,152562,152563],{"class":118},"        \"score\"",[97,152565,152566],{"class":103},": score,\n",[97,152568,152569],{"class":99,"line":16892},[97,152570,33651],{"class":103},[97,152572,152573],{"class":99,"line":16903},[97,152574,152575],{"class":103},"    save_students(students)\n",[97,152577,152578,152580,152582,152585],{"class":99,"line":16926},[97,152579,31489],{"class":370},[97,152581,323],{"class":103},[97,152583,152584],{"class":118},"\"添加成功\"",[97,152586,329],{"class":103},[97,152588,152589],{"class":99,"line":16948},[97,152590,2591],{"emptyLinePlaceholder":249},[97,152592,152593],{"class":99,"line":16953},[97,152594,2591],{"emptyLinePlaceholder":249},[97,152596,152597,152599,152602],{"class":99,"line":16959},[97,152598,32137],{"class":319},[97,152600,152601],{"class":111}," delete_student",[97,152603,152075],{"class":103},[97,152605,152606,152608,152610,152612,152614,152617],{"class":99,"line":16973},[97,152607,152437],{"class":103},[97,152609,115],{"class":319},[97,152611,60789],{"class":370},[97,152613,323],{"class":103},[97,152615,152616],{"class":118},"\"请输入要删除的学号:\"",[97,152618,329],{"class":103},[97,152620,152621,152624,152626],{"class":99,"line":16986},[97,152622,152623],{"class":103},"    student ",[97,152625,115],{"class":319},[97,152627,152628],{"class":103}," find_student(students, student_id)\n",[97,152630,152631],{"class":99,"line":16991},[97,152632,2591],{"emptyLinePlaceholder":249},[97,152634,152635,152637,152639,152641,152643],{"class":99,"line":17005},[97,152636,3292],{"class":319},[97,152638,152251],{"class":103},[97,152640,39117],{"class":319},[97,152642,39123],{"class":370},[97,152644,3930],{"class":103},[97,152646,152647,152649,152651,152654],{"class":99,"line":17010},[97,152648,32641],{"class":370},[97,152650,323],{"class":103},[97,152652,152653],{"class":118},"\"学生不存在\"",[97,152655,329],{"class":103},[97,152657,152658],{"class":99,"line":17016},[97,152659,152475],{"class":319},[97,152661,152662],{"class":99,"line":17021},[97,152663,2591],{"emptyLinePlaceholder":249},[97,152665,152666],{"class":99,"line":17035},[97,152667,152668],{"class":103},"    students.remove(student)\n",[97,152670,152671],{"class":99,"line":17040},[97,152672,152575],{"class":103},[97,152674,152675,152677,152679,152682],{"class":99,"line":17045},[97,152676,31489],{"class":370},[97,152678,323],{"class":103},[97,152680,152681],{"class":118},"\"删除成功\"",[97,152683,329],{"class":103},[97,152685,152686],{"class":99,"line":17059},[97,152687,2591],{"emptyLinePlaceholder":249},[97,152689,152690],{"class":99,"line":17071},[97,152691,2591],{"emptyLinePlaceholder":249},[97,152693,152694,152696,152699],{"class":99,"line":17076},[97,152695,32137],{"class":319},[97,152697,152698],{"class":111}," update_student",[97,152700,152075],{"class":103},[97,152702,152703,152705,152707,152709,152711,152714],{"class":99,"line":17089},[97,152704,152437],{"class":103},[97,152706,115],{"class":319},[97,152708,60789],{"class":370},[97,152710,323],{"class":103},[97,152712,152713],{"class":118},"\"请输入要修改的学号:\"",[97,152715,329],{"class":103},[97,152717,152718,152720,152722],{"class":99,"line":17094},[97,152719,152623],{"class":103},[97,152721,115],{"class":319},[97,152723,152628],{"class":103},[97,152725,152726],{"class":99,"line":17099},[97,152727,2591],{"emptyLinePlaceholder":249},[97,152729,152730,152732,152734,152736,152738],{"class":99,"line":17104},[97,152731,3292],{"class":319},[97,152733,152251],{"class":103},[97,152735,39117],{"class":319},[97,152737,39123],{"class":370},[97,152739,3930],{"class":103},[97,152741,152742,152744,152746,152748],{"class":99,"line":17117},[97,152743,32641],{"class":370},[97,152745,323],{"class":103},[97,152747,152653],{"class":118},[97,152749,329],{"class":103},[97,152751,152752],{"class":99,"line":17122},[97,152753,152475],{"class":319},[97,152755,152756],{"class":99,"line":32823},[97,152757,2591],{"emptyLinePlaceholder":249},[97,152759,152760,152762,152764,152766,152768,152771],{"class":99,"line":32829},[97,152761,152484],{"class":103},[97,152763,115],{"class":319},[97,152765,60789],{"class":370},[97,152767,323],{"class":103},[97,152769,152770],{"class":118},"\"请输入新姓名:\"",[97,152772,329],{"class":103},[97,152774,152775,152777,152779,152781,152784],{"class":99,"line":32835},[97,152776,152500],{"class":103},[97,152778,115],{"class":319},[97,152780,152505],{"class":103},[97,152782,152783],{"class":118},"\"请输入新年龄:\"",[97,152785,329],{"class":103},[97,152787,152788,152790,152792,152794,152797],{"class":99,"line":32841},[97,152789,152515],{"class":103},[97,152791,115],{"class":319},[97,152793,152520],{"class":103},[97,152795,152796],{"class":118},"\"请输入新成绩:\"",[97,152798,329],{"class":103},[97,152800,152801],{"class":99,"line":32847},[97,152802,2591],{"emptyLinePlaceholder":249},[97,152804,152805,152808,152810,152812,152814],{"class":99,"line":32858},[97,152806,152807],{"class":103},"    student[",[97,152809,62863],{"class":118},[97,152811,4634],{"class":103},[97,152813,115],{"class":319},[97,152815,149909],{"class":103},[97,152817,152818,152820,152822,152824,152826],{"class":99,"line":32864},[97,152819,152807],{"class":103},[97,152821,69308],{"class":118},[97,152823,4634],{"class":103},[97,152825,115],{"class":319},[97,152827,149921],{"class":103},[97,152829,152830,152832,152834,152836,152838],{"class":99,"line":32884},[97,152831,152807],{"class":103},[97,152833,151586],{"class":118},[97,152835,4634],{"class":103},[97,152837,115],{"class":319},[97,152839,1771],{"class":103},[97,152841,152842],{"class":99,"line":32890},[97,152843,2591],{"emptyLinePlaceholder":249},[97,152845,152846],{"class":99,"line":32901},[97,152847,152575],{"class":103},[97,152849,152850,152852,152854,152857],{"class":99,"line":32907},[97,152851,31489],{"class":370},[97,152853,323],{"class":103},[97,152855,152856],{"class":118},"\"修改成功\"",[97,152858,329],{"class":103},[97,152860,152861],{"class":99,"line":32913},[97,152862,2591],{"emptyLinePlaceholder":249},[97,152864,152865],{"class":99,"line":32919},[97,152866,2591],{"emptyLinePlaceholder":249},[97,152868,152869,152871,152874],{"class":99,"line":32925},[97,152870,32137],{"class":319},[97,152872,152873],{"class":111}," query_student",[97,152875,152075],{"class":103},[97,152877,152878,152880,152882,152884,152886,152889],{"class":99,"line":32931},[97,152879,152437],{"class":103},[97,152881,115],{"class":319},[97,152883,60789],{"class":370},[97,152885,323],{"class":103},[97,152887,152888],{"class":118},"\"请输入要查询的学号:\"",[97,152890,329],{"class":103},[97,152892,152893,152895,152897],{"class":99,"line":32937},[97,152894,152623],{"class":103},[97,152896,115],{"class":319},[97,152898,152628],{"class":103},[97,152900,152901],{"class":99,"line":32943},[97,152902,2591],{"emptyLinePlaceholder":249},[97,152904,152905,152907,152909,152911,152913],{"class":99,"line":32963},[97,152906,3292],{"class":319},[97,152908,152251],{"class":103},[97,152910,39117],{"class":319},[97,152912,39123],{"class":370},[97,152914,3930],{"class":103},[97,152916,152917,152919,152921,152923],{"class":99,"line":32969},[97,152918,32641],{"class":370},[97,152920,323],{"class":103},[97,152922,152653],{"class":118},[97,152924,329],{"class":103},[97,152926,152927],{"class":99,"line":32985},[97,152928,152475],{"class":319},[97,152930,152931],{"class":99,"line":32991},[97,152932,2591],{"emptyLinePlaceholder":249},[97,152934,152935],{"class":99,"line":33005},[97,152936,152937],{"class":103},"    print_student(student)\n",[97,152939,152940],{"class":99,"line":33011},[97,152941,2591],{"emptyLinePlaceholder":249},[97,152943,152944],{"class":99,"line":33026},[97,152945,2591],{"emptyLinePlaceholder":249},[97,152947,152948,152950,152953],{"class":99,"line":33032},[97,152949,32137],{"class":319},[97,152951,152952],{"class":111}," print_student",[97,152954,152955],{"class":103},"(student):\n",[97,152957,152958,152960],{"class":99,"line":33041},[97,152959,31489],{"class":370},[97,152961,151553],{"class":103},[97,152963,152964,152967,152969,152971,152974,152977,152979,152982],{"class":99,"line":33047},[97,152965,152966],{"class":319},"        f",[97,152968,571],{"class":118},[97,152970,1216],{"class":370},[97,152972,152973],{"class":103},"student[",[97,152975,152976],{"class":118},"'student_id'",[97,152978,1259],{"class":103},[97,152980,152981],{"class":370},"}\\t",[97,152983,25323],{"class":118},[97,152985,152986,152988,152990,152992,152994,152997,152999,153001],{"class":99,"line":33056},[97,152987,152966],{"class":319},[97,152989,571],{"class":118},[97,152991,1216],{"class":370},[97,152993,152973],{"class":103},[97,152995,152996],{"class":118},"'name'",[97,152998,1259],{"class":103},[97,153000,152981],{"class":370},[97,153002,25323],{"class":118},[97,153004,153005,153007,153009,153011,153013,153016,153018,153020],{"class":99,"line":33062},[97,153006,152966],{"class":319},[97,153008,571],{"class":118},[97,153010,1216],{"class":370},[97,153012,152973],{"class":103},[97,153014,153015],{"class":118},"'age'",[97,153017,1259],{"class":103},[97,153019,152981],{"class":370},[97,153021,25323],{"class":118},[97,153023,153024,153026,153028,153030,153032,153035,153037,153039],{"class":99,"line":33068},[97,153025,152966],{"class":319},[97,153027,571],{"class":118},[97,153029,1216],{"class":370},[97,153031,152973],{"class":103},[97,153033,153034],{"class":118},"'score'",[97,153036,1259],{"class":103},[97,153038,1265],{"class":370},[97,153040,25323],{"class":118},[97,153042,153043],{"class":99,"line":33077},[97,153044,153045],{"class":103},"    )\n",[97,153047,153048],{"class":99,"line":33083},[97,153049,2591],{"emptyLinePlaceholder":249},[97,153051,153052],{"class":99,"line":33094},[97,153053,2591],{"emptyLinePlaceholder":249},[97,153055,153056,153058,153061],{"class":99,"line":33100},[97,153057,32137],{"class":319},[97,153059,153060],{"class":111}," show_all_students",[97,153062,152075],{"class":103},[97,153064,153065,153067,153069],{"class":99,"line":33119},[97,153066,3292],{"class":319},[97,153068,39120],{"class":319},[97,153070,152256],{"class":103},[97,153072,153073,153075,153077,153080],{"class":99,"line":33125},[97,153074,32641],{"class":370},[97,153076,323],{"class":103},[97,153078,153079],{"class":118},"\"暂无学生\"",[97,153081,329],{"class":103},[97,153083,153084],{"class":99,"line":33136},[97,153085,152475],{"class":319},[97,153087,153088],{"class":99,"line":33142},[97,153089,2591],{"emptyLinePlaceholder":249},[97,153091,153092,153094,153096,153099,153101,153104,153106,153109,153111,153114],{"class":99,"line":33162},[97,153093,31489],{"class":370},[97,153095,323],{"class":103},[97,153097,153098],{"class":118},"\"学号",[97,153100,1423],{"class":370},[97,153102,153103],{"class":118},"姓名",[97,153105,1423],{"class":370},[97,153107,153108],{"class":118},"年龄",[97,153110,1423],{"class":370},[97,153112,153113],{"class":118},"成绩\"",[97,153115,329],{"class":103},[97,153117,153118,153120,153122,153124],{"class":99,"line":33178},[97,153119,3392],{"class":319},[97,153121,152251],{"class":103},[97,153123,26233],{"class":319},[97,153125,152256],{"class":103},[97,153127,153128],{"class":99,"line":33184},[97,153129,153130],{"class":103},"        print_student(student)\n",[97,153132,153133],{"class":99,"line":33198},[97,153134,2591],{"emptyLinePlaceholder":249},[97,153136,153137],{"class":99,"line":33204},[97,153138,2591],{"emptyLinePlaceholder":249},[97,153140,153141,153143,153145],{"class":99,"line":33210},[97,153142,32137],{"class":319},[97,153144,2164],{"class":111},[97,153146,32143],{"class":103},[97,153148,153149,153152,153154],{"class":99,"line":33221},[97,153150,153151],{"class":103},"    students ",[97,153153,115],{"class":319},[97,153155,153156],{"class":103}," load_students()\n",[97,153158,153159],{"class":99,"line":33227},[97,153160,2591],{"emptyLinePlaceholder":249},[97,153162,153163,153165,153167],{"class":99,"line":33233},[97,153164,2442],{"class":319},[97,153166,95476],{"class":370},[97,153168,3930],{"class":103},[97,153170,153171],{"class":99,"line":33243},[97,153172,153173],{"class":103},"        show_menu()\n",[97,153175,153176,153179,153181,153183,153185,153188],{"class":99,"line":33249},[97,153177,153178],{"class":103},"        choice ",[97,153180,115],{"class":319},[97,153182,60789],{"class":370},[97,153184,323],{"class":103},[97,153186,153187],{"class":118},"\"请输入操作:\"",[97,153189,329],{"class":103},[97,153191,153192],{"class":99,"line":33260},[97,153193,2591],{"emptyLinePlaceholder":249},[97,153195,153196,153198,153201,153203,153206],{"class":99,"line":33266},[97,153197,2688],{"class":319},[97,153199,153200],{"class":103}," choice ",[97,153202,3140],{"class":319},[97,153204,153205],{"class":118}," \"1\"",[97,153207,3930],{"class":103},[97,153209,153210],{"class":99,"line":33276},[97,153211,153212],{"class":103},"            add_student(students)\n",[97,153214,153215,153218,153220,153222,153225],{"class":99,"line":33281},[97,153216,153217],{"class":319},"        elif",[97,153219,153200],{"class":103},[97,153221,3140],{"class":319},[97,153223,153224],{"class":118}," \"2\"",[97,153226,3930],{"class":103},[97,153228,153229],{"class":99,"line":33287},[97,153230,153231],{"class":103},"            delete_student(students)\n",[97,153233,153234,153236,153238,153240,153243],{"class":99,"line":33336},[97,153235,153217],{"class":319},[97,153237,153200],{"class":103},[97,153239,3140],{"class":319},[97,153241,153242],{"class":118}," \"3\"",[97,153244,3930],{"class":103},[97,153246,153247],{"class":99,"line":33383},[97,153248,153249],{"class":103},"            update_student(students)\n",[97,153251,153252,153254,153256,153258,153261],{"class":99,"line":33388},[97,153253,153217],{"class":319},[97,153255,153200],{"class":103},[97,153257,3140],{"class":319},[97,153259,153260],{"class":118}," \"4\"",[97,153262,3930],{"class":103},[97,153264,153265],{"class":99,"line":33394},[97,153266,153267],{"class":103},"            query_student(students)\n",[97,153269,153270,153272,153274,153276,153279],{"class":99,"line":33413},[97,153271,153217],{"class":319},[97,153273,153200],{"class":103},[97,153275,3140],{"class":319},[97,153277,153278],{"class":118}," \"5\"",[97,153280,3930],{"class":103},[97,153282,153283],{"class":99,"line":33419},[97,153284,153285],{"class":103},"            show_all_students(students)\n",[97,153287,153288,153290,153292,153294,153297],{"class":99,"line":33439},[97,153289,153217],{"class":319},[97,153291,153200],{"class":103},[97,153293,3140],{"class":319},[97,153295,153296],{"class":118}," \"0\"",[97,153298,3930],{"class":103},[97,153300,153301,153303,153305,153308],{"class":99,"line":33445},[97,153302,34840],{"class":370},[97,153304,323],{"class":103},[97,153306,153307],{"class":118},"\"退出系统\"",[97,153309,329],{"class":103},[97,153311,153312],{"class":99,"line":33451},[97,153313,115282],{"class":319},[97,153315,153316,153318],{"class":99,"line":33461},[97,153317,2725],{"class":319},[97,153319,3930],{"class":103},[97,153321,153322,153324,153326,153329],{"class":99,"line":33466},[97,153323,34840],{"class":370},[97,153325,323],{"class":103},[97,153327,153328],{"class":118},"\"输入错误\"",[97,153330,329],{"class":103},[97,153332,153333],{"class":99,"line":33472},[97,153334,2591],{"emptyLinePlaceholder":249},[97,153336,153337],{"class":99,"line":33488},[97,153338,2591],{"emptyLinePlaceholder":249},[97,153340,153341,153343,153345,153347,153349],{"class":99,"line":33533},[97,153342,1723],{"class":319},[97,153344,31410],{"class":370},[97,153346,101743],{"class":319},[97,153348,101746],{"class":118},[97,153350,3930],{"class":103},[97,153352,153353],{"class":99,"line":33539},[97,153354,101753],{"class":103},[24,153356,153357],{},"这个项目串联了：",[138,153359,153360,153363,153366,153369,153372,153374],{},[70,153361,153362],{},"菜单循环。",[70,153364,153365],{},"函数封装。",[70,153367,153368],{},"列表字典。",[70,153370,153371],{},"JSON 读写。",[70,153373,151841],{},[70,153375,153376,28575],{},[94,153377,153378],{},"if __name__ == \"__main__\"",[14,153380,153382],{"id":153381},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[24,153384,153385],{},"可以进一步拆成两个类：",[138,153387,153388,153393],{},[70,153389,153390,153392],{},[94,153391,149682],{},"：表示单个学生。",[70,153394,153395,153397],{},[94,153396,151708],{},"：负责学生增删改查和文件保存。",[24,153399,153400],{},"示意代码：",[87,153402,153404],{"className":30568,"code":153403,"language":30570,"meta":92,"style":92},"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",[94,153405,153406,153416,153420,153424,153428,153436,153443,153449,153455,153461,153465,153473,153479,153489,153499,153509,153519,153523,153527,153533,153541,153549,153557,153565,153573,153581],{"__ignoreMap":92},[97,153407,153408,153410,153412,153414],{"class":99,"line":100},[97,153409,30927],{"class":319},[97,153411,151266],{"class":103},[97,153413,30582],{"class":319},[97,153415,151271],{"class":103},[97,153417,153418],{"class":99,"line":195},[97,153419,2591],{"emptyLinePlaceholder":249},[97,153421,153422],{"class":99,"line":241},[97,153423,2591],{"emptyLinePlaceholder":249},[97,153425,153426],{"class":99,"line":1387},[97,153427,151284],{"class":111},[97,153429,153430,153432,153434],{"class":99,"line":1393},[97,153431,14885],{"class":319},[97,153433,8089],{"class":111},[97,153435,3930],{"class":103},[97,153437,153438,153441],{"class":99,"line":1407},[97,153439,153440],{"class":103},"    student_id: ",[97,153442,151300],{"class":370},[97,153444,153445,153447],{"class":99,"line":1413},[97,153446,151297],{"class":103},[97,153448,151300],{"class":370},[97,153450,153451,153453],{"class":99,"line":1504},[97,153452,151305],{"class":103},[97,153454,151308],{"class":370},[97,153456,153457,153459],{"class":99,"line":1510},[97,153458,151313],{"class":103},[97,153460,151316],{"class":370},[97,153462,153463],{"class":99,"line":1522},[97,153464,2591],{"emptyLinePlaceholder":249},[97,153466,153467,153469,153471],{"class":99,"line":1804},[97,153468,30991],{"class":319},[97,153470,151464],{"class":111},[97,153472,30997],{"class":103},[97,153474,153475,153477],{"class":99,"line":1809},[97,153476,14943],{"class":319},[97,153478,15762],{"class":103},[97,153480,153481,153483,153485,153487],{"class":99,"line":1815},[97,153482,151477],{"class":118},[97,153484,51621],{"class":103},[97,153486,31013],{"class":370},[97,153488,151484],{"class":103},[97,153490,153491,153493,153495,153497],{"class":99,"line":1820},[97,153492,151489],{"class":118},[97,153494,51621],{"class":103},[97,153496,31013],{"class":370},[97,153498,151496],{"class":103},[97,153500,153501,153503,153505,153507],{"class":99,"line":1834},[97,153502,151501],{"class":118},[97,153504,51621],{"class":103},[97,153506,31013],{"class":370},[97,153508,151508],{"class":103},[97,153510,153511,153513,153515,153517],{"class":99,"line":1839},[97,153512,151513],{"class":118},[97,153514,51621],{"class":103},[97,153516,31013],{"class":370},[97,153518,151520],{"class":103},[97,153520,153521],{"class":99,"line":1845},[97,153522,2720],{"class":103},[97,153524,153525],{"class":99,"line":1866},[97,153526,2591],{"emptyLinePlaceholder":249},[97,153528,153529,153531],{"class":99,"line":1871},[97,153530,151128],{"class":111},[97,153532,151131],{"class":370},[97,153534,153535,153537,153539],{"class":99,"line":1885},[97,153536,30991],{"class":319},[97,153538,151541],{"class":111},[97,153540,151544],{"class":103},[97,153542,153543,153545,153547],{"class":99,"line":1890},[97,153544,14943],{"class":319},[97,153546,151148],{"class":370},[97,153548,151553],{"class":103},[97,153550,153551,153553,153555],{"class":99,"line":1919},[97,153552,151558],{"class":103},[97,153554,151561],{"class":118},[97,153556,88020],{"class":103},[97,153558,153559,153561,153563],{"class":99,"line":1924},[97,153560,151558],{"class":103},[97,153562,62863],{"class":118},[97,153564,88020],{"class":103},[97,153566,153567,153569,153571],{"class":99,"line":1941},[97,153568,151558],{"class":103},[97,153570,69308],{"class":118},[97,153572,88020],{"class":103},[97,153574,153575,153577,153579],{"class":99,"line":1946},[97,153576,151558],{"class":103},[97,153578,151586],{"class":118},[97,153580,88020],{"class":103},[97,153582,153583],{"class":99,"line":1951},[97,153584,38316],{"class":103},[24,153586,153587],{},"管理器示意：",[87,153589,153591],{"className":30568,"code":153590,"language":30570,"meta":92,"style":92},"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",[94,153592,153593,153602,153610,153621,153625,153635,153648,153659,153666,153672,153676,153685,153694,153700,153707],{"__ignoreMap":92},[97,153594,153595,153597,153600],{"class":99,"line":100},[97,153596,14885],{"class":319},[97,153598,153599],{"class":111}," StudentManager",[97,153601,3930],{"class":103},[97,153603,153604,153606,153608],{"class":99,"line":195},[97,153605,30991],{"class":319},[97,153607,30994],{"class":370},[97,153609,30997],{"class":103},[97,153611,153612,153614,153617,153619],{"class":99,"line":241},[97,153613,31035],{"class":370},[97,153615,153616],{"class":103},".students ",[97,153618,115],{"class":319},[97,153620,52022],{"class":103},[97,153622,153623],{"class":99,"line":1387},[97,153624,2591],{"emptyLinePlaceholder":249},[97,153626,153627,153629,153632],{"class":99,"line":1393},[97,153628,30991],{"class":319},[97,153630,153631],{"class":111}," find_by_id",[97,153633,153634],{"class":103},"(self, student_id):\n",[97,153636,153637,153639,153641,153643,153645],{"class":99,"line":1407},[97,153638,3594],{"class":319},[97,153640,152251],{"class":103},[97,153642,26233],{"class":319},[97,153644,39063],{"class":370},[97,153646,153647],{"class":103},".students:\n",[97,153649,153650,153652,153655,153657],{"class":99,"line":1413},[97,153651,4833],{"class":319},[97,153653,153654],{"class":103}," student.student_id ",[97,153656,3140],{"class":319},[97,153658,152272],{"class":103},[97,153660,153661,153664],{"class":99,"line":1504},[97,153662,153663],{"class":319},"                return",[97,153665,152279],{"class":103},[97,153667,153668,153670],{"class":99,"line":1510},[97,153669,14943],{"class":319},[97,153671,152286],{"class":370},[97,153673,153674],{"class":99,"line":1522},[97,153675,2591],{"emptyLinePlaceholder":249},[97,153677,153678,153680,153682],{"class":99,"line":1804},[97,153679,30991],{"class":319},[97,153681,5400],{"class":111},[97,153683,153684],{"class":103},"(self, student):\n",[97,153686,153687,153689,153691],{"class":99,"line":1809},[97,153688,2688],{"class":319},[97,153690,39063],{"class":370},[97,153692,153693],{"class":103},".find_by_id(student.student_id):\n",[97,153695,153696,153698],{"class":99,"line":1815},[97,153697,15922],{"class":319},[97,153699,125991],{"class":370},[97,153701,153702,153704],{"class":99,"line":1820},[97,153703,31035],{"class":370},[97,153705,153706],{"class":103},".students.append(student)\n",[97,153708,153709,153711],{"class":99,"line":1834},[97,153710,14943],{"class":319},[97,153712,153713],{"class":370}," True\n",[24,153715,153716],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153718,153720],{"id":153719},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[48,153722,153724],{"id":153723},"_1251-数据结构","12.5.1 数据结构",[87,153726,153728],{"className":30568,"code":153727,"language":30570,"meta":92,"style":92},"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",[94,153729,153730,153738,153769,153799,153828,153857],{"__ignoreMap":92},[97,153731,153732,153734,153736],{"class":99,"line":100},[97,153733,148579],{"class":103},[97,153735,115],{"class":319},[97,153737,55631],{"class":103},[97,153739,153740,153742,153744,153746,153748,153750,153753,153755,153758,153760,153762,153764,153767],{"class":99,"line":195},[97,153741,148499],{"class":103},[97,153743,148111],{"class":118},[97,153745,51621],{"class":103},[97,153747,148722],{"class":118},[97,153749,12626],{"class":103},[97,153751,153752],{"class":118},"\"category\"",[97,153754,51621],{"class":103},[97,153756,153757],{"class":118},"\"手机\"",[97,153759,12626],{"class":103},[97,153761,84268],{"class":118},[97,153763,51621],{"class":103},[97,153765,153766],{"class":370},"12000",[97,153768,5121],{"class":103},[97,153770,153771,153773,153775,153777,153779,153781,153783,153785,153788,153790,153792,153794,153797],{"class":99,"line":241},[97,153772,148499],{"class":103},[97,153774,148111],{"class":118},[97,153776,51621],{"class":103},[97,153778,148722],{"class":118},[97,153780,12626],{"class":103},[97,153782,153752],{"class":118},[97,153784,51621],{"class":103},[97,153786,153787],{"class":118},"\"电脑\"",[97,153789,12626],{"class":103},[97,153791,84268],{"class":118},[97,153793,51621],{"class":103},[97,153795,153796],{"class":370},"18000",[97,153798,5121],{"class":103},[97,153800,153801,153803,153805,153807,153809,153811,153813,153815,153817,153819,153821,153823,153826],{"class":99,"line":1387},[97,153802,148499],{"class":103},[97,153804,148111],{"class":118},[97,153806,51621],{"class":103},[97,153808,148743],{"class":118},[97,153810,12626],{"class":103},[97,153812,153752],{"class":118},[97,153814,51621],{"class":103},[97,153816,153757],{"class":118},[97,153818,12626],{"class":103},[97,153820,84268],{"class":118},[97,153822,51621],{"class":103},[97,153824,153825],{"class":370},"15000",[97,153827,5121],{"class":103},[97,153829,153830,153832,153834,153836,153838,153840,153842,153844,153846,153848,153850,153852,153855],{"class":99,"line":1393},[97,153831,148499],{"class":103},[97,153833,148111],{"class":118},[97,153835,51621],{"class":103},[97,153837,148743],{"class":118},[97,153839,12626],{"class":103},[97,153841,153752],{"class":118},[97,153843,51621],{"class":103},[97,153845,153787],{"class":118},[97,153847,12626],{"class":103},[97,153849,84268],{"class":118},[97,153851,51621],{"class":103},[97,153853,153854],{"class":370},"16000",[97,153856,5121],{"class":103},[97,153858,153859],{"class":99,"line":1407},[97,153860,33436],{"class":103},[48,153862,153864],{"id":153863},"_1252-按日期统计","12.5.2 按日期统计",[87,153866,153868],{"className":30568,"code":153867,"language":30570,"meta":92,"style":92},"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",[94,153869,153870,153879,153883,153894,153908,153921,153940,153944],{"__ignoreMap":92},[97,153871,153872,153875,153877],{"class":99,"line":100},[97,153873,153874],{"class":103},"daily_total ",[97,153876,115],{"class":319},[97,153878,88052],{"class":103},[97,153880,153881],{"class":99,"line":195},[97,153882,2591],{"emptyLinePlaceholder":249},[97,153884,153885,153887,153889,153891],{"class":99,"line":241},[97,153886,3216],{"class":319},[97,153888,148323],{"class":103},[97,153890,26233],{"class":319},[97,153892,153893],{"class":103}," sales:\n",[97,153895,153896,153899,153901,153904,153906],{"class":99,"line":1387},[97,153897,153898],{"class":103},"    date ",[97,153900,115],{"class":319},[97,153902,153903],{"class":103}," item[",[97,153905,148111],{"class":118},[97,153907,33436],{"class":103},[97,153909,153910,153913,153915,153917,153919],{"class":99,"line":1393},[97,153911,153912],{"class":103},"    amount ",[97,153914,115],{"class":319},[97,153916,153903],{"class":103},[97,153918,84268],{"class":118},[97,153920,33436],{"class":103},[97,153922,153923,153926,153928,153931,153933,153935,153937],{"class":99,"line":1407},[97,153924,153925],{"class":103},"    daily_total[date] ",[97,153927,115],{"class":319},[97,153929,153930],{"class":103}," daily_total.get(date, ",[97,153932,511],{"class":370},[97,153934,13905],{"class":103},[97,153936,801],{"class":319},[97,153938,153939],{"class":103}," amount\n",[97,153941,153942],{"class":99,"line":1413},[97,153943,2591],{"emptyLinePlaceholder":249},[97,153945,153946,153948],{"class":99,"line":1504},[97,153947,30605],{"class":370},[97,153949,153950],{"class":103},"(daily_total)\n",[48,153952,153954],{"id":153953},"_1253-按类别统计","12.5.3 按类别统计",[87,153956,153958],{"className":30568,"code":153957,"language":30570,"meta":92,"style":92},"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",[94,153959,153960,153969,153973,153983,153996,154008,154026,154030],{"__ignoreMap":92},[97,153961,153962,153965,153967],{"class":99,"line":100},[97,153963,153964],{"class":103},"category_total ",[97,153966,115],{"class":319},[97,153968,88052],{"class":103},[97,153970,153971],{"class":99,"line":195},[97,153972,2591],{"emptyLinePlaceholder":249},[97,153974,153975,153977,153979,153981],{"class":99,"line":241},[97,153976,3216],{"class":319},[97,153978,148323],{"class":103},[97,153980,26233],{"class":319},[97,153982,153893],{"class":103},[97,153984,153985,153988,153990,153992,153994],{"class":99,"line":1387},[97,153986,153987],{"class":103},"    category ",[97,153989,115],{"class":319},[97,153991,153903],{"class":103},[97,153993,153752],{"class":118},[97,153995,33436],{"class":103},[97,153997,153998,154000,154002,154004,154006],{"class":99,"line":1393},[97,153999,153912],{"class":103},[97,154001,115],{"class":319},[97,154003,153903],{"class":103},[97,154005,84268],{"class":118},[97,154007,33436],{"class":103},[97,154009,154010,154013,154015,154018,154020,154022,154024],{"class":99,"line":1407},[97,154011,154012],{"class":103},"    category_total[category] ",[97,154014,115],{"class":319},[97,154016,154017],{"class":103}," category_total.get(category, ",[97,154019,511],{"class":370},[97,154021,13905],{"class":103},[97,154023,801],{"class":319},[97,154025,153939],{"class":103},[97,154027,154028],{"class":99,"line":1413},[97,154029,2591],{"emptyLinePlaceholder":249},[97,154031,154032,154034],{"class":99,"line":1504},[97,154033,30605],{"class":370},[97,154035,154036],{"class":103},"(category_total)\n",[48,154038,154040],{"id":154039},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[87,154042,154044],{"className":30568,"code":154043,"language":30570,"meta":92,"style":92},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[94,154045,154046,154071],{"__ignoreMap":92},[97,154047,154048,154051,154053,154055,154058,154061,154064,154067,154069],{"class":99,"line":100},[97,154049,154050],{"class":103},"top_date, top_amount ",[97,154052,115],{"class":319},[97,154054,6142],{"class":370},[97,154056,154057],{"class":103},"(daily_total.items(), ",[97,154059,154060],{"class":5407},"key",[97,154062,154063],{"class":319},"=lambda",[97,154065,154066],{"class":103}," item: item[",[97,154068,537],{"class":370},[97,154070,4848],{"class":103},[97,154072,154073,154075],{"class":99,"line":195},[97,154074,30605],{"class":370},[97,154076,154077],{"class":103},"(top_date, top_amount)\n",[14,154079,154081],{"id":154080},"_126-绘制柱状图","12.6 绘制柱状图",[87,154083,154085],{"className":30568,"code":154084,"language":30570,"meta":92,"style":92},"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",[94,154086,154087,154101,154112,154116,154124,154136,154148,154159,154163,154167,154177,154188,154202,154207,154224,154241,154257,154261],{"__ignoreMap":92},[97,154088,154089,154091,154093,154095,154097,154099],{"class":99,"line":100},[97,154090,30927],{"class":319},[97,154092,147493],{"class":103},[97,154094,30582],{"class":319},[97,154096,147498],{"class":103},[97,154098,31573],{"class":319},[97,154100,147503],{"class":103},[97,154102,154103,154105,154107,154109],{"class":99,"line":195},[97,154104,30927],{"class":319},[97,154106,147352],{"class":103},[97,154108,30582],{"class":319},[97,154110,154111],{"class":103}," Bar\n",[97,154113,154114],{"class":99,"line":241},[97,154115,2591],{"emptyLinePlaceholder":249},[97,154117,154118,154120,154122],{"class":99,"line":1387},[97,154119,153964],{"class":103},[97,154121,115],{"class":319},[97,154123,15762],{"class":103},[97,154125,154126,154129,154131,154134],{"class":99,"line":1393},[97,154127,154128],{"class":118},"    \"手机\"",[97,154130,51621],{"class":103},[97,154132,154133],{"class":370},"27000",[97,154135,31656],{"class":103},[97,154137,154138,154141,154143,154146],{"class":99,"line":1407},[97,154139,154140],{"class":118},"    \"电脑\"",[97,154142,51621],{"class":103},[97,154144,154145],{"class":370},"34000",[97,154147,31656],{"class":103},[97,154149,154150,154153,154155,154157],{"class":99,"line":1413},[97,154151,154152],{"class":118},"    \"耳机\"",[97,154154,51621],{"class":103},[97,154156,124583],{"class":370},[97,154158,31656],{"class":103},[97,154160,154161],{"class":99,"line":1504},[97,154162,1757],{"class":103},[97,154164,154165],{"class":99,"line":1510},[97,154166,2591],{"emptyLinePlaceholder":249},[97,154168,154169,154172,154174],{"class":99,"line":1522},[97,154170,154171],{"class":103},"bar ",[97,154173,115],{"class":319},[97,154175,154176],{"class":103}," Bar()\n",[97,154178,154179,154182,154185],{"class":99,"line":1804},[97,154180,154181],{"class":103},"bar.add_xaxis(",[97,154183,154184],{"class":370},"list",[97,154186,154187],{"class":103},"(category_total.keys()))\n",[97,154189,154190,154193,154195,154197,154199],{"class":99,"line":1809},[97,154191,154192],{"class":103},"bar.add_yaxis(",[97,154194,147409],{"class":118},[97,154196,12626],{"class":103},[97,154198,154184],{"class":370},[97,154200,154201],{"class":103},"(category_total.values()))\n",[97,154203,154204],{"class":99,"line":1815},[97,154205,154206],{"class":103},"bar.set_global_opts(\n",[97,154208,154209,154211,154213,154215,154217,154219,154222],{"class":99,"line":1820},[97,154210,147587],{"class":5407},[97,154212,115],{"class":319},[97,154214,147592],{"class":103},[97,154216,51591],{"class":5407},[97,154218,115],{"class":319},[97,154220,154221],{"class":118},"\"品类销售额\"",[97,154223,38237],{"class":103},[97,154225,154226,154228,154230,154232,154234,154236,154239],{"class":99,"line":1834},[97,154227,147606],{"class":5407},[97,154229,115],{"class":319},[97,154231,147611],{"class":103},[97,154233,79994],{"class":5407},[97,154235,115],{"class":319},[97,154237,154238],{"class":118},"\"品类\"",[97,154240,38237],{"class":103},[97,154242,154243,154245,154247,154249,154251,154253,154255],{"class":99,"line":1839},[97,154244,147625],{"class":5407},[97,154246,115],{"class":319},[97,154248,147611],{"class":103},[97,154250,79994],{"class":5407},[97,154252,115],{"class":319},[97,154254,147409],{"class":118},[97,154256,38237],{"class":103},[97,154258,154259],{"class":99,"line":1845},[97,154260,329],{"class":103},[97,154262,154263,154266,154269],{"class":99,"line":1866},[97,154264,154265],{"class":103},"bar.render(",[97,154267,154268],{"class":118},"\"category_sales.html\"",[97,154270,329],{"class":103},[14,154272,154274],{"id":154273},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[24,154276,154277],{},"时间线适合展示不同日期、月份、年份的数据变化。",[87,154279,154281],{"className":30568,"code":154280,"language":30570,"meta":92,"style":92},"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",[94,154282,154283,154297,154308,154312,154320,154344,154367,154392,154396,154400,154410,154414,154425,154434,154444,154458,154489,154494,154498],{"__ignoreMap":92},[97,154284,154285,154287,154289,154291,154293,154295],{"class":99,"line":100},[97,154286,30927],{"class":319},[97,154288,147493],{"class":103},[97,154290,30582],{"class":319},[97,154292,147498],{"class":103},[97,154294,31573],{"class":319},[97,154296,147503],{"class":103},[97,154298,154299,154301,154303,154305],{"class":99,"line":195},[97,154300,30927],{"class":319},[97,154302,147352],{"class":103},[97,154304,30582],{"class":319},[97,154306,154307],{"class":103}," Bar, Timeline\n",[97,154309,154310],{"class":99,"line":241},[97,154311,2591],{"emptyLinePlaceholder":249},[97,154313,154314,154316,154318],{"class":99,"line":1387},[97,154315,101842],{"class":103},[97,154317,115],{"class":319},[97,154319,15762],{"class":103},[97,154321,154322,154325,154328,154330,154332,154334,154336,154338,154340,154342],{"class":99,"line":1393},[97,154323,154324],{"class":118},"    \"2024-10-01\"",[97,154326,154327],{"class":103},": {",[97,154329,153757],{"class":118},[97,154331,51621],{"class":103},[97,154333,153766],{"class":370},[97,154335,12626],{"class":103},[97,154337,153787],{"class":118},[97,154339,51621],{"class":103},[97,154341,153796],{"class":370},[97,154343,5121],{"class":103},[97,154345,154346,154349,154351,154353,154355,154357,154359,154361,154363,154365],{"class":99,"line":1407},[97,154347,154348],{"class":118},"    \"2024-10-02\"",[97,154350,154327],{"class":103},[97,154352,153757],{"class":118},[97,154354,51621],{"class":103},[97,154356,153825],{"class":370},[97,154358,12626],{"class":103},[97,154360,153787],{"class":118},[97,154362,51621],{"class":103},[97,154364,153854],{"class":370},[97,154366,5121],{"class":103},[97,154368,154369,154372,154374,154376,154378,154381,154383,154385,154387,154390],{"class":99,"line":1413},[97,154370,154371],{"class":118},"    \"2024-10-03\"",[97,154373,154327],{"class":103},[97,154375,153757],{"class":118},[97,154377,51621],{"class":103},[97,154379,154380],{"class":370},"17000",[97,154382,12626],{"class":103},[97,154384,153787],{"class":118},[97,154386,51621],{"class":103},[97,154388,154389],{"class":370},"19000",[97,154391,5121],{"class":103},[97,154393,154394],{"class":99,"line":1504},[97,154395,1757],{"class":103},[97,154397,154398],{"class":99,"line":1510},[97,154399,2591],{"emptyLinePlaceholder":249},[97,154401,154402,154405,154407],{"class":99,"line":1522},[97,154403,154404],{"class":103},"timeline ",[97,154406,115],{"class":319},[97,154408,154409],{"class":103}," Timeline()\n",[97,154411,154412],{"class":99,"line":1804},[97,154413,2591],{"emptyLinePlaceholder":249},[97,154415,154416,154418,154421,154423],{"class":99,"line":1809},[97,154417,3216],{"class":319},[97,154419,154420],{"class":103}," date, category_data ",[97,154422,26233],{"class":319},[97,154424,149262],{"class":103},[97,154426,154427,154430,154432],{"class":99,"line":1815},[97,154428,154429],{"class":103},"    bar ",[97,154431,115],{"class":319},[97,154433,154176],{"class":103},[97,154435,154436,154439,154441],{"class":99,"line":1820},[97,154437,154438],{"class":103},"    bar.add_xaxis(",[97,154440,154184],{"class":370},[97,154442,154443],{"class":103},"(category_data.keys()))\n",[97,154445,154446,154449,154451,154453,154455],{"class":99,"line":1834},[97,154447,154448],{"class":103},"    bar.add_yaxis(",[97,154450,147409],{"class":118},[97,154452,12626],{"class":103},[97,154454,154184],{"class":370},[97,154456,154457],{"class":103},"(category_data.values()))\n",[97,154459,154460,154463,154466,154468,154470,154472,154474,154476,154478,154480,154482,154484,154487],{"class":99,"line":1839},[97,154461,154462],{"class":103},"    bar.set_global_opts(",[97,154464,154465],{"class":5407},"title_opts",[97,154467,115],{"class":319},[97,154469,147592],{"class":103},[97,154471,51591],{"class":5407},[97,154473,115],{"class":319},[97,154475,374],{"class":319},[97,154477,571],{"class":118},[97,154479,1216],{"class":370},[97,154481,74110],{"class":103},[97,154483,1265],{"class":370},[97,154485,154486],{"class":118},"销售额\"",[97,154488,30687],{"class":103},[97,154490,154491],{"class":99,"line":1845},[97,154492,154493],{"class":103},"    timeline.add(bar, date)\n",[97,154495,154496],{"class":99,"line":1866},[97,154497,2591],{"emptyLinePlaceholder":249},[97,154499,154500,154503,154506],{"class":99,"line":1871},[97,154501,154502],{"class":103},"timeline.render(",[97,154504,154505],{"class":118},"\"timeline_sales.html\"",[97,154507,329],{"class":103},[14,154509,154511],{"id":154510},"_128-绘制地图","12.8 绘制地图",[24,154513,154514],{},"地图适合展示地区数据。",[87,154516,154518],{"className":30568,"code":154517,"language":30570,"meta":92,"style":92},"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",[94,154519,154520,154534,154545,154549,154557,154570,154582,154595,154608,154612,154616,154626,154641,154646,154663,154682,154686],{"__ignoreMap":92},[97,154521,154522,154524,154526,154528,154530,154532],{"class":99,"line":100},[97,154523,30927],{"class":319},[97,154525,147493],{"class":103},[97,154527,30582],{"class":319},[97,154529,147498],{"class":103},[97,154531,31573],{"class":319},[97,154533,147503],{"class":103},[97,154535,154536,154538,154540,154542],{"class":99,"line":195},[97,154537,30927],{"class":319},[97,154539,147352],{"class":103},[97,154541,30582],{"class":319},[97,154543,154544],{"class":103}," Map\n",[97,154546,154547],{"class":99,"line":241},[97,154548,2591],{"emptyLinePlaceholder":249},[97,154550,154551,154553,154555],{"class":99,"line":1387},[97,154552,101842],{"class":103},[97,154554,115],{"class":319},[97,154556,55631],{"class":103},[97,154558,154559,154562,154564,154566,154568],{"class":99,"line":1393},[97,154560,154561],{"class":103},"    (",[97,154563,69453],{"class":118},[97,154565,12626],{"class":103},[97,154567,1137],{"class":370},[97,154569,38237],{"class":103},[97,154571,154572,154574,154576,154578,154580],{"class":99,"line":1407},[97,154573,154561],{"class":103},[97,154575,69473],{"class":118},[97,154577,12626],{"class":103},[97,154579,147426],{"class":370},[97,154581,38237],{"class":103},[97,154583,154584,154586,154589,154591,154593],{"class":99,"line":1413},[97,154585,154561],{"class":103},[97,154587,154588],{"class":118},"\"广东\"",[97,154590,12626],{"class":103},[97,154592,1914],{"class":370},[97,154594,38237],{"class":103},[97,154596,154597,154599,154602,154604,154606],{"class":99,"line":1504},[97,154598,154561],{"class":103},[97,154600,154601],{"class":118},"\"浙江\"",[97,154603,12626],{"class":103},[97,154605,147431],{"class":370},[97,154607,38237],{"class":103},[97,154609,154610],{"class":99,"line":1510},[97,154611,33436],{"class":103},[97,154613,154614],{"class":99,"line":1522},[97,154615,2591],{"emptyLinePlaceholder":249},[97,154617,154618,154621,154623],{"class":99,"line":1804},[97,154619,154620],{"class":103},"map_chart ",[97,154622,115],{"class":319},[97,154624,154625],{"class":103}," Map()\n",[97,154627,154628,154631,154633,154636,154639],{"class":99,"line":1809},[97,154629,154630],{"class":103},"map_chart.add(",[97,154632,147409],{"class":118},[97,154634,154635],{"class":103},", data, ",[97,154637,154638],{"class":118},"\"china\"",[97,154640,329],{"class":103},[97,154642,154643],{"class":99,"line":1815},[97,154644,154645],{"class":103},"map_chart.set_global_opts(\n",[97,154647,154648,154650,154652,154654,154656,154658,154661],{"class":99,"line":1820},[97,154649,147587],{"class":5407},[97,154651,115],{"class":319},[97,154653,147592],{"class":103},[97,154655,51591],{"class":5407},[97,154657,115],{"class":319},[97,154659,154660],{"class":118},"\"地区销售额\"",[97,154662,38237],{"class":103},[97,154664,154665,154668,154670,154673,154676,154678,154680],{"class":99,"line":1834},[97,154666,154667],{"class":5407},"    visualmap_opts",[97,154669,115],{"class":319},[97,154671,154672],{"class":103},"opts.VisualMapOpts(",[97,154674,154675],{"class":5407},"max_",[97,154677,115],{"class":319},[97,154679,1914],{"class":370},[97,154681,38237],{"class":103},[97,154683,154684],{"class":99,"line":1839},[97,154685,329],{"class":103},[97,154687,154688,154691,154694],{"class":99,"line":1845},[97,154689,154690],{"class":103},"map_chart.render(",[97,154692,154693],{"class":118},"\"map_sales.html\"",[97,154695,329],{"class":103},[24,154697,154698],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154700,154702],{"id":154701},"_129-项目拆分建议","12.9 项目拆分建议",[24,154704,154705],{},"当代码超过一个文件时，可以这样组织：",[87,154707,154710],{"className":154708,"code":154709,"language":5378,"meta":92},[5376],"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",[94,154711,154709],{"__ignoreMap":92},[24,154713,154714],{},"职责：",[138,154716,154717,154723,154729,154735],{},[70,154718,154719,154722],{},[94,154720,154721],{},"main.py","：程序入口。",[70,154724,154725,154728],{},[94,154726,154727],{},"file_utils.py","：读写 JSON。",[70,154730,154731,154734],{},[94,154732,154733],{},"sales_service.py","：统计销售数据。",[70,154736,154737,154740],{},[94,154738,154739],{},"chart_builder.py","：生成图表。",[14,154742,154744],{"id":154743},"_1210-python基础复习清单","12.10 Python基础复习清单",[24,154746,154747],{},"语法基础：",[138,154749,154750,154753,154756,154759],{},[70,154751,154752],{},"会写变量、注释、输入输出。",[70,154754,154755],{},"会使用 int、float、str、bool。",[70,154757,154758],{},"会做类型转换。",[70,154760,154761],{},"会使用 f-string 格式化输出。",[24,154763,154764],{},"流程控制：",[138,154766,154767,154773,154779,154787],{},[70,154768,154769,154770,28575],{},"会写 ",[94,154771,154772],{},"if elif else",[70,154774,154769,154775,101202,154777,28575],{},[94,154776,108847],{},[94,154778,3216],{},[70,154780,154781,154782,101202,154784,28575],{},"理解 ",[94,154783,2244],{},[94,154785,154786],{},"continue",[70,154788,154789],{},"能写嵌套循环。",[24,154791,154792],{},"函数：",[138,154794,154795,154798,154801,154804],{},[70,154796,154797],{},"会定义和调用函数。",[70,154799,154800],{},"理解参数和返回值。",[70,154802,154803],{},"知道局部变量和全局变量。",[70,154805,154806],{},"会使用默认参数、关键字参数、不定长参数。",[24,154808,154809],{},"容器：",[138,154811,154812,154815,154818,154821,154824],{},[70,154813,154814],{},"会使用列表增删改查。",[70,154816,154817],{},"会遍历列表、字典。",[70,154819,154820],{},"会使用切片。",[70,154822,154823],{},"会用集合去重。",[70,154825,154826],{},"会处理列表嵌套字典。",[24,154828,154829],{},"文件和模块：",[138,154831,154832,154835,154838,154841,154844],{},[70,154833,154834],{},"会读写文本文件。",[70,154836,154837],{},"会读写 JSON。",[70,154839,154840],{},"会捕获常见异常。",[70,154842,154843],{},"会导入模块和第三方包。",[70,154845,154846],{},"会创建简单包结构。",[24,154848,154849],{},"项目能力：",[138,154851,154852,154855,154858,154861,154864],{},[70,154853,154854],{},"能把代码拆成函数。",[70,154856,154857],{},"能把数据保存到文件。",[70,154859,154860],{},"能处理用户输入错误。",[70,154862,154863],{},"能写一个完整菜单程序。",[70,154865,154866],{},"能用 pyecharts 生成图表。",[14,154868,154870],{"id":154869},"_1211-推荐练习顺序","12.11 推荐练习顺序",[138,154872,154873,154876,154879,154882,154885,154888,154891,154894],{},[70,154874,154875],{},"猜数字游戏。",[70,154877,154878],{},"ATM 菜单程序。",[70,154880,154881],{},"学生成绩统计。",[70,154883,154884],{},"学生管理系统函数版。",[70,154886,154887],{},"学生管理系统文件持久化版。",[70,154889,154890],{},"学生管理系统面向对象版。",[70,154892,154893],{},"销售数据统计。",[70,154895,154896],{},"销售数据可视化。",[14,154898,154900],{"id":154899},"_1212-常见学习误区","12.12 常见学习误区",[138,154902,154903,154906,154909,154912,154915,154918,154921],{},[70,154904,154905],{},"只看视频不敲代码。",[70,154907,154908],{},"一报错就复制错误去搜，不先读报错位置。",[70,154910,154911],{},"变量名随便写，后续自己看不懂。",[70,154913,154914],{},"所有代码都写在一个文件一个函数里。",[70,154916,154917],{},"不保存练习代码，复习时没有材料。",[70,154919,154920],{},"还没掌握列表字典就急着学框架。",[70,154922,154923],{},"不会读官方文档，只依赖教程。",[14,154925,154927],{"id":154926},"_1213-如何读报错","12.13 如何读报错",[24,154929,154930],{},"报错通常从下往上看最后几行。",[24,154932,15325],{},[87,154934,154937],{"className":154935,"code":154936,"language":5378,"meta":92},[5376],"ValueError: invalid literal for int() with base 10: 'abc'\n",[94,154938,154936],{"__ignoreMap":92},[24,154940,24789],{},[138,154942,154943,154949,154959],{},[70,154944,154945,154946,28575],{},"异常类型是 ",[94,154947,154948],{},"ValueError",[70,154950,107529,154951,154954,154955,154958],{},[94,154952,154953],{},"int()"," 无法把 ",[94,154956,154957],{},"'abc'"," 转成整数。",[70,154960,154961],{},"应该检查输入内容或增加异常处理。",[24,154963,154964],{},"再看文件名和行号：",[87,154966,154969],{"className":154967,"code":154968,"language":5378,"meta":92},[5376],"File \"main.py\", line 10, in \u003Cmodule>\n",[94,154970,154968],{"__ignoreMap":92},[24,154972,154973,154974,154976],{},"表示错误发生在 ",[94,154975,154721],{}," 第 10 行。",[14,154978,154980],{"id":154979},"_1214-后续学习方向","12.14 后续学习方向",[24,154982,154983],{},"Python 基础完成后，可以按兴趣选择方向：",[138,154985,154986,154998,155007,155019,155030,155039,155049],{},[70,154987,154988,154989,532,154992,532,154995,28575],{},"自动化办公：",[94,154990,154991],{},"openpyxl",[94,154993,154994],{},"python-docx",[94,154996,154997],{},"pdfplumber",[70,154999,155000,155001,532,155003,532,155005,28575],{},"数据分析：",[94,155002,100810],{},[94,155004,146299],{},[94,155006,146307],{},[70,155008,155009,155010,532,155013,532,155016,28575],{},"Web 后端：",[94,155011,155012],{},"Flask",[94,155014,155015],{},"FastAPI",[94,155017,155018],{},"Django",[70,155020,155021,155022,532,155024,532,155027,28575],{},"爬虫：",[94,155023,146284],{},[94,155025,155026],{},"BeautifulSoup",[94,155028,155029],{},"Scrapy",[70,155031,155032,155033,532,155035,155038],{},"测试开发：",[94,155034,146331],{},[94,155036,155037],{},"selenium","、接口测试。",[70,155040,155041,155042,532,155044,532,155046,28575],{},"人工智能：",[94,155043,100810],{},[94,155045,146299],{},[94,155047,155048],{},"pytorch",[70,155050,155051,155052,532,155054,532,155057,28575],{},"运维脚本：",[94,155053,145900],{},[94,155055,155056],{},"subprocess",[94,155058,155059],{},"paramiko",[24,155061,155062],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155064,155066],{"id":155065},"_1215-结课练习","12.15 结课练习",[138,155068,155069,155072,155075,155078,155081,155084,155087,155090],{},[70,155070,155071],{},"完成函数版学生管理系统。",[70,155073,155074],{},"给学生管理系统增加 JSON 持久化。",[70,155076,155077],{},"给学生管理系统增加异常处理。",[70,155079,155080],{},"把学生管理系统改成面向对象版。",[70,155082,155083],{},"使用 pyecharts 绘制学生成绩柱状图。",[70,155085,155086],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[70,155088,155089],{},"按品类统计销售额并绘制柱状图。",[70,155091,155092],{},"写一份自己的 Python 学习路线图。",[231,155094,155095],{},"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":92,"searchDepth":195,"depth":195,"links":155097},[155098,155099,155102,155103,155104,155110,155111,155112,155113,155114,155115,155116,155117,155118,155119],{"id":151814,"depth":195,"text":151815},{"id":151864,"depth":195,"text":151865,"children":155100},[155101],{"id":151868,"depth":241,"text":151869},{"id":151907,"depth":195,"text":151908},{"id":153381,"depth":195,"text":153382},{"id":153719,"depth":195,"text":153720,"children":155105},[155106,155107,155108,155109],{"id":153723,"depth":241,"text":153724},{"id":153863,"depth":241,"text":153864},{"id":153953,"depth":241,"text":153954},{"id":154039,"depth":241,"text":154040},{"id":154080,"depth":195,"text":154081},{"id":154273,"depth":195,"text":154274},{"id":154510,"depth":195,"text":154511},{"id":154701,"depth":195,"text":154702},{"id":154743,"depth":195,"text":154744},{"id":154869,"depth":195,"text":154870},{"id":154899,"depth":195,"text":154900},{"id":154926,"depth":195,"text":154927},{"id":154979,"depth":195,"text":154980},{"id":155065,"depth":195,"text":155066},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151806,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155126,"title":155127,"body":155128,"description":246,"extension":247,"meta":157597,"navigation":249,"path":157598,"seo":157599,"stem":157600,"__hash__":157601},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155129,"toc":157572},[155130,155133,155137,155140,155143,155163,155166,155189,155192,155195,155217,155220,155242,155246,155249,155289,155292,155413,155417,155420,155460,155463,155487,155490,155494,155497,155511,155544,155547,155582,155585,155608,155611,155644,155647,155649,155655,155730,155733,155739,155756,155796,155800,155803,155849,155851,155889,155892,155927,155930,155965,155968,156000,156003,156022,156026,156030,156143,156145,156220,156224,156270,156273,156299,156308,156312,156315,156378,156386,156414,156418,156458,156523,156527,156530,156569,156572,156617,156620,156681,156685,156712,156715,156743,156746,156750,156754,156819,156822,156860,156863,156895,156899,156998,157002,157005,157078,157081,157129,157133,157139,157179,157182,157229,157232,157281,157285,157287,157301,157303,157484,157488,157515,157535,157542,157546,157563,157569],[10,155131,155127],{"id":155132},"_2-基础语法变量与字符串",[14,155134,155136],{"id":155135},"_21-注释","2.1 注释",[24,155138,155139],{},"注释是给人看的说明文字，不会被 Python 执行。",[24,155141,155142],{},"单行注释：",[87,155144,155146],{"className":30568,"code":155145,"language":30570,"meta":92,"style":92},"# 这是单行注释\nprint(\"hello\")\n",[94,155147,155148,155153],{"__ignoreMap":92},[97,155149,155150],{"class":99,"line":100},[97,155151,155152],{"class":191},"# 这是单行注释\n",[97,155154,155155,155157,155159,155161],{"class":99,"line":195},[97,155156,30605],{"class":370},[97,155158,323],{"class":103},[97,155160,6035],{"class":118},[97,155162,329],{"class":103},[24,155164,155165],{},"多行说明常用三引号：",[87,155167,155169],{"className":30568,"code":155168,"language":30570,"meta":92,"style":92},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[94,155170,155171,155175,155180,155185],{"__ignoreMap":92},[97,155172,155173],{"class":99,"line":100},[97,155174,95882],{"class":118},[97,155176,155177],{"class":99,"line":195},[97,155178,155179],{"class":118},"这是多行说明。\n",[97,155181,155182],{"class":99,"line":241},[97,155183,155184],{"class":118},"常用于文件顶部说明、函数说明等。\n",[97,155186,155187],{"class":99,"line":1387},[97,155188,95882],{"class":118},[24,155190,155191],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[24,155193,155194],{},"不好：",[87,155196,155198],{"className":30568,"code":155197,"language":30570,"meta":92,"style":92},"# age 加 1\nage = age + 1\n",[94,155199,155200,155205],{"__ignoreMap":92},[97,155201,155202],{"class":99,"line":100},[97,155203,155204],{"class":191},"# age 加 1\n",[97,155206,155207,155209,155211,155213,155215],{"class":99,"line":195},[97,155208,146660],{"class":103},[97,155210,115],{"class":319},[97,155212,15897],{"class":103},[97,155214,801],{"class":319},[97,155216,55883],{"class":370},[24,155218,155219],{},"较好：",[87,155221,155223],{"className":30568,"code":155222,"language":30570,"meta":92,"style":92},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[94,155224,155225,155230],{"__ignoreMap":92},[97,155226,155227],{"class":99,"line":100},[97,155228,155229],{"class":191},"# 用户过完生日后，年龄增加一岁\n",[97,155231,155232,155234,155236,155238,155240],{"class":99,"line":195},[97,155233,146660],{"class":103},[97,155235,115],{"class":319},[97,155237,15897],{"class":103},[97,155239,801],{"class":319},[97,155241,55883],{"class":370},[14,155243,155245],{"id":155244},"_22-字面量","2.2 字面量",[24,155247,155248],{},"字面量就是代码中直接写出来的数据。",[87,155250,155252],{"className":30568,"code":155251,"language":30570,"meta":92,"style":92},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[94,155253,155254,155261,155268,155275,155282],{"__ignoreMap":92},[97,155255,155256,155258],{"class":99,"line":100},[97,155257,631],{"class":370},[97,155259,155260],{"class":191},"          # 整数\n",[97,155262,155263,155265],{"class":99,"line":195},[97,155264,371],{"class":370},[97,155266,155267],{"class":191},"         # 小数\n",[97,155269,155270,155272],{"class":99,"line":241},[97,155271,6035],{"class":118},[97,155273,155274],{"class":191},"      # 字符串\n",[97,155276,155277,155279],{"class":99,"line":1387},[97,155278,31666],{"class":370},[97,155280,155281],{"class":191},"         # 布尔值\n",[97,155283,155284,155286],{"class":99,"line":1393},[97,155285,95870],{"class":370},[97,155287,155288],{"class":191},"         # 空值\n",[24,155290,155291],{},"常见字面量类型：",[457,155293,155294,155304],{},[460,155295,155296],{},[463,155297,155298,155300,155302],{},[466,155299,23926],{},[466,155301,27682],{},[466,155303,26059],{},[504,155305,155306,155317,155328,155339,155351,155363,155375,155388,155400],{},[463,155307,155308,155310,155314],{},[509,155309,326],{},[509,155311,155312],{},[94,155313,631],{},[509,155315,155316],{},"整数",[463,155318,155319,155321,155325],{},[509,155320,362],{},[509,155322,155323],{},[94,155324,371],{},[509,155326,155327],{},"浮点数",[463,155329,155330,155332,155336],{},[509,155331,1492],{},[509,155333,155334],{},[94,155335,6035],{},[509,155337,155338],{},"字符串",[463,155340,155341,155343,155349],{},[509,155342,1547],{},[509,155344,155345,532,155347],{},[94,155346,31666],{},[94,155348,34177],{},[509,155350,66199],{},[463,155352,155353,155356,155360],{},[509,155354,155355],{},"NoneType",[509,155357,155358],{},[94,155359,95870],{},[509,155361,155362],{},"空值",[463,155364,155365,155367,155372],{},[509,155366,154184],{},[509,155368,155369],{},[94,155370,155371],{},"[1, 2, 3]",[509,155373,155374],{},"列表",[463,155376,155377,155380,155385],{},[509,155378,155379],{},"tuple",[509,155381,155382],{},[94,155383,155384],{},"(1, 2, 3)",[509,155386,155387],{},"元组",[463,155389,155390,155392,155397],{},[509,155391,114730],{},[509,155393,155394],{},[94,155395,155396],{},"{\"name\": \"张三\"}",[509,155398,155399],{},"字典",[463,155401,155402,155405,155410],{},[509,155403,155404],{},"set",[509,155406,155407],{},[94,155408,155409],{},"{1, 2, 3}",[509,155411,155412],{},"集合",[14,155414,155416],{"id":155415},"_23-变量","2.3 变量",[24,155418,155419],{},"变量是保存数据的名字。",[87,155421,155423],{"className":30568,"code":155422,"language":30570,"meta":92,"style":92},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[94,155424,155425,155433,155441,155451],{"__ignoreMap":92},[97,155426,155427,155429,155431],{"class":99,"line":100},[97,155428,146650],{"class":103},[97,155430,115],{"class":319},[97,155432,149467],{"class":118},[97,155434,155435,155437,155439],{"class":99,"line":195},[97,155436,146660],{"class":103},[97,155438,115],{"class":319},[97,155440,146665],{"class":370},[97,155442,155443,155446,155448],{"class":99,"line":241},[97,155444,155445],{"class":103},"height ",[97,155447,115],{"class":319},[97,155449,155450],{"class":370}," 1.75\n",[97,155452,155453,155456,155458],{"class":99,"line":1387},[97,155454,155455],{"class":103},"is_student ",[97,155457,115],{"class":319},[97,155459,153713],{"class":370},[24,155461,155462],{},"Python 的变量不需要提前声明类型：",[87,155464,155466],{"className":30568,"code":155465,"language":30570,"meta":92,"style":92},"score = 100\nscore = \"满分\"\n",[94,155467,155468,155478],{"__ignoreMap":92},[97,155469,155470,155473,155475],{"class":99,"line":100},[97,155471,155472],{"class":103},"score ",[97,155474,115],{"class":319},[97,155476,155477],{"class":370}," 100\n",[97,155479,155480,155482,155484],{"class":99,"line":195},[97,155481,155472],{"class":103},[97,155483,115],{"class":319},[97,155485,155486],{"class":118}," \"满分\"\n",[24,155488,155489],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155491,155493],{"id":155492},"_24-变量命名规则","2.4 变量命名规则",[24,155495,155496],{},"硬性规则：",[138,155498,155499,155502,155505,155508],{},[70,155500,155501],{},"只能由字母、数字、下划线组成。",[70,155503,155504],{},"不能以数字开头。",[70,155506,155507],{},"不能使用 Python 关键字。",[70,155509,155510],{},"区分大小写。",[87,155512,155514],{"className":30568,"code":155513,"language":30570,"meta":92,"style":92},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[94,155515,155516,155525,155534],{"__ignoreMap":92},[97,155517,155518,155521,155523],{"class":99,"line":100},[97,155519,155520],{"class":103},"user_name ",[97,155522,115],{"class":319},[97,155524,146655],{"class":118},[97,155526,155527,155530,155532],{"class":99,"line":195},[97,155528,155529],{"class":103},"age2 ",[97,155531,115],{"class":319},[97,155533,146665],{"class":370},[97,155535,155536,155539,155541],{"class":99,"line":241},[97,155537,155538],{"class":103},"_token ",[97,155540,115],{"class":319},[97,155542,155543],{"class":118}," \"abc\"\n",[24,155545,155546],{},"错误写法：",[87,155548,155550],{"className":30568,"code":155549,"language":30570,"meta":92,"style":92},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[94,155551,155552,155561,155573],{"__ignoreMap":92},[97,155553,155554,155557,155559],{"class":99,"line":100},[97,155555,155556],{"class":77587},"2age",[97,155558,13755],{"class":319},[97,155560,146665],{"class":370},[97,155562,155563,155565,155567,155569,155571],{"class":99,"line":195},[97,155564,131763],{"class":103},[97,155566,852],{"class":319},[97,155568,146650],{"class":103},[97,155570,115],{"class":319},[97,155572,146655],{"class":118},[97,155574,155575,155577,155579],{"class":99,"line":241},[97,155576,14885],{"class":319},[97,155578,13755],{"class":319},[97,155580,155581],{"class":118}," \"一班\"\n",[24,155583,155584],{},"查看关键字：",[87,155586,155588],{"className":30568,"code":155587,"language":30570,"meta":92,"style":92},"import keyword\n\nprint(keyword.kwlist)\n",[94,155589,155590,155597,155601],{"__ignoreMap":92},[97,155591,155592,155594],{"class":99,"line":100},[97,155593,30582],{"class":319},[97,155595,155596],{"class":103}," keyword\n",[97,155598,155599],{"class":99,"line":195},[97,155600,2591],{"emptyLinePlaceholder":249},[97,155602,155603,155605],{"class":99,"line":241},[97,155604,30605],{"class":370},[97,155606,155607],{"class":103},"(keyword.kwlist)\n",[24,155609,155610],{},"推荐命名风格：",[87,155612,155614],{"className":30568,"code":155613,"language":30570,"meta":92,"style":92},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[94,155615,155616,155625,155635],{"__ignoreMap":92},[97,155617,155618,155621,155623],{"class":99,"line":100},[97,155619,155620],{"class":103},"student_name ",[97,155622,115],{"class":319},[97,155624,149467],{"class":118},[97,155626,155627,155630,155632],{"class":99,"line":195},[97,155628,155629],{"class":103},"total_price ",[97,155631,115],{"class":319},[97,155633,155634],{"class":370}," 99.8\n",[97,155636,155637,155640,155642],{"class":99,"line":241},[97,155638,155639],{"class":103},"is_finished ",[97,155641,115],{"class":319},[97,155643,125991],{"class":370},[24,155645,155646],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155648,50922],{"id":50921},[24,155650,104550,155651,155654],{},[94,155652,155653],{},"type()"," 查看数据类型：",[87,155656,155658],{"className":30568,"code":155657,"language":30570,"meta":92,"style":92},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[94,155659,155660,155674,155688,155702,155716],{"__ignoreMap":92},[97,155661,155662,155664,155666,155668,155670,155672],{"class":99,"line":100},[97,155663,30605],{"class":370},[97,155665,323],{"class":103},[97,155667,103291],{"class":370},[97,155669,323],{"class":103},[97,155671,631],{"class":370},[97,155673,30687],{"class":103},[97,155675,155676,155678,155680,155682,155684,155686],{"class":99,"line":195},[97,155677,30605],{"class":370},[97,155679,323],{"class":103},[97,155681,103291],{"class":370},[97,155683,323],{"class":103},[97,155685,371],{"class":370},[97,155687,30687],{"class":103},[97,155689,155690,155692,155694,155696,155698,155700],{"class":99,"line":241},[97,155691,30605],{"class":370},[97,155693,323],{"class":103},[97,155695,103291],{"class":370},[97,155697,323],{"class":103},[97,155699,6035],{"class":118},[97,155701,30687],{"class":103},[97,155703,155704,155706,155708,155710,155712,155714],{"class":99,"line":1387},[97,155705,30605],{"class":370},[97,155707,323],{"class":103},[97,155709,103291],{"class":370},[97,155711,323],{"class":103},[97,155713,31666],{"class":370},[97,155715,30687],{"class":103},[97,155717,155718,155720,155722,155724,155726,155728],{"class":99,"line":1393},[97,155719,30605],{"class":370},[97,155721,323],{"class":103},[97,155723,103291],{"class":370},[97,155725,323],{"class":103},[97,155727,95870],{"class":370},[97,155729,30687],{"class":103},[24,155731,155732],{},"输出类似：",[87,155734,155737],{"className":155735,"code":155736,"language":5378,"meta":92},[5376],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[94,155738,155736],{"__ignoreMap":92},[24,155740,9216,155741,107467,155743,155745,155746,155748,155749,21690,155751,155748,155753,155755],{},[94,155742,1547],{},[94,155744,326],{}," 的子类，",[94,155747,31666],{}," 可以当作 ",[94,155750,537],{},[94,155752,34177],{},[94,155754,511],{},"，但业务代码中不要滥用。",[87,155757,155759],{"className":30568,"code":155758,"language":30570,"meta":92,"style":92},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[94,155760,155761,155779],{"__ignoreMap":92},[97,155762,155763,155765,155767,155769,155771,155773,155776],{"class":99,"line":100},[97,155764,30605],{"class":370},[97,155766,323],{"class":103},[97,155768,31666],{"class":370},[97,155770,45756],{"class":319},[97,155772,25308],{"class":370},[97,155774,155775],{"class":103},")   ",[97,155777,155778],{"class":191},"# 2\n",[97,155780,155781,155783,155785,155787,155789,155791,155793],{"class":99,"line":195},[97,155782,30605],{"class":370},[97,155784,323],{"class":103},[97,155786,34177],{"class":370},[97,155788,45756],{"class":319},[97,155790,25308],{"class":370},[97,155792,45998],{"class":103},[97,155794,155795],{"class":191},"# 1\n",[14,155797,155799],{"id":155798},"_26-类型转换","2.6 类型转换",[24,155801,155802],{},"常用转换函数：",[87,155804,155806],{"className":30568,"code":155805,"language":30570,"meta":92,"style":92},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[94,155807,155808,155818,155829,155839],{"__ignoreMap":92},[97,155809,155810,155812,155814,155816],{"class":99,"line":100},[97,155811,326],{"class":370},[97,155813,323],{"class":103},[97,155815,54500],{"class":118},[97,155817,329],{"class":103},[97,155819,155820,155822,155824,155827],{"class":99,"line":195},[97,155821,362],{"class":370},[97,155823,323],{"class":103},[97,155825,155826],{"class":118},"\"3.14\"",[97,155828,329],{"class":103},[97,155830,155831,155833,155835,155837],{"class":99,"line":241},[97,155832,1492],{"class":370},[97,155834,323],{"class":103},[97,155836,631],{"class":370},[97,155838,329],{"class":103},[97,155840,155841,155843,155845,155847],{"class":99,"line":1387},[97,155842,1547],{"class":370},[97,155844,323],{"class":103},[97,155846,537],{"class":370},[97,155848,329],{"class":103},[24,155850,15325],{},[87,155852,155854],{"className":30568,"code":155853,"language":30570,"meta":92,"style":92},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[94,155855,155856,155865,155876],{"__ignoreMap":92},[97,155857,155858,155860,155862],{"class":99,"line":100},[97,155859,146660],{"class":103},[97,155861,115],{"class":319},[97,155863,155864],{"class":118}," \"18\"\n",[97,155866,155867,155869,155871,155873],{"class":99,"line":195},[97,155868,146660],{"class":103},[97,155870,115],{"class":319},[97,155872,2573],{"class":370},[97,155874,155875],{"class":103},"(age)\n",[97,155877,155878,155880,155883,155885,155887],{"class":99,"line":241},[97,155879,30605],{"class":370},[97,155881,155882],{"class":103},"(age ",[97,155884,801],{"class":319},[97,155886,25308],{"class":370},[97,155888,329],{"class":103},[24,155890,155891],{},"输入得到的内容永远是字符串：",[87,155893,155895],{"className":30568,"code":155894,"language":30570,"meta":92,"style":92},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[94,155896,155897,155913],{"__ignoreMap":92},[97,155898,155899,155902,155904,155906,155908,155911],{"class":99,"line":100},[97,155900,155901],{"class":103},"num ",[97,155903,115],{"class":319},[97,155905,60789],{"class":370},[97,155907,323],{"class":103},[97,155909,155910],{"class":118},"\"请输入数字:\"",[97,155912,329],{"class":103},[97,155914,155915,155917,155919,155921,155924],{"class":99,"line":195},[97,155916,30605],{"class":370},[97,155918,323],{"class":103},[97,155920,103291],{"class":370},[97,155922,155923],{"class":103},"(num))  ",[97,155925,155926],{"class":191},"# str\n",[24,155928,155929],{},"如果要做数学运算，必须转换：",[87,155931,155933],{"className":30568,"code":155932,"language":30570,"meta":92,"style":92},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[94,155934,155935,155953],{"__ignoreMap":92},[97,155936,155937,155939,155941,155943,155945,155947,155949,155951],{"class":99,"line":100},[97,155938,155901],{"class":103},[97,155940,115],{"class":319},[97,155942,2573],{"class":370},[97,155944,323],{"class":103},[97,155946,54005],{"class":370},[97,155948,323],{"class":103},[97,155950,155910],{"class":118},[97,155952,30687],{"class":103},[97,155954,155955,155957,155959,155961,155963],{"class":99,"line":195},[97,155956,30605],{"class":370},[97,155958,45809],{"class":103},[97,155960,801],{"class":319},[97,155962,2229],{"class":370},[97,155964,329],{"class":103},[24,155966,155967],{},"常见错误：",[87,155969,155971],{"className":30568,"code":155970,"language":30570,"meta":92,"style":92},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[94,155972,155973,155986],{"__ignoreMap":92},[97,155974,155975,155977,155979,155981,155983],{"class":99,"line":100},[97,155976,326],{"class":370},[97,155978,323],{"class":103},[97,155980,155826],{"class":118},[97,155982,155775],{"class":103},[97,155984,155985],{"class":191},"# 错误\n",[97,155987,155988,155990,155992,155995,155998],{"class":99,"line":195},[97,155989,326],{"class":370},[97,155991,323],{"class":103},[97,155993,155994],{"class":118},"\"abc\"",[97,155996,155997],{"class":103},")    ",[97,155999,155985],{"class":191},[24,156001,156002],{},"正确写法：",[87,156004,156006],{"className":30568,"code":156005,"language":30570,"meta":92,"style":92},"num = float(\"3.14\")\n",[94,156007,156008],{"__ignoreMap":92},[97,156009,156010,156012,156014,156016,156018,156020],{"class":99,"line":100},[97,156011,155901],{"class":103},[97,156013,115],{"class":319},[97,156015,109981],{"class":370},[97,156017,323],{"class":103},[97,156019,155826],{"class":118},[97,156021,329],{"class":103},[14,156023,156025],{"id":156024},"_27-运算符","2.7 运算符",[48,156027,156029],{"id":156028},"_271-算术运算符","2.7.1 算术运算符",[457,156031,156032,156043],{},[460,156033,156034],{},[463,156035,156036,156039,156041],{},[466,156037,156038],{},"运算符",[466,156040,26059],{},[466,156042,27682],{},[504,156044,156045,156059,156073,156087,156101,156115,156129],{},[463,156046,156047,156051,156054],{},[509,156048,156049],{},[94,156050,801],{},[509,156052,156053],{},"加法",[509,156055,156056],{},[94,156057,156058],{},"1 + 2",[463,156060,156061,156065,156068],{},[509,156062,156063],{},[94,156064,852],{},[509,156066,156067],{},"减法",[509,156069,156070],{},[94,156071,156072],{},"5 - 3",[463,156074,156075,156079,156082],{},[509,156076,156077],{},[94,156078,775],{},[509,156080,156081],{},"乘法",[509,156083,156084],{},[94,156085,156086],{},"2 * 3",[463,156088,156089,156093,156096],{},[509,156090,156091],{},[94,156092,904],{},[509,156094,156095],{},"除法，结果是浮点数",[509,156097,156098],{},[94,156099,156100],{},"5 \u002F 2",[463,156102,156103,156107,156110],{},[509,156104,156105],{},[94,156106,33519],{},[509,156108,156109],{},"整除",[509,156111,156112],{},[94,156113,156114],{},"5 \u002F\u002F 2",[463,156116,156117,156121,156124],{},[509,156118,156119],{},[94,156120,648],{},[509,156122,156123],{},"取余",[509,156125,156126],{},[94,156127,156128],{},"5 % 2",[463,156130,156131,156135,156138],{},[509,156132,156133],{},[94,156134,10852],{},[509,156136,156137],{},"幂运算",[509,156139,156140],{},[94,156141,156142],{},"2 ** 3",[24,156144,15325],{},[87,156146,156148],{"className":30568,"code":156147,"language":30570,"meta":92,"style":92},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[94,156149,156150,156168,156185,156202],{"__ignoreMap":92},[97,156151,156152,156154,156156,156158,156161,156163,156165],{"class":99,"line":100},[97,156153,30605],{"class":370},[97,156155,323],{"class":103},[97,156157,639],{"class":370},[97,156159,156160],{"class":319}," \u002F",[97,156162,14946],{"class":370},[97,156164,155775],{"class":103},[97,156166,156167],{"class":191},"# 2.5\n",[97,156169,156170,156172,156174,156176,156179,156181,156183],{"class":99,"line":195},[97,156171,30605],{"class":370},[97,156173,323],{"class":103},[97,156175,639],{"class":370},[97,156177,156178],{"class":319}," \u002F\u002F",[97,156180,14946],{"class":370},[97,156182,45998],{"class":103},[97,156184,155778],{"class":191},[97,156186,156187,156189,156191,156193,156196,156198,156200],{"class":99,"line":241},[97,156188,30605],{"class":370},[97,156190,323],{"class":103},[97,156192,639],{"class":370},[97,156194,156195],{"class":319}," %",[97,156197,14946],{"class":370},[97,156199,155775],{"class":103},[97,156201,155795],{"class":191},[97,156203,156204,156206,156208,156210,156213,156215,156217],{"class":99,"line":1387},[97,156205,30605],{"class":370},[97,156207,323],{"class":103},[97,156209,398],{"class":370},[97,156211,156212],{"class":319}," **",[97,156214,78254],{"class":370},[97,156216,45998],{"class":103},[97,156218,156219],{"class":191},"# 8\n",[48,156221,156223],{"id":156222},"_272-赋值运算符","2.7.2 赋值运算符",[87,156225,156227],{"className":30568,"code":156226,"language":30570,"meta":92,"style":92},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[94,156228,156229,156237,156245,156253,156261],{"__ignoreMap":92},[97,156230,156231,156233,156235],{"class":99,"line":100},[97,156232,155901],{"class":103},[97,156234,115],{"class":319},[97,156236,58612],{"class":370},[97,156238,156239,156241,156243],{"class":99,"line":195},[97,156240,155901],{"class":103},[97,156242,9668],{"class":319},[97,156244,54611],{"class":370},[97,156246,156247,156249,156251],{"class":99,"line":241},[97,156248,155901],{"class":103},[97,156250,150366],{"class":319},[97,156252,47913],{"class":370},[97,156254,156255,156257,156259],{"class":99,"line":1387},[97,156256,155901],{"class":103},[97,156258,137327],{"class":319},[97,156260,120220],{"class":370},[97,156262,156263,156265,156268],{"class":99,"line":1393},[97,156264,155901],{"class":103},[97,156266,156267],{"class":319},"\u002F=",[97,156269,47913],{"class":370},[24,156271,156272],{},"等价关系：",[87,156274,156276],{"className":30568,"code":156275,"language":30570,"meta":92,"style":92},"num += 1\nnum = num + 1\n",[94,156277,156278,156286],{"__ignoreMap":92},[97,156279,156280,156282,156284],{"class":99,"line":100},[97,156281,155901],{"class":103},[97,156283,9668],{"class":319},[97,156285,55883],{"class":370},[97,156287,156288,156290,156292,156295,156297],{"class":99,"line":195},[97,156289,155901],{"class":103},[97,156291,115],{"class":319},[97,156293,156294],{"class":103}," num ",[97,156296,801],{"class":319},[97,156298,55883],{"class":370},[24,156300,156301,156302,101202,156305,28575],{},"Python 没有 ",[94,156303,156304],{},"num++",[94,156306,156307],{},"num--",[48,156309,156311],{"id":156310},"_273-比较运算符","2.7.3 比较运算符",[24,156313,156314],{},"比较运算结果是布尔值。",[87,156316,156318],{"className":30568,"code":156317,"language":30570,"meta":92,"style":92},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[94,156319,156320,156334,156349,156363],{"__ignoreMap":92},[97,156321,156322,156324,156326,156328,156330,156332],{"class":99,"line":100},[97,156323,30605],{"class":370},[97,156325,323],{"class":103},[97,156327,766],{"class":370},[97,156329,26412],{"class":319},[97,156331,2339],{"class":370},[97,156333,329],{"class":103},[97,156335,156336,156338,156340,156342,156345,156347],{"class":99,"line":195},[97,156337,30605],{"class":370},[97,156339,323],{"class":103},[97,156341,766],{"class":370},[97,156343,156344],{"class":319}," >=",[97,156346,2229],{"class":370},[97,156348,329],{"class":103},[97,156350,156351,156353,156355,156357,156359,156361],{"class":99,"line":241},[97,156352,30605],{"class":370},[97,156354,323],{"class":103},[97,156356,766],{"class":370},[97,156358,101743],{"class":319},[97,156360,2274],{"class":370},[97,156362,329],{"class":103},[97,156364,156365,156367,156369,156371,156374,156376],{"class":99,"line":1387},[97,156366,30605],{"class":370},[97,156368,323],{"class":103},[97,156370,766],{"class":370},[97,156372,156373],{"class":319}," !=",[97,156375,2274],{"class":370},[97,156377,329],{"class":103},[24,156379,156380,156381,156383,156384,28575],{},"注意：判断相等用 ",[94,156382,3140],{},"，赋值用 ",[94,156385,115],{},[87,156387,156389],{"className":30568,"code":156388,"language":30570,"meta":92,"style":92},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[94,156390,156391,156403],{"__ignoreMap":92},[97,156392,156393,156395,156397,156400],{"class":99,"line":100},[97,156394,146660],{"class":103},[97,156396,115],{"class":319},[97,156398,156399],{"class":370}," 18",[97,156401,156402],{"class":191},"       # 赋值\n",[97,156404,156405,156407,156409,156411],{"class":99,"line":195},[97,156406,146660],{"class":103},[97,156408,3140],{"class":319},[97,156410,156399],{"class":370},[97,156412,156413],{"class":191},"      # 判断是否相等\n",[48,156415,156417],{"id":156416},"_274-逻辑运算符","2.7.4 逻辑运算符",[457,156419,156420,156428],{},[460,156421,156422],{},[463,156423,156424,156426],{},[466,156425,156038],{},[466,156427,26059],{},[504,156429,156430,156439,156448],{},[463,156431,156432,156436],{},[509,156433,156434],{},[94,156435,30652],{},[509,156437,156438],{},"并且",[463,156440,156441,156445],{},[509,156442,156443],{},[94,156444,115274],{},[509,156446,156447],{},"或者",[463,156449,156450,156455],{},[509,156451,156452],{},[94,156453,156454],{},"not",[509,156456,156457],{},"取反",[87,156459,156461],{"className":30568,"code":156460,"language":30570,"meta":92,"style":92},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[94,156462,156463,156471,156480,156484,156499,156513],{"__ignoreMap":92},[97,156464,156465,156467,156469],{"class":99,"line":100},[97,156466,146660],{"class":103},[97,156468,115],{"class":319},[97,156470,88249],{"class":370},[97,156472,156473,156476,156478],{"class":99,"line":195},[97,156474,156475],{"class":103},"has_ticket ",[97,156477,115],{"class":319},[97,156479,153713],{"class":370},[97,156481,156482],{"class":99,"line":241},[97,156483,2591],{"emptyLinePlaceholder":249},[97,156485,156486,156488,156490,156492,156494,156496],{"class":99,"line":1387},[97,156487,30605],{"class":370},[97,156489,155882],{"class":103},[97,156491,1902],{"class":319},[97,156493,156399],{"class":370},[97,156495,120613],{"class":319},[97,156497,156498],{"class":103}," has_ticket)\n",[97,156500,156501,156503,156505,156507,156509,156511],{"class":99,"line":1393},[97,156502,30605],{"class":370},[97,156504,155882],{"class":103},[97,156506,104],{"class":319},[97,156508,156399],{"class":370},[97,156510,114385],{"class":319},[97,156512,156498],{"class":103},[97,156514,156515,156517,156519,156521],{"class":99,"line":1407},[97,156516,30605],{"class":370},[97,156518,323],{"class":103},[97,156520,156454],{"class":319},[97,156522,156498],{"class":103},[14,156524,156526],{"id":156525},"_28-字符串定义","2.8 字符串定义",[24,156528,156529],{},"三种常见写法：",[87,156531,156533],{"className":30568,"code":156532,"language":30570,"meta":92,"style":92},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[94,156534,156535,156545,156554,156564],{"__ignoreMap":92},[97,156536,156537,156540,156542],{"class":99,"line":100},[97,156538,156539],{"class":103},"name1 ",[97,156541,115],{"class":319},[97,156543,156544],{"class":118}," '小明'\n",[97,156546,156547,156550,156552],{"class":99,"line":195},[97,156548,156549],{"class":103},"name2 ",[97,156551,115],{"class":319},[97,156553,149467],{"class":118},[97,156555,156556,156559,156561],{"class":99,"line":241},[97,156557,156558],{"class":103},"text ",[97,156560,115],{"class":319},[97,156562,156563],{"class":118}," \"\"\"这是多行字符串\n",[97,156565,156566],{"class":99,"line":1387},[97,156567,156568],{"class":118},"可以换行\"\"\"\n",[24,156570,156571],{},"字符串中包含引号：",[87,156573,156575],{"className":30568,"code":156574,"language":30570,"meta":92,"style":92},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[94,156576,156577,156587,156597],{"__ignoreMap":92},[97,156578,156579,156582,156584],{"class":99,"line":100},[97,156580,156581],{"class":103},"msg ",[97,156583,115],{"class":319},[97,156585,156586],{"class":118}," \"他说:'你好'\"\n",[97,156588,156589,156592,156594],{"class":99,"line":195},[97,156590,156591],{"class":103},"msg2 ",[97,156593,115],{"class":319},[97,156595,156596],{"class":118}," '他说:\"你好\"'\n",[97,156598,156599,156602,156604,156607,156610,156613,156615],{"class":99,"line":241},[97,156600,156601],{"class":103},"msg3 ",[97,156603,115],{"class":319},[97,156605,156606],{"class":118}," \"他说:",[97,156608,156609],{"class":370},"\\\"",[97,156611,156612],{"class":118},"你好",[97,156614,156609],{"class":370},[97,156616,25323],{"class":118},[24,156618,156619],{},"常见转义字符：",[457,156621,156622,156631],{},[460,156623,156624],{},[463,156625,156626,156629],{},[466,156627,156628],{},"写法",[466,156630,100884],{},[504,156632,156633,156643,156652,156662,156671],{},[463,156634,156635,156640],{},[509,156636,156637],{},[94,156638,156639],{},"\\n",[509,156641,156642],{},"换行",[463,156644,156645,156649],{},[509,156646,156647],{},[94,156648,1423],{},[509,156650,156651],{},"制表符",[463,156653,156654,156659],{},[509,156655,156656],{},[94,156657,156658],{},"\\\\",[509,156660,156661],{},"反斜杠",[463,156663,156664,156668],{},[509,156665,156666],{},[94,156667,156609],{},[509,156669,156670],{},"双引号",[463,156672,156673,156678],{},[509,156674,156675],{},[94,156676,156677],{},"\\'",[509,156679,156680],{},"单引号",[14,156682,156684],{"id":156683},"_29-字符串拼接","2.9 字符串拼接",[87,156686,156688],{"className":30568,"code":156687,"language":30570,"meta":92,"style":92},"name = \"小明\"\nprint(\"你好，\" + name)\n",[94,156689,156690,156698],{"__ignoreMap":92},[97,156691,156692,156694,156696],{"class":99,"line":100},[97,156693,146650],{"class":103},[97,156695,115],{"class":319},[97,156697,149467],{"class":118},[97,156699,156700,156702,156704,156707,156709],{"class":99,"line":195},[97,156701,30605],{"class":370},[97,156703,323],{"class":103},[97,156705,156706],{"class":118},"\"你好，\"",[97,156708,45756],{"class":319},[97,156710,156711],{"class":103}," name)\n",[24,156713,156714],{},"字符串只能和字符串拼接：",[87,156716,156718],{"className":30568,"code":156717,"language":30570,"meta":92,"style":92},"age = 18\nprint(\"年龄:\" + str(age))\n",[94,156719,156720,156728],{"__ignoreMap":92},[97,156721,156722,156724,156726],{"class":99,"line":100},[97,156723,146660],{"class":103},[97,156725,115],{"class":319},[97,156727,146665],{"class":370},[97,156729,156730,156732,156734,156736,156738,156740],{"class":99,"line":195},[97,156731,30605],{"class":370},[97,156733,323],{"class":103},[97,156735,146631],{"class":118},[97,156737,45756],{"class":319},[97,156739,74103],{"class":370},[97,156741,156742],{"class":103},"(age))\n",[24,156744,156745],{},"更推荐使用格式化字符串。",[14,156747,156749],{"id":156748},"_210-字符串格式化","2.10 字符串格式化",[48,156751,156753],{"id":156752},"_2101-百分号格式化","2.10.1 百分号格式化",[87,156755,156757],{"className":30568,"code":156756,"language":30570,"meta":92,"style":92},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[94,156758,156759,156767,156775,156784,156788],{"__ignoreMap":92},[97,156760,156761,156763,156765],{"class":99,"line":100},[97,156762,146650],{"class":103},[97,156764,115],{"class":319},[97,156766,149467],{"class":118},[97,156768,156769,156771,156773],{"class":99,"line":195},[97,156770,146660],{"class":103},[97,156772,115],{"class":319},[97,156774,146665],{"class":370},[97,156776,156777,156779,156781],{"class":99,"line":241},[97,156778,155472],{"class":103},[97,156780,115],{"class":319},[97,156782,156783],{"class":370}," 95.5\n",[97,156785,156786],{"class":99,"line":1387},[97,156787,2591],{"emptyLinePlaceholder":249},[97,156789,156790,156792,156794,156797,156800,156803,156806,156809,156812,156814,156816],{"class":99,"line":1393},[97,156791,30605],{"class":370},[97,156793,323],{"class":103},[97,156795,156796],{"class":118},"\"姓名:",[97,156798,156799],{"class":370},"%s",[97,156801,156802],{"class":118}," 年龄:",[97,156804,156805],{"class":370},"%d",[97,156807,156808],{"class":118}," 分数:",[97,156810,156811],{"class":370},"%.1f",[97,156813,571],{"class":118},[97,156815,156195],{"class":319},[97,156817,156818],{"class":103}," (name, age, score))\n",[24,156820,156821],{},"常用占位符：",[457,156823,156824,156833],{},[460,156825,156826],{},[463,156827,156828,156831],{},[466,156829,156830],{},"占位符",[466,156832,26059],{},[504,156834,156835,156843,156851],{},[463,156836,156837,156841],{},[509,156838,156839],{},[94,156840,156799],{},[509,156842,155338],{},[463,156844,156845,156849],{},[509,156846,156847],{},[94,156848,156805],{},[509,156850,155316],{},[463,156852,156853,156858],{},[509,156854,156855],{},[94,156856,156857],{},"%f",[509,156859,155327],{},[24,156861,156862],{},"精度控制：",[87,156864,156866],{"className":30568,"code":156865,"language":30570,"meta":92,"style":92},"price = 12.3456\nprint(\"%.2f\" % price)\n",[94,156867,156868,156877],{"__ignoreMap":92},[97,156869,156870,156872,156874],{"class":99,"line":100},[97,156871,146795],{"class":103},[97,156873,115],{"class":319},[97,156875,156876],{"class":370}," 12.3456\n",[97,156878,156879,156881,156883,156885,156888,156890,156892],{"class":99,"line":195},[97,156880,30605],{"class":370},[97,156882,323],{"class":103},[97,156884,571],{"class":118},[97,156886,156887],{"class":370},"%.2f",[97,156889,571],{"class":118},[97,156891,156195],{"class":319},[97,156893,156894],{"class":103}," price)\n",[48,156896,156898],{"id":156897},"_2102-format方法","2.10.2 format方法",[87,156900,156902],{"className":30568,"code":156901,"language":30570,"meta":92,"style":92},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[94,156903,156904,156912,156920,156924,156943,156963],{"__ignoreMap":92},[97,156905,156906,156908,156910],{"class":99,"line":100},[97,156907,146650],{"class":103},[97,156909,115],{"class":319},[97,156911,149467],{"class":118},[97,156913,156914,156916,156918],{"class":99,"line":195},[97,156915,146660],{"class":103},[97,156917,115],{"class":319},[97,156919,146665],{"class":370},[97,156921,156922],{"class":99,"line":241},[97,156923,2591],{"emptyLinePlaceholder":249},[97,156925,156926,156928,156930,156932,156934,156936,156938,156940],{"class":99,"line":1387},[97,156927,30605],{"class":370},[97,156929,323],{"class":103},[97,156931,156796],{"class":118},[97,156933,32649],{"class":370},[97,156935,156802],{"class":118},[97,156937,32649],{"class":370},[97,156939,571],{"class":118},[97,156941,156942],{"class":103},".format(name, age))\n",[97,156944,156945,156947,156949,156951,156954,156956,156959,156961],{"class":99,"line":1393},[97,156946,30605],{"class":370},[97,156948,323],{"class":103},[97,156950,156796],{"class":118},[97,156952,156953],{"class":370},"{0}",[97,156955,156802],{"class":118},[97,156957,156958],{"class":370},"{1}",[97,156960,571],{"class":118},[97,156962,156942],{"class":103},[97,156964,156965,156967,156969,156971,156974,156976,156979,156981,156984,156986,156988,156991,156993,156995],{"class":99,"line":1407},[97,156966,30605],{"class":370},[97,156968,323],{"class":103},[97,156970,156796],{"class":118},[97,156972,156973],{"class":370},"{name}",[97,156975,156802],{"class":118},[97,156977,156978],{"class":370},"{age}",[97,156980,571],{"class":118},[97,156982,156983],{"class":103},".format(",[97,156985,79994],{"class":5407},[97,156987,115],{"class":319},[97,156989,156990],{"class":103},"name, ",[97,156992,70405],{"class":5407},[97,156994,115],{"class":319},[97,156996,156997],{"class":103},"age))\n",[48,156999,157001],{"id":157000},"_2103-f-string","2.10.3 f-string",[24,157003,157004],{},"推荐写法：",[87,157006,157008],{"className":30568,"code":157007,"language":30570,"meta":92,"style":92},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[94,157009,157010,157018,157026,157034,157038],{"__ignoreMap":92},[97,157011,157012,157014,157016],{"class":99,"line":100},[97,157013,146650],{"class":103},[97,157015,115],{"class":319},[97,157017,149467],{"class":118},[97,157019,157020,157022,157024],{"class":99,"line":195},[97,157021,146660],{"class":103},[97,157023,115],{"class":319},[97,157025,146665],{"class":370},[97,157027,157028,157030,157032],{"class":99,"line":241},[97,157029,155472],{"class":103},[97,157031,115],{"class":319},[97,157033,156783],{"class":370},[97,157035,157036],{"class":99,"line":1387},[97,157037,2591],{"emptyLinePlaceholder":249},[97,157039,157040,157042,157044,157046,157048,157050,157052,157054,157056,157058,157060,157062,157064,157066,157069,157072,157074,157076],{"class":99,"line":1393},[97,157041,30605],{"class":370},[97,157043,323],{"class":103},[97,157045,374],{"class":319},[97,157047,156796],{"class":118},[97,157049,1216],{"class":370},[97,157051,79994],{"class":103},[97,157053,1265],{"class":370},[97,157055,156802],{"class":118},[97,157057,1216],{"class":370},[97,157059,70405],{"class":103},[97,157061,1265],{"class":370},[97,157063,156808],{"class":118},[97,157065,1216],{"class":370},[97,157067,157068],{"class":103},"score",[97,157070,157071],{"class":319},":.1f",[97,157073,1265],{"class":370},[97,157075,571],{"class":118},[97,157077,329],{"class":103},[24,157079,157080],{},"表达式也可以放进去：",[87,157082,157084],{"className":30568,"code":157083,"language":30570,"meta":92,"style":92},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[94,157085,157086,157094,157102],{"__ignoreMap":92},[97,157087,157088,157090,157092],{"class":99,"line":100},[97,157089,146795],{"class":103},[97,157091,115],{"class":319},[97,157093,146800],{"class":370},[97,157095,157096,157098,157100],{"class":99,"line":195},[97,157097,146805],{"class":103},[97,157099,115],{"class":319},[97,157101,54611],{"class":370},[97,157103,157104,157106,157108,157110,157113,157115,157117,157119,157122,157124,157127],{"class":99,"line":241},[97,157105,30605],{"class":370},[97,157107,323],{"class":103},[97,157109,374],{"class":319},[97,157111,157112],{"class":118},"\"总价:",[97,157114,1216],{"class":370},[97,157116,146795],{"class":103},[97,157118,775],{"class":319},[97,157120,157121],{"class":103}," count",[97,157123,1265],{"class":370},[97,157125,157126],{"class":118},"元\"",[97,157128,329],{"class":103},[14,157130,157132],{"id":157131},"_211-input输入","2.11 input输入",[24,157134,157135,157138],{},[94,157136,157137],{},"input()"," 会暂停程序，等待用户输入。",[87,157140,157142],{"className":30568,"code":157141,"language":30570,"meta":92,"style":92},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[94,157143,157144,157158],{"__ignoreMap":92},[97,157145,157146,157148,157150,157152,157154,157156],{"class":99,"line":100},[97,157147,146650],{"class":103},[97,157149,115],{"class":319},[97,157151,60789],{"class":370},[97,157153,323],{"class":103},[97,157155,152493],{"class":118},[97,157157,329],{"class":103},[97,157159,157160,157162,157164,157166,157169,157171,157173,157175,157177],{"class":99,"line":195},[97,157161,30605],{"class":370},[97,157163,323],{"class":103},[97,157165,374],{"class":319},[97,157167,157168],{"class":118},"\"你好，",[97,157170,1216],{"class":370},[97,157172,79994],{"class":103},[97,157174,1265],{"class":370},[97,157176,571],{"class":118},[97,157178,329],{"class":103},[24,157180,157181],{},"输入整数：",[87,157183,157185],{"className":30568,"code":157184,"language":30570,"meta":92,"style":92},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[94,157186,157187,157205],{"__ignoreMap":92},[97,157188,157189,157191,157193,157195,157197,157199,157201,157203],{"class":99,"line":100},[97,157190,146660],{"class":103},[97,157192,115],{"class":319},[97,157194,2573],{"class":370},[97,157196,323],{"class":103},[97,157198,54005],{"class":370},[97,157200,323],{"class":103},[97,157202,152508],{"class":118},[97,157204,30687],{"class":103},[97,157206,157207,157209,157211,157213,157216,157218,157220,157222,157225,157227],{"class":99,"line":195},[97,157208,30605],{"class":370},[97,157210,323],{"class":103},[97,157212,374],{"class":319},[97,157214,157215],{"class":118},"\"明年你",[97,157217,1216],{"class":370},[97,157219,146660],{"class":103},[97,157221,801],{"class":319},[97,157223,157224],{"class":370}," 1}",[97,157226,149518],{"class":118},[97,157228,329],{"class":103},[24,157230,157231],{},"输入小数：",[87,157233,157235],{"className":30568,"code":157234,"language":30570,"meta":92,"style":92},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[94,157236,157237,157256],{"__ignoreMap":92},[97,157238,157239,157241,157243,157245,157247,157249,157251,157254],{"class":99,"line":100},[97,157240,155445],{"class":103},[97,157242,115],{"class":319},[97,157244,109981],{"class":370},[97,157246,323],{"class":103},[97,157248,54005],{"class":370},[97,157250,323],{"class":103},[97,157252,157253],{"class":118},"\"请输入身高:\"",[97,157255,30687],{"class":103},[97,157257,157258,157260,157262,157264,157267,157269,157271,157274,157276,157279],{"class":99,"line":195},[97,157259,30605],{"class":370},[97,157261,323],{"class":103},[97,157263,374],{"class":319},[97,157265,157266],{"class":118},"\"身高:",[97,157268,1216],{"class":370},[97,157270,25171],{"class":103},[97,157272,157273],{"class":319},":.2f",[97,157275,1265],{"class":370},[97,157277,157278],{"class":118},"米\"",[97,157280,329],{"class":103},[14,157282,157284],{"id":157283},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[24,157286,123476],{},[138,157288,157289,157292,157295,157298],{},[70,157290,157291],{},"输入商品单价。",[70,157293,157294],{},"输入购买数量。",[70,157296,157297],{},"输入折扣，例如 0.8 表示八折。",[70,157299,157300],{},"输出最终金额，保留两位小数。",[24,157302,10226],{},[87,157304,157306],{"className":30568,"code":157305,"language":30570,"meta":92,"style":92},"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",[94,157307,157308,157327,157346,157366,157370,157390,157394,157417,157438,157460],{"__ignoreMap":92},[97,157309,157310,157312,157314,157316,157318,157320,157322,157325],{"class":99,"line":100},[97,157311,146795],{"class":103},[97,157313,115],{"class":319},[97,157315,109981],{"class":370},[97,157317,323],{"class":103},[97,157319,54005],{"class":370},[97,157321,323],{"class":103},[97,157323,157324],{"class":118},"\"请输入商品单价:\"",[97,157326,30687],{"class":103},[97,157328,157329,157331,157333,157335,157337,157339,157341,157344],{"class":99,"line":195},[97,157330,146805],{"class":103},[97,157332,115],{"class":319},[97,157334,2573],{"class":370},[97,157336,323],{"class":103},[97,157338,54005],{"class":370},[97,157340,323],{"class":103},[97,157342,157343],{"class":118},"\"请输入购买数量:\"",[97,157345,30687],{"class":103},[97,157347,157348,157351,157353,157355,157357,157359,157361,157364],{"class":99,"line":241},[97,157349,157350],{"class":103},"discount ",[97,157352,115],{"class":319},[97,157354,109981],{"class":370},[97,157356,323],{"class":103},[97,157358,54005],{"class":370},[97,157360,323],{"class":103},[97,157362,157363],{"class":118},"\"请输入折扣:\"",[97,157365,30687],{"class":103},[97,157367,157368],{"class":99,"line":1387},[97,157369,2591],{"emptyLinePlaceholder":249},[97,157371,157372,157375,157377,157380,157382,157385,157387],{"class":99,"line":1393},[97,157373,157374],{"class":103},"total ",[97,157376,115],{"class":319},[97,157378,157379],{"class":103}," price ",[97,157381,775],{"class":319},[97,157383,157384],{"class":103}," count ",[97,157386,775],{"class":319},[97,157388,157389],{"class":103}," discount\n",[97,157391,157392],{"class":99,"line":1407},[97,157393,2591],{"emptyLinePlaceholder":249},[97,157395,157396,157398,157400,157402,157405,157407,157409,157411,157413,157415],{"class":99,"line":1413},[97,157397,30605],{"class":370},[97,157399,323],{"class":103},[97,157401,374],{"class":319},[97,157403,157404],{"class":118},"\"商品单价:",[97,157406,1216],{"class":370},[97,157408,79999],{"class":103},[97,157410,157273],{"class":319},[97,157412,1265],{"class":370},[97,157414,571],{"class":118},[97,157416,329],{"class":103},[97,157418,157419,157421,157423,157425,157428,157430,157432,157434,157436],{"class":99,"line":1504},[97,157420,30605],{"class":370},[97,157422,323],{"class":103},[97,157424,374],{"class":319},[97,157426,157427],{"class":118},"\"购买数量:",[97,157429,1216],{"class":370},[97,157431,84618],{"class":103},[97,157433,1265],{"class":370},[97,157435,571],{"class":118},[97,157437,329],{"class":103},[97,157439,157440,157442,157444,157446,157449,157451,157454,157456,157458],{"class":99,"line":1510},[97,157441,30605],{"class":370},[97,157443,323],{"class":103},[97,157445,374],{"class":319},[97,157447,157448],{"class":118},"\"折扣:",[97,157450,1216],{"class":370},[97,157452,157453],{"class":103},"discount",[97,157455,1265],{"class":370},[97,157457,571],{"class":118},[97,157459,329],{"class":103},[97,157461,157462,157464,157466,157468,157471,157473,157476,157478,157480,157482],{"class":99,"line":1522},[97,157463,30605],{"class":370},[97,157465,323],{"class":103},[97,157467,374],{"class":319},[97,157469,157470],{"class":118},"\"应付金额:",[97,157472,1216],{"class":370},[97,157474,157475],{"class":103},"total",[97,157477,157273],{"class":319},[97,157479,1265],{"class":370},[97,157481,157126],{"class":118},[97,157483,329],{"class":103},[14,157485,157487],{"id":157486},"_213-易错点","2.13 易错点",[138,157489,157490,157495,157501,157509,157512],{},[70,157491,157492,157494],{},[94,157493,157137],{}," 的结果是字符串，做运算前要转换。",[70,157496,157497,157498,28575],{},"字符串拼接时，数字要先 ",[94,157499,157500],{},"str()",[70,157502,157503,157505,157506,157508],{},[94,157504,115],{}," 是赋值，",[94,157507,3140],{}," 是比较。",[70,157510,157511],{},"Python 没有自增自减运算符。",[70,157513,157514],{},"浮点数计算可能有精度误差：",[87,157516,157518],{"className":30568,"code":157517,"language":30570,"meta":92,"style":92},"print(0.1 + 0.2)\n",[94,157519,157520],{"__ignoreMap":92},[97,157521,157522,157524,157526,157528,157530,157533],{"class":99,"line":100},[97,157523,30605],{"class":370},[97,157525,323],{"class":103},[97,157527,86394],{"class":370},[97,157529,45756],{"class":319},[97,157531,157532],{"class":370}," 0.2",[97,157534,329],{"class":103},[24,157536,157537,157538,157541],{},"金额计算如果要求严格，可以后续学习 ",[94,157539,157540],{},"decimal"," 模块。",[14,157543,157545],{"id":157544},"_214-本章练习","2.14 本章练习",[138,157547,157548,157551,157554,157557,157560],{},[70,157549,157550],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[70,157552,157553],{},"输入圆的半径，计算面积，保留两位小数。",[70,157555,157556],{},"输入工资和奖金，计算总收入。",[70,157558,157559],{},"输入摄氏温度，转换为华氏温度。",[70,157561,157562],{},"写一个 BMI 计算程序：",[87,157564,157567],{"className":157565,"code":157566,"language":5378,"meta":92},[5376],"BMI = 体重kg \u002F 身高m ** 2\n",[94,157568,157566],{"__ignoreMap":92},[231,157570,157571],{},"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":92,"searchDepth":195,"depth":195,"links":157573},[157574,157575,157576,157577,157578,157579,157580,157586,157587,157588,157593,157594,157595,157596],{"id":155135,"depth":195,"text":155136},{"id":155244,"depth":195,"text":155245},{"id":155415,"depth":195,"text":155416},{"id":155492,"depth":195,"text":155493},{"id":50921,"depth":195,"text":50922},{"id":155798,"depth":195,"text":155799},{"id":156024,"depth":195,"text":156025,"children":157581},[157582,157583,157584,157585],{"id":156028,"depth":241,"text":156029},{"id":156222,"depth":241,"text":156223},{"id":156310,"depth":241,"text":156311},{"id":156416,"depth":241,"text":156417},{"id":156525,"depth":195,"text":156526},{"id":156683,"depth":195,"text":156684},{"id":156748,"depth":195,"text":156749,"children":157589},[157590,157591,157592],{"id":156752,"depth":241,"text":156753},{"id":156897,"depth":241,"text":156898},{"id":157000,"depth":241,"text":157001},{"id":157131,"depth":195,"text":157132},{"id":157283,"depth":195,"text":157284},{"id":157486,"depth":195,"text":157487},{"id":157544,"depth":195,"text":157545},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155127,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157603,"title":157604,"body":157605,"description":246,"extension":247,"meta":159241,"navigation":249,"path":159242,"seo":159243,"stem":159244,"__hash__":159245},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157606,"toc":159222},[157607,157610,157614,157617,157632,157635,157663,157667,157717,157719,157735,157738,157764,157767,157771,157838,157841,157857,157861,157864,157982,157985,157992,158041,158047,158051,158054,158167,158170,158174,158178,158181,158231,158235,158238,158288,158292,158295,158333,158337,158340,158386,158389,158424,158428,158433,158436,158482,158484,158551,158555,158561,158672,158681,158685,158687,158698,158700,158866,158870,158872,158886,158888,159102,159106,159125,159142,159145,159191,159195,159219],[10,157608,157604],{"id":157609},"_3-判断语句",[14,157611,157613],{"id":157612},"_31-布尔值","3.1 布尔值",[24,157615,157616],{},"判断语句依赖布尔值：",[87,157618,157620],{"className":30568,"code":157619,"language":30570,"meta":92,"style":92},"True\nFalse\n",[94,157621,157622,157627],{"__ignoreMap":92},[97,157623,157624],{"class":99,"line":100},[97,157625,157626],{"class":370},"True\n",[97,157628,157629],{"class":99,"line":195},[97,157630,157631],{"class":370},"False\n",[24,157633,157634],{},"比较表达式会产生布尔值：",[87,157636,157638],{"className":30568,"code":157637,"language":30570,"meta":92,"style":92},"age = 18\nprint(age >= 18)  # True\n",[94,157639,157640,157648],{"__ignoreMap":92},[97,157641,157642,157644,157646],{"class":99,"line":100},[97,157643,146660],{"class":103},[97,157645,115],{"class":319},[97,157647,146665],{"class":370},[97,157649,157650,157652,157654,157656,157658,157660],{"class":99,"line":195},[97,157651,30605],{"class":370},[97,157653,155882],{"class":103},[97,157655,1902],{"class":319},[97,157657,156399],{"class":370},[97,157659,45998],{"class":103},[97,157661,157662],{"class":191},"# True\n",[14,157664,157666],{"id":157665},"_32-if基础语法","3.2 if基础语法",[87,157668,157670],{"className":30568,"code":157669,"language":30570,"meta":92,"style":92},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[94,157671,157672,157690,157694,157706],{"__ignoreMap":92},[97,157673,157674,157676,157678,157680,157682,157684,157686,157688],{"class":99,"line":100},[97,157675,146660],{"class":103},[97,157677,115],{"class":319},[97,157679,2573],{"class":370},[97,157681,323],{"class":103},[97,157683,54005],{"class":370},[97,157685,323],{"class":103},[97,157687,152508],{"class":118},[97,157689,30687],{"class":103},[97,157691,157692],{"class":99,"line":195},[97,157693,2591],{"emptyLinePlaceholder":249},[97,157695,157696,157698,157700,157702,157704],{"class":99,"line":241},[97,157697,1723],{"class":319},[97,157699,15897],{"class":103},[97,157701,1902],{"class":319},[97,157703,156399],{"class":370},[97,157705,3930],{"class":103},[97,157707,157708,157710,157712,157715],{"class":99,"line":1387},[97,157709,31489],{"class":370},[97,157711,323],{"class":103},[97,157713,157714],{"class":118},"\"可以进入网吧\"",[97,157716,329],{"class":103},[24,157718,9216],{},[138,157720,157721,157726,157729,157732],{},[70,157722,157723,157725],{},[94,157724,1723],{}," 后面是条件表达式。",[70,157727,157728],{},"条件后面必须写冒号。",[70,157730,157731],{},"条件成立时执行缩进代码块。",[70,157733,157734],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[24,157736,157737],{},"错误示例：",[87,157739,157741],{"className":30568,"code":157740,"language":30570,"meta":92,"style":92},"if age >= 18\n    print(\"可以进入\")\n",[94,157742,157743,157753],{"__ignoreMap":92},[97,157744,157745,157747,157749,157751],{"class":99,"line":100},[97,157746,1723],{"class":319},[97,157748,15897],{"class":103},[97,157750,1902],{"class":319},[97,157752,146665],{"class":370},[97,157754,157755,157757,157759,157762],{"class":99,"line":195},[97,157756,31489],{"class":370},[97,157758,323],{"class":103},[97,157760,157761],{"class":118},"\"可以进入\"",[97,157763,329],{"class":103},[24,157765,157766],{},"缺少冒号。",[14,157768,157770],{"id":157769},"_33-if-else","3.3 if else",[87,157772,157774],{"className":30568,"code":157773,"language":30570,"meta":92,"style":92},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[94,157775,157776,157794,157798,157810,157821,157827],{"__ignoreMap":92},[97,157777,157778,157780,157782,157784,157786,157788,157790,157792],{"class":99,"line":100},[97,157779,146660],{"class":103},[97,157781,115],{"class":319},[97,157783,2573],{"class":370},[97,157785,323],{"class":103},[97,157787,54005],{"class":370},[97,157789,323],{"class":103},[97,157791,152508],{"class":118},[97,157793,30687],{"class":103},[97,157795,157796],{"class":99,"line":195},[97,157797,2591],{"emptyLinePlaceholder":249},[97,157799,157800,157802,157804,157806,157808],{"class":99,"line":241},[97,157801,1723],{"class":319},[97,157803,15897],{"class":103},[97,157805,1902],{"class":319},[97,157807,156399],{"class":370},[97,157809,3930],{"class":103},[97,157811,157812,157814,157816,157819],{"class":99,"line":1387},[97,157813,31489],{"class":370},[97,157815,323],{"class":103},[97,157817,157818],{"class":118},"\"成年人\"",[97,157820,329],{"class":103},[97,157822,157823,157825],{"class":99,"line":1393},[97,157824,1893],{"class":319},[97,157826,3930],{"class":103},[97,157828,157829,157831,157833,157836],{"class":99,"line":1407},[97,157830,31489],{"class":370},[97,157832,323],{"class":103},[97,157834,157835],{"class":118},"\"未成年人\"",[97,157837,329],{"class":103},[24,157839,157840],{},"执行逻辑：",[138,157842,157843,157849,157854],{},[70,157844,157845,157846,157848],{},"条件成立，执行 ",[94,157847,1723],{}," 代码块。",[70,157850,157851,157852,157848],{},"条件不成立，执行 ",[94,157853,1893],{},[70,157855,157856],{},"两个代码块只会执行其中一个。",[14,157858,157860],{"id":157859},"_34-if-elif-else","3.4 if elif else",[24,157862,157863],{},"多条件判断：",[87,157865,157867],{"className":30568,"code":157866,"language":30570,"meta":92,"style":92},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[94,157868,157869,157887,157891,157905,157916,157930,157941,157954,157965,157971],{"__ignoreMap":92},[97,157870,157871,157873,157875,157877,157879,157881,157883,157885],{"class":99,"line":100},[97,157872,155472],{"class":103},[97,157874,115],{"class":319},[97,157876,2573],{"class":370},[97,157878,323],{"class":103},[97,157880,54005],{"class":370},[97,157882,323],{"class":103},[97,157884,152523],{"class":118},[97,157886,30687],{"class":103},[97,157888,157889],{"class":99,"line":195},[97,157890,2591],{"emptyLinePlaceholder":249},[97,157892,157893,157895,157898,157900,157903],{"class":99,"line":241},[97,157894,1723],{"class":319},[97,157896,157897],{"class":103}," score ",[97,157899,1902],{"class":319},[97,157901,157902],{"class":370}," 90",[97,157904,3930],{"class":103},[97,157906,157907,157909,157911,157914],{"class":99,"line":1387},[97,157908,31489],{"class":370},[97,157910,323],{"class":103},[97,157912,157913],{"class":118},"\"优秀\"",[97,157915,329],{"class":103},[97,157917,157918,157921,157923,157925,157928],{"class":99,"line":1393},[97,157919,157920],{"class":319},"elif",[97,157922,157897],{"class":103},[97,157924,1902],{"class":319},[97,157926,157927],{"class":370}," 80",[97,157929,3930],{"class":103},[97,157931,157932,157934,157936,157939],{"class":99,"line":1407},[97,157933,31489],{"class":370},[97,157935,323],{"class":103},[97,157937,157938],{"class":118},"\"良好\"",[97,157940,329],{"class":103},[97,157942,157943,157945,157947,157949,157952],{"class":99,"line":1413},[97,157944,157920],{"class":319},[97,157946,157897],{"class":103},[97,157948,1902],{"class":319},[97,157950,157951],{"class":370}," 60",[97,157953,3930],{"class":103},[97,157955,157956,157958,157960,157963],{"class":99,"line":1504},[97,157957,31489],{"class":370},[97,157959,323],{"class":103},[97,157961,157962],{"class":118},"\"及格\"",[97,157964,329],{"class":103},[97,157966,157967,157969],{"class":99,"line":1510},[97,157968,1893],{"class":319},[97,157970,3930],{"class":103},[97,157972,157973,157975,157977,157980],{"class":99,"line":1522},[97,157974,31489],{"class":370},[97,157976,323],{"class":103},[97,157978,157979],{"class":118},"\"不及格\"",[97,157981,329],{"class":103},[24,157983,157984],{},"注意判断顺序很重要。",[24,157986,157987,157988,157991],{},"如果把 ",[94,157989,157990],{},"score >= 60"," 放在最前面：",[87,157993,157995],{"className":30568,"code":157994,"language":30570,"meta":92,"style":92},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[94,157996,157997,158009,158019,158031],{"__ignoreMap":92},[97,157998,157999,158001,158003,158005,158007],{"class":99,"line":100},[97,158000,1723],{"class":319},[97,158002,157897],{"class":103},[97,158004,1902],{"class":319},[97,158006,157951],{"class":370},[97,158008,3930],{"class":103},[97,158010,158011,158013,158015,158017],{"class":99,"line":195},[97,158012,31489],{"class":370},[97,158014,323],{"class":103},[97,158016,157962],{"class":118},[97,158018,329],{"class":103},[97,158020,158021,158023,158025,158027,158029],{"class":99,"line":241},[97,158022,157920],{"class":319},[97,158024,157897],{"class":103},[97,158026,1902],{"class":319},[97,158028,157902],{"class":370},[97,158030,3930],{"class":103},[97,158032,158033,158035,158037,158039],{"class":99,"line":1387},[97,158034,31489],{"class":370},[97,158036,323],{"class":103},[97,158038,157913],{"class":118},[97,158040,329],{"class":103},[24,158042,158043,158044,158046],{},"成绩 95 会先满足 ",[94,158045,157990],{},"，后面的优秀分支就不会执行。",[14,158048,158050],{"id":158049},"_35-判断语句嵌套","3.5 判断语句嵌套",[24,158052,158053],{},"嵌套判断就是在一个判断内部再写判断。",[87,158055,158057],{"className":30568,"code":158056,"language":30570,"meta":92,"style":92},"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",[94,158058,158059,158077,158092,158096,158108,158122,158132,158139,158150,158156],{"__ignoreMap":92},[97,158060,158061,158063,158065,158067,158069,158071,158073,158075],{"class":99,"line":100},[97,158062,146660],{"class":103},[97,158064,115],{"class":319},[97,158066,2573],{"class":370},[97,158068,323],{"class":103},[97,158070,54005],{"class":370},[97,158072,323],{"class":103},[97,158074,152508],{"class":118},[97,158076,30687],{"class":103},[97,158078,158079,158081,158083,158085,158087,158090],{"class":99,"line":195},[97,158080,156475],{"class":103},[97,158082,115],{"class":319},[97,158084,60789],{"class":370},[97,158086,323],{"class":103},[97,158088,158089],{"class":118},"\"是否有票(y\u002Fn):\"",[97,158091,329],{"class":103},[97,158093,158094],{"class":99,"line":241},[97,158095,2591],{"emptyLinePlaceholder":249},[97,158097,158098,158100,158102,158104,158106],{"class":99,"line":1387},[97,158099,1723],{"class":319},[97,158101,15897],{"class":103},[97,158103,1902],{"class":319},[97,158105,156399],{"class":370},[97,158107,3930],{"class":103},[97,158109,158110,158112,158115,158117,158120],{"class":99,"line":1393},[97,158111,3292],{"class":319},[97,158113,158114],{"class":103}," has_ticket ",[97,158116,3140],{"class":319},[97,158118,158119],{"class":118}," \"y\"",[97,158121,3930],{"class":103},[97,158123,158124,158126,158128,158130],{"class":99,"line":1407},[97,158125,32641],{"class":370},[97,158127,323],{"class":103},[97,158129,157761],{"class":118},[97,158131,329],{"class":103},[97,158133,158134,158137],{"class":99,"line":1413},[97,158135,158136],{"class":319},"    else",[97,158138,3930],{"class":103},[97,158140,158141,158143,158145,158148],{"class":99,"line":1504},[97,158142,32641],{"class":370},[97,158144,323],{"class":103},[97,158146,158147],{"class":118},"\"请先买票\"",[97,158149,329],{"class":103},[97,158151,158152,158154],{"class":99,"line":1510},[97,158153,1893],{"class":319},[97,158155,3930],{"class":103},[97,158157,158158,158160,158162,158165],{"class":99,"line":1522},[97,158159,31489],{"class":370},[97,158161,323],{"class":103},[97,158163,158164],{"class":118},"\"未成年人禁止进入\"",[97,158166,329],{"class":103},[24,158168,158169],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158171,158173],{"id":158172},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[48,158175,158177],{"id":158176},"_361-and","3.6.1 and",[24,158179,158180],{},"两个条件都成立才成立。",[87,158182,158184],{"className":30568,"code":158183,"language":30570,"meta":92,"style":92},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[94,158185,158186,158194,158202,158206,158221],{"__ignoreMap":92},[97,158187,158188,158190,158192],{"class":99,"line":100},[97,158189,146660],{"class":103},[97,158191,115],{"class":319},[97,158193,88249],{"class":370},[97,158195,158196,158198,158200],{"class":99,"line":195},[97,158197,156475],{"class":103},[97,158199,115],{"class":319},[97,158201,153713],{"class":370},[97,158203,158204],{"class":99,"line":241},[97,158205,2591],{"emptyLinePlaceholder":249},[97,158207,158208,158210,158212,158214,158216,158218],{"class":99,"line":1387},[97,158209,1723],{"class":319},[97,158211,15897],{"class":103},[97,158213,1902],{"class":319},[97,158215,156399],{"class":370},[97,158217,120613],{"class":319},[97,158219,158220],{"class":103}," has_ticket:\n",[97,158222,158223,158225,158227,158229],{"class":99,"line":1393},[97,158224,31489],{"class":370},[97,158226,323],{"class":103},[97,158228,157761],{"class":118},[97,158230,329],{"class":103},[48,158232,158234],{"id":158233},"_362-or","3.6.2 or",[24,158236,158237],{},"只要一个条件成立就成立。",[87,158239,158241],{"className":30568,"code":158240,"language":30570,"meta":92,"style":92},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[94,158242,158243,158252,158261,158265,158277],{"__ignoreMap":92},[97,158244,158245,158248,158250],{"class":99,"line":100},[97,158246,158247],{"class":103},"is_vip ",[97,158249,115],{"class":319},[97,158251,125991],{"class":370},[97,158253,158254,158257,158259],{"class":99,"line":195},[97,158255,158256],{"class":103},"coupon ",[97,158258,115],{"class":319},[97,158260,153713],{"class":370},[97,158262,158263],{"class":99,"line":241},[97,158264,2591],{"emptyLinePlaceholder":249},[97,158266,158267,158269,158272,158274],{"class":99,"line":1387},[97,158268,1723],{"class":319},[97,158270,158271],{"class":103}," is_vip ",[97,158273,115274],{"class":319},[97,158275,158276],{"class":103}," coupon:\n",[97,158278,158279,158281,158283,158286],{"class":99,"line":1393},[97,158280,31489],{"class":370},[97,158282,323],{"class":103},[97,158284,158285],{"class":118},"\"可以享受优惠\"",[97,158287,329],{"class":103},[48,158289,158291],{"id":158290},"_363-not","3.6.3 not",[24,158293,158294],{},"取反。",[87,158296,158298],{"className":30568,"code":158297,"language":30570,"meta":92,"style":92},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[94,158299,158300,158309,158313,158322],{"__ignoreMap":92},[97,158301,158302,158305,158307],{"class":99,"line":100},[97,158303,158304],{"class":103},"is_closed ",[97,158306,115],{"class":319},[97,158308,125991],{"class":370},[97,158310,158311],{"class":99,"line":195},[97,158312,2591],{"emptyLinePlaceholder":249},[97,158314,158315,158317,158319],{"class":99,"line":241},[97,158316,1723],{"class":319},[97,158318,39120],{"class":319},[97,158320,158321],{"class":103}," is_closed:\n",[97,158323,158324,158326,158328,158331],{"class":99,"line":1387},[97,158325,31489],{"class":370},[97,158327,323],{"class":103},[97,158329,158330],{"class":118},"\"店铺营业中\"",[97,158332,329],{"class":103},[14,158334,158336],{"id":158335},"_37-链式比较","3.7 链式比较",[24,158338,158339],{},"Python 支持链式比较：",[87,158341,158343],{"className":30568,"code":158342,"language":30570,"meta":92,"style":92},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[94,158344,158345,158354,158358,158375],{"__ignoreMap":92},[97,158346,158347,158349,158351],{"class":99,"line":100},[97,158348,155472],{"class":103},[97,158350,115],{"class":319},[97,158352,158353],{"class":370}," 85\n",[97,158355,158356],{"class":99,"line":195},[97,158357,2591],{"emptyLinePlaceholder":249},[97,158359,158360,158362,158364,158367,158369,158371,158373],{"class":99,"line":241},[97,158361,1723],{"class":319},[97,158363,4284],{"class":370},[97,158365,158366],{"class":319}," \u003C=",[97,158368,157897],{"class":103},[97,158370,1780],{"class":319},[97,158372,5945],{"class":370},[97,158374,3930],{"class":103},[97,158376,158377,158379,158381,158384],{"class":99,"line":1387},[97,158378,31489],{"class":370},[97,158380,323],{"class":103},[97,158382,158383],{"class":118},"\"成绩合法\"",[97,158385,329],{"class":103},[24,158387,158388],{},"等价于：",[87,158390,158392],{"className":30568,"code":158391,"language":30570,"meta":92,"style":92},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[94,158393,158394,158414],{"__ignoreMap":92},[97,158395,158396,158398,158400,158402,158404,158406,158408,158410,158412],{"class":99,"line":100},[97,158397,1723],{"class":319},[97,158399,157897],{"class":103},[97,158401,1902],{"class":319},[97,158403,4284],{"class":370},[97,158405,120613],{"class":319},[97,158407,157897],{"class":103},[97,158409,1780],{"class":319},[97,158411,5945],{"class":370},[97,158413,3930],{"class":103},[97,158415,158416,158418,158420,158422],{"class":99,"line":195},[97,158417,31489],{"class":370},[97,158419,323],{"class":103},[97,158421,158383],{"class":118},[97,158423,329],{"class":103},[14,158425,158427],{"id":158426},"_38-真值和假值","3.8 真值和假值",[24,158429,116651,158430,158432],{},[94,158431,1723],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[24,158434,158435],{},"假值：",[87,158437,158439],{"className":30568,"code":158438,"language":30570,"meta":92,"style":92},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[94,158440,158441,158445,158450,158454,158458,158463,158467,158471,158476],{"__ignoreMap":92},[97,158442,158443],{"class":99,"line":100},[97,158444,157631],{"class":370},[97,158446,158447],{"class":99,"line":195},[97,158448,158449],{"class":370},"None\n",[97,158451,158452],{"class":99,"line":241},[97,158453,3276],{"class":370},[97,158455,158456],{"class":99,"line":1387},[97,158457,32532],{"class":370},[97,158459,158460],{"class":99,"line":1393},[97,158461,158462],{"class":118},"\"\"\n",[97,158464,158465],{"class":99,"line":1407},[97,158466,32547],{"class":103},[97,158468,158469],{"class":99,"line":1413},[97,158470,2167],{"class":103},[97,158472,158473],{"class":99,"line":1504},[97,158474,158475],{"class":103},"{}\n",[97,158477,158478,158480],{"class":99,"line":1510},[97,158479,155404],{"class":370},[97,158481,2167],{"class":103},[24,158483,15325],{},[87,158485,158487],{"className":30568,"code":158486,"language":30570,"meta":92,"style":92},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[94,158488,158489,158503,158507,158514,158534,158540],{"__ignoreMap":92},[97,158490,158491,158493,158495,158497,158499,158501],{"class":99,"line":100},[97,158492,146650],{"class":103},[97,158494,115],{"class":319},[97,158496,60789],{"class":370},[97,158498,323],{"class":103},[97,158500,152493],{"class":118},[97,158502,329],{"class":103},[97,158504,158505],{"class":99,"line":195},[97,158506,2591],{"emptyLinePlaceholder":249},[97,158508,158509,158511],{"class":99,"line":241},[97,158510,1723],{"class":319},[97,158512,158513],{"class":103}," name:\n",[97,158515,158516,158518,158520,158522,158524,158526,158528,158530,158532],{"class":99,"line":1387},[97,158517,31489],{"class":370},[97,158519,323],{"class":103},[97,158521,374],{"class":319},[97,158523,157168],{"class":118},[97,158525,1216],{"class":370},[97,158527,79994],{"class":103},[97,158529,1265],{"class":370},[97,158531,571],{"class":118},[97,158533,329],{"class":103},[97,158535,158536,158538],{"class":99,"line":1393},[97,158537,1893],{"class":319},[97,158539,3930],{"class":103},[97,158541,158542,158544,158546,158549],{"class":99,"line":1407},[97,158543,31489],{"class":370},[97,158545,323],{"class":103},[97,158547,158548],{"class":118},"\"姓名不能为空\"",[97,158550,329],{"class":103},[14,158552,158554],{"id":158553},"_39-match语句","3.9 match语句",[24,158556,158557,158558,158560],{},"Python 3.10 开始支持 ",[94,158559,71449],{},"。它适合处理固定选项。",[87,158562,158564],{"className":30568,"code":158563,"language":30570,"meta":92,"style":92},"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",[94,158565,158566,158582,158586,158593,158603,158614,158623,158634,158643,158654,158661],{"__ignoreMap":92},[97,158567,158568,158571,158573,158575,158577,158580],{"class":99,"line":100},[97,158569,158570],{"class":103},"command ",[97,158572,115],{"class":319},[97,158574,60789],{"class":370},[97,158576,323],{"class":103},[97,158578,158579],{"class":118},"\"请输入命令:\"",[97,158581,329],{"class":103},[97,158583,158584],{"class":99,"line":195},[97,158585,2591],{"emptyLinePlaceholder":249},[97,158587,158588,158590],{"class":99,"line":241},[97,158589,71449],{"class":319},[97,158591,158592],{"class":103}," command:\n",[97,158594,158595,158598,158601],{"class":99,"line":1387},[97,158596,158597],{"class":319},"    case",[97,158599,158600],{"class":118}," \"start\"",[97,158602,3930],{"class":103},[97,158604,158605,158607,158609,158612],{"class":99,"line":1393},[97,158606,32641],{"class":370},[97,158608,323],{"class":103},[97,158610,158611],{"class":118},"\"启动\"",[97,158613,329],{"class":103},[97,158615,158616,158618,158621],{"class":99,"line":1407},[97,158617,158597],{"class":319},[97,158619,158620],{"class":118}," \"stop\"",[97,158622,3930],{"class":103},[97,158624,158625,158627,158629,158632],{"class":99,"line":1413},[97,158626,32641],{"class":370},[97,158628,323],{"class":103},[97,158630,158631],{"class":118},"\"停止\"",[97,158633,329],{"class":103},[97,158635,158636,158638,158641],{"class":99,"line":1504},[97,158637,158597],{"class":319},[97,158639,158640],{"class":118}," \"restart\"",[97,158642,3930],{"class":103},[97,158644,158645,158647,158649,158652],{"class":99,"line":1510},[97,158646,32641],{"class":370},[97,158648,323],{"class":103},[97,158650,158651],{"class":118},"\"重启\"",[97,158653,329],{"class":103},[97,158655,158656,158658],{"class":99,"line":1522},[97,158657,158597],{"class":319},[97,158659,158660],{"class":103}," _:\n",[97,158662,158663,158665,158667,158670],{"class":99,"line":1804},[97,158664,32641],{"class":370},[97,158666,323],{"class":103},[97,158668,158669],{"class":118},"\"未知命令\"",[97,158671,329],{"class":103},[24,158673,158674,158675,158677,158678,158680],{},"入门阶段掌握 ",[94,158676,154772],{}," 更重要，",[94,158679,71449],{}," 可以作为补充。",[14,158682,158684],{"id":158683},"_310-小案例成绩等级","3.10 小案例：成绩等级",[24,158686,123476],{},[138,158688,158689,158692,158695],{},[70,158690,158691],{},"输入成绩。",[70,158693,158694],{},"判断成绩是否合法。",[70,158696,158697],{},"输出等级。",[24,158699,10226],{},[87,158701,158703],{"className":30568,"code":158702,"language":30570,"meta":92,"style":92},"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",[94,158704,158705,158723,158727,158745,158756,158768,158779,158791,158802,158815,158826,158838,158849,158855],{"__ignoreMap":92},[97,158706,158707,158709,158711,158713,158715,158717,158719,158721],{"class":99,"line":100},[97,158708,155472],{"class":103},[97,158710,115],{"class":319},[97,158712,109981],{"class":370},[97,158714,323],{"class":103},[97,158716,54005],{"class":370},[97,158718,323],{"class":103},[97,158720,152523],{"class":118},[97,158722,30687],{"class":103},[97,158724,158725],{"class":99,"line":195},[97,158726,2591],{"emptyLinePlaceholder":249},[97,158728,158729,158731,158733,158735,158737,158739,158741,158743],{"class":99,"line":241},[97,158730,1723],{"class":319},[97,158732,39120],{"class":319},[97,158734,4284],{"class":370},[97,158736,158366],{"class":319},[97,158738,157897],{"class":103},[97,158740,1780],{"class":319},[97,158742,5945],{"class":370},[97,158744,3930],{"class":103},[97,158746,158747,158749,158751,158754],{"class":99,"line":1387},[97,158748,31489],{"class":370},[97,158750,323],{"class":103},[97,158752,158753],{"class":118},"\"成绩不合法\"",[97,158755,329],{"class":103},[97,158757,158758,158760,158762,158764,158766],{"class":99,"line":1393},[97,158759,157920],{"class":319},[97,158761,157897],{"class":103},[97,158763,1902],{"class":319},[97,158765,157902],{"class":370},[97,158767,3930],{"class":103},[97,158769,158770,158772,158774,158777],{"class":99,"line":1407},[97,158771,31489],{"class":370},[97,158773,323],{"class":103},[97,158775,158776],{"class":118},"\"等级:A\"",[97,158778,329],{"class":103},[97,158780,158781,158783,158785,158787,158789],{"class":99,"line":1413},[97,158782,157920],{"class":319},[97,158784,157897],{"class":103},[97,158786,1902],{"class":319},[97,158788,157927],{"class":370},[97,158790,3930],{"class":103},[97,158792,158793,158795,158797,158800],{"class":99,"line":1504},[97,158794,31489],{"class":370},[97,158796,323],{"class":103},[97,158798,158799],{"class":118},"\"等级:B\"",[97,158801,329],{"class":103},[97,158803,158804,158806,158808,158810,158813],{"class":99,"line":1510},[97,158805,157920],{"class":319},[97,158807,157897],{"class":103},[97,158809,1902],{"class":319},[97,158811,158812],{"class":370}," 70",[97,158814,3930],{"class":103},[97,158816,158817,158819,158821,158824],{"class":99,"line":1522},[97,158818,31489],{"class":370},[97,158820,323],{"class":103},[97,158822,158823],{"class":118},"\"等级:C\"",[97,158825,329],{"class":103},[97,158827,158828,158830,158832,158834,158836],{"class":99,"line":1804},[97,158829,157920],{"class":319},[97,158831,157897],{"class":103},[97,158833,1902],{"class":319},[97,158835,157951],{"class":370},[97,158837,3930],{"class":103},[97,158839,158840,158842,158844,158847],{"class":99,"line":1809},[97,158841,31489],{"class":370},[97,158843,323],{"class":103},[97,158845,158846],{"class":118},"\"等级:D\"",[97,158848,329],{"class":103},[97,158850,158851,158853],{"class":99,"line":1815},[97,158852,1893],{"class":319},[97,158854,3930],{"class":103},[97,158856,158857,158859,158861,158864],{"class":99,"line":1820},[97,158858,31489],{"class":370},[97,158860,323],{"class":103},[97,158862,158863],{"class":118},"\"等级:E\"",[97,158865,329],{"class":103},[14,158867,158869],{"id":158868},"_311-小案例会员折扣","3.11 小案例：会员折扣",[24,158871,123476],{},[138,158873,158874,158877,158880,158883],{},[70,158875,158876],{},"输入消费金额。",[70,158878,158879],{},"输入会员等级，普通、银卡、金卡。",[70,158881,158882],{},"普通不打折，银卡 9 折，金卡 8 折。",[70,158884,158885],{},"满 500 再减 50。",[24,158887,10226],{},[87,158889,158891],{"className":30568,"code":158890,"language":30570,"meta":92,"style":92},"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",[94,158892,158893,158913,158929,158933,158941,158945,158959,158969,158982,158991,159004,159012,159018,159029,159033,159047,159051,159065,159075,159079],{"__ignoreMap":92},[97,158894,158895,158898,158900,158902,158904,158906,158908,158911],{"class":99,"line":100},[97,158896,158897],{"class":103},"amount ",[97,158899,115],{"class":319},[97,158901,109981],{"class":370},[97,158903,323],{"class":103},[97,158905,54005],{"class":370},[97,158907,323],{"class":103},[97,158909,158910],{"class":118},"\"请输入消费金额:\"",[97,158912,30687],{"class":103},[97,158914,158915,158918,158920,158922,158924,158927],{"class":99,"line":195},[97,158916,158917],{"class":103},"level ",[97,158919,115],{"class":319},[97,158921,60789],{"class":370},[97,158923,323],{"class":103},[97,158925,158926],{"class":118},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[97,158928,329],{"class":103},[97,158930,158931],{"class":99,"line":241},[97,158932,2591],{"emptyLinePlaceholder":249},[97,158934,158935,158937,158939],{"class":99,"line":1387},[97,158936,157350],{"class":103},[97,158938,115],{"class":319},[97,158940,55883],{"class":370},[97,158942,158943],{"class":99,"line":1393},[97,158944,2591],{"emptyLinePlaceholder":249},[97,158946,158947,158949,158952,158954,158957],{"class":99,"line":1407},[97,158948,1723],{"class":319},[97,158950,158951],{"class":103}," level ",[97,158953,3140],{"class":319},[97,158955,158956],{"class":118}," \"银卡\"",[97,158958,3930],{"class":103},[97,158960,158961,158964,158966],{"class":99,"line":1413},[97,158962,158963],{"class":103},"    discount ",[97,158965,115],{"class":319},[97,158967,158968],{"class":370}," 0.9\n",[97,158970,158971,158973,158975,158977,158980],{"class":99,"line":1504},[97,158972,157920],{"class":319},[97,158974,158951],{"class":103},[97,158976,3140],{"class":319},[97,158978,158979],{"class":118}," \"金卡\"",[97,158981,3930],{"class":103},[97,158983,158984,158986,158988],{"class":99,"line":1510},[97,158985,158963],{"class":103},[97,158987,115],{"class":319},[97,158989,158990],{"class":370}," 0.8\n",[97,158992,158993,158995,158997,158999,159002],{"class":99,"line":1522},[97,158994,157920],{"class":319},[97,158996,158951],{"class":103},[97,158998,3140],{"class":319},[97,159000,159001],{"class":118}," \"普通\"",[97,159003,3930],{"class":103},[97,159005,159006,159008,159010],{"class":99,"line":1804},[97,159007,158963],{"class":103},[97,159009,115],{"class":319},[97,159011,55883],{"class":370},[97,159013,159014,159016],{"class":99,"line":1809},[97,159015,1893],{"class":319},[97,159017,3930],{"class":103},[97,159019,159020,159022,159024,159027],{"class":99,"line":1815},[97,159021,31489],{"class":370},[97,159023,323],{"class":103},[97,159025,159026],{"class":118},"\"会员等级输入错误，按普通会员计算\"",[97,159028,329],{"class":103},[97,159030,159031],{"class":99,"line":1820},[97,159032,2591],{"emptyLinePlaceholder":249},[97,159034,159035,159038,159040,159043,159045],{"class":99,"line":1834},[97,159036,159037],{"class":103},"pay ",[97,159039,115],{"class":319},[97,159041,159042],{"class":103}," amount ",[97,159044,775],{"class":319},[97,159046,157389],{"class":103},[97,159048,159049],{"class":99,"line":1839},[97,159050,2591],{"emptyLinePlaceholder":249},[97,159052,159053,159055,159058,159060,159063],{"class":99,"line":1845},[97,159054,1723],{"class":319},[97,159056,159057],{"class":103}," pay ",[97,159059,1902],{"class":319},[97,159061,159062],{"class":370}," 500",[97,159064,3930],{"class":103},[97,159066,159067,159070,159072],{"class":99,"line":1866},[97,159068,159069],{"class":103},"    pay ",[97,159071,150366],{"class":319},[97,159073,159074],{"class":370}," 50\n",[97,159076,159077],{"class":99,"line":1871},[97,159078,2591],{"emptyLinePlaceholder":249},[97,159080,159081,159083,159085,159087,159089,159091,159094,159096,159098,159100],{"class":99,"line":1885},[97,159082,30605],{"class":370},[97,159084,323],{"class":103},[97,159086,374],{"class":319},[97,159088,157470],{"class":118},[97,159090,1216],{"class":370},[97,159092,159093],{"class":103},"pay",[97,159095,157273],{"class":319},[97,159097,1265],{"class":370},[97,159099,157126],{"class":118},[97,159101,329],{"class":103},[14,159103,159105],{"id":159104},"_312-易错点","3.12 易错点",[138,159107,159108,159111,159114,159117,159122],{},[70,159109,159110],{},"冒号不能漏。",[70,159112,159113],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[70,159115,159116],{},"多分支判断要注意顺序。",[70,159118,159119,159120,28575],{},"判断相等用 ",[94,159121,3140],{},[70,159123,159124],{},"字符串比较区分大小写：",[87,159126,159128],{"className":30568,"code":159127,"language":30570,"meta":92,"style":92},"\"Y\" == \"y\"  # False\n",[94,159129,159130],{"__ignoreMap":92},[97,159131,159132,159135,159137,159139],{"class":99,"line":100},[97,159133,159134],{"class":118},"\"Y\"",[97,159136,101743],{"class":319},[97,159138,158119],{"class":118},[97,159140,159141],{"class":191},"  # False\n",[24,159143,159144],{},"可转换后再判断：",[87,159146,159148],{"className":30568,"code":159147,"language":30570,"meta":92,"style":92},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[94,159149,159150,159167,159180],{"__ignoreMap":92},[97,159151,159152,159155,159157,159159,159161,159164],{"class":99,"line":100},[97,159153,159154],{"class":103},"answer ",[97,159156,115],{"class":319},[97,159158,60789],{"class":370},[97,159160,323],{"class":103},[97,159162,159163],{"class":118},"\"是否继续(y\u002Fn):\"",[97,159165,159166],{"class":103},").lower()\n",[97,159168,159169,159171,159174,159176,159178],{"class":99,"line":195},[97,159170,1723],{"class":319},[97,159172,159173],{"class":103}," answer ",[97,159175,3140],{"class":319},[97,159177,158119],{"class":118},[97,159179,3930],{"class":103},[97,159181,159182,159184,159186,159189],{"class":99,"line":241},[97,159183,31489],{"class":370},[97,159185,323],{"class":103},[97,159187,159188],{"class":118},"\"继续\"",[97,159190,329],{"class":103},[14,159192,159194],{"id":159193},"_313-本章练习","3.13 本章练习",[138,159196,159197,159200,159203,159206,159216],{},[70,159198,159199],{},"输入年龄，判断是否成年。",[70,159201,159202],{},"输入年份，判断是否为闰年。",[70,159204,159205],{},"输入三个数字，输出最大值。",[70,159207,159208,159209,159212,159213,159215],{},"写登录判断：用户名是 ",[94,159210,159211],{},"admin"," 且密码是 ",[94,159214,15274],{}," 才登录成功。",[70,159217,159218],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[231,159220,159221],{},"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":92,"searchDepth":195,"depth":195,"links":159223},[159224,159225,159226,159227,159228,159229,159234,159235,159236,159237,159238,159239,159240],{"id":157612,"depth":195,"text":157613},{"id":157665,"depth":195,"text":157666},{"id":157769,"depth":195,"text":157770},{"id":157859,"depth":195,"text":157860},{"id":158049,"depth":195,"text":158050},{"id":158172,"depth":195,"text":158173,"children":159230},[159231,159232,159233],{"id":158176,"depth":241,"text":158177},{"id":158233,"depth":241,"text":158234},{"id":158290,"depth":241,"text":158291},{"id":158335,"depth":195,"text":158336},{"id":158426,"depth":195,"text":158427},{"id":158553,"depth":195,"text":158554},{"id":158683,"depth":195,"text":158684},{"id":158868,"depth":195,"text":158869},{"id":159104,"depth":195,"text":159105},{"id":159193,"depth":195,"text":159194},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157604,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159247,"title":159248,"body":159249,"description":246,"extension":247,"meta":161018,"navigation":249,"path":161019,"seo":161020,"stem":161021,"__hash__":161022},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159250,"toc":160998},[159251,159254,159258,159264,159267,159284,159288,159290,159307,159309,159354,159356,159373,159377,159380,159446,159449,159467,159471,159632,159641,159645,159649,159654,159701,159703,159709,159713,159718,159765,159767,159773,159777,159782,159818,159821,159868,159872,159878,159936,159941,159972,159977,159981,160036,160039,160111,160114,160173,160177,160180,160255,160258,160262,160368,160371,160397,160401,160413,160482,160485,160577,160581,160583,160594,160596,160726,160730,160932,160940,160944,160974,160978,160995],[10,159252,159248],{"id":159253},"_4-循环语句",[14,159255,159257],{"id":159256},"_41-为什么需要循环","4.1 为什么需要循环",[24,159259,159260,159261,159263],{},"如果要输出 1 到 100，不应该写 100 行 ",[94,159262,146586],{},"，而应该用循环。",[24,159265,159266],{},"循环适合处理重复任务：",[138,159268,159269,159272,159275,159278,159281],{},[70,159270,159271],{},"重复输出。",[70,159273,159274],{},"重复输入。",[70,159276,159277],{},"遍历数据。",[70,159279,159280],{},"持续执行菜单。",[70,159282,159283],{},"批量处理文件或数据。",[14,159285,159287],{"id":159286},"_42-while循环","4.2 while循环",[24,159289,5372],{},[87,159291,159293],{"className":30568,"code":159292,"language":30570,"meta":92,"style":92},"while 条件:\n    循环体\n",[94,159294,159295,159302],{"__ignoreMap":92},[97,159296,159297,159299],{"class":99,"line":100},[97,159298,108847],{"class":319},[97,159300,159301],{"class":103}," 条件:\n",[97,159303,159304],{"class":99,"line":195},[97,159305,159306],{"class":103},"    循环体\n",[24,159308,15325],{},[87,159310,159312],{"className":30568,"code":159311,"language":30570,"meta":92,"style":92},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[94,159313,159314,159322,159326,159338,159345],{"__ignoreMap":92},[97,159315,159316,159318,159320],{"class":99,"line":100},[97,159317,100332],{"class":103},[97,159319,115],{"class":319},[97,159321,55883],{"class":370},[97,159323,159324],{"class":99,"line":195},[97,159325,2591],{"emptyLinePlaceholder":249},[97,159327,159328,159330,159332,159334,159336],{"class":99,"line":241},[97,159329,108847],{"class":319},[97,159331,9629],{"class":103},[97,159333,1780],{"class":319},[97,159335,2339],{"class":370},[97,159337,3930],{"class":103},[97,159339,159340,159342],{"class":99,"line":1387},[97,159341,31489],{"class":370},[97,159343,159344],{"class":103},"(i)\n",[97,159346,159347,159350,159352],{"class":99,"line":1393},[97,159348,159349],{"class":103},"    i ",[97,159351,9668],{"class":319},[97,159353,55883],{"class":370},[24,159355,81113],{},[138,159357,159358,159364,159367,159370],{},[70,159359,159360,159361,28575],{},"判断条件 ",[94,159362,159363],{},"i \u003C= 5",[70,159365,159366],{},"条件成立，执行循环体。",[70,159368,159369],{},"执行完后回到条件判断。",[70,159371,159372],{},"条件不成立，退出循环。",[14,159374,159376],{"id":159375},"_43-while累加","4.3 while累加",[24,159378,159379],{},"计算 1 到 100 的和：",[87,159381,159383],{"className":30568,"code":159382,"language":30570,"meta":92,"style":92},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[94,159384,159385,159393,159401,159405,159417,159427,159435,159439],{"__ignoreMap":92},[97,159386,159387,159389,159391],{"class":99,"line":100},[97,159388,100332],{"class":103},[97,159390,115],{"class":319},[97,159392,55883],{"class":370},[97,159394,159395,159397,159399],{"class":99,"line":195},[97,159396,157374],{"class":103},[97,159398,115],{"class":319},[97,159400,47523],{"class":370},[97,159402,159403],{"class":99,"line":241},[97,159404,2591],{"emptyLinePlaceholder":249},[97,159406,159407,159409,159411,159413,159415],{"class":99,"line":1387},[97,159408,108847],{"class":319},[97,159410,9629],{"class":103},[97,159412,1780],{"class":319},[97,159414,5945],{"class":370},[97,159416,3930],{"class":103},[97,159418,159419,159422,159424],{"class":99,"line":1393},[97,159420,159421],{"class":103},"    total ",[97,159423,9668],{"class":319},[97,159425,159426],{"class":103}," i\n",[97,159428,159429,159431,159433],{"class":99,"line":1407},[97,159430,159349],{"class":103},[97,159432,9668],{"class":319},[97,159434,55883],{"class":370},[97,159436,159437],{"class":99,"line":1413},[97,159438,2591],{"emptyLinePlaceholder":249},[97,159440,159441,159443],{"class":99,"line":1504},[97,159442,30605],{"class":370},[97,159444,159445],{"class":103},"(total)\n",[24,159447,159448],{},"核心思想：",[138,159450,159451,159456,159461],{},[70,159452,159453,159455],{},[94,159454,761],{}," 控制循环次数。",[70,159457,159458,159460],{},[94,159459,157475],{}," 保存累加结果。",[70,159462,159463,159464,159466],{},"每轮循环都要更新 ",[94,159465,761],{},"，否则可能死循环。",[14,159468,159470],{"id":159469},"_44-while猜数字","4.4 while猜数字",[87,159472,159474],{"className":30568,"code":159473,"language":30570,"meta":92,"style":92},"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",[94,159475,159476,159482,159486,159503,159511,159515,159523,159543,159552,159556,159568,159579,159589,159600,159606,159628],{"__ignoreMap":92},[97,159477,159478,159480],{"class":99,"line":100},[97,159479,30582],{"class":319},[97,159481,45518],{"class":103},[97,159483,159484],{"class":99,"line":195},[97,159485,2591],{"emptyLinePlaceholder":249},[97,159487,159488,159490,159492,159495,159497,159499,159501],{"class":99,"line":241},[97,159489,159154],{"class":103},[97,159491,115],{"class":319},[97,159493,159494],{"class":103}," random.randint(",[97,159496,537],{"class":370},[97,159498,12626],{"class":103},[97,159500,631],{"class":370},[97,159502,329],{"class":103},[97,159504,159505,159507,159509],{"class":99,"line":1387},[97,159506,146805],{"class":103},[97,159508,115],{"class":319},[97,159510,47523],{"class":370},[97,159512,159513],{"class":99,"line":1393},[97,159514,2591],{"emptyLinePlaceholder":249},[97,159516,159517,159519,159521],{"class":99,"line":1407},[97,159518,108847],{"class":319},[97,159520,95476],{"class":370},[97,159522,3930],{"class":103},[97,159524,159525,159528,159530,159532,159534,159536,159538,159541],{"class":99,"line":1413},[97,159526,159527],{"class":103},"    guess ",[97,159529,115],{"class":319},[97,159531,2573],{"class":370},[97,159533,323],{"class":103},[97,159535,54005],{"class":370},[97,159537,323],{"class":103},[97,159539,159540],{"class":118},"\"请输入1到100之间的数字:\"",[97,159542,30687],{"class":103},[97,159544,159545,159548,159550],{"class":99,"line":1504},[97,159546,159547],{"class":103},"    count ",[97,159549,9668],{"class":319},[97,159551,55883],{"class":370},[97,159553,159554],{"class":99,"line":1510},[97,159555,2591],{"emptyLinePlaceholder":249},[97,159557,159558,159560,159563,159565],{"class":99,"line":1522},[97,159559,3292],{"class":319},[97,159561,159562],{"class":103}," guess ",[97,159564,1279],{"class":319},[97,159566,159567],{"class":103}," answer:\n",[97,159569,159570,159572,159574,159577],{"class":99,"line":1804},[97,159571,32641],{"class":370},[97,159573,323],{"class":103},[97,159575,159576],{"class":118},"\"猜大了\"",[97,159578,329],{"class":103},[97,159580,159581,159583,159585,159587],{"class":99,"line":1809},[97,159582,39483],{"class":319},[97,159584,159562],{"class":103},[97,159586,104],{"class":319},[97,159588,159567],{"class":103},[97,159590,159591,159593,159595,159598],{"class":99,"line":1815},[97,159592,32641],{"class":370},[97,159594,323],{"class":103},[97,159596,159597],{"class":118},"\"猜小了\"",[97,159599,329],{"class":103},[97,159601,159602,159604],{"class":99,"line":1820},[97,159603,158136],{"class":319},[97,159605,3930],{"class":103},[97,159607,159608,159610,159612,159614,159617,159619,159621,159623,159626],{"class":99,"line":1834},[97,159609,32641],{"class":370},[97,159611,323],{"class":103},[97,159613,374],{"class":319},[97,159615,159616],{"class":118},"\"猜对了，一共猜了",[97,159618,1216],{"class":370},[97,159620,84618],{"class":103},[97,159622,1265],{"class":370},[97,159624,159625],{"class":118},"次\"",[97,159627,329],{"class":103},[97,159629,159630],{"class":99,"line":1839},[97,159631,31817],{"class":319},[24,159633,159634,159637,159638,159640],{},[94,159635,159636],{},"while True"," 表示无限循环，通常配合 ",[94,159639,2244],{}," 使用。",[14,159642,159644],{"id":159643},"_45-break和continue","4.5 break和continue",[48,159646,159648],{"id":159647},"_451-break","4.5.1 break",[24,159650,159651,159653],{},[94,159652,2244],{}," 直接结束整个循环。",[87,159655,159657],{"className":30568,"code":159656,"language":30570,"meta":92,"style":92},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[94,159658,159659,159679,159691,159695],{"__ignoreMap":92},[97,159660,159661,159663,159665,159667,159669,159671,159673,159675,159677],{"class":99,"line":100},[97,159662,3216],{"class":319},[97,159664,9629],{"class":103},[97,159666,26233],{"class":319},[97,159668,32633],{"class":370},[97,159670,323],{"class":103},[97,159672,537],{"class":370},[97,159674,12626],{"class":103},[97,159676,664],{"class":370},[97,159678,30976],{"class":103},[97,159680,159681,159683,159685,159687,159689],{"class":99,"line":195},[97,159682,3292],{"class":319},[97,159684,9629],{"class":103},[97,159686,3140],{"class":319},[97,159688,78254],{"class":370},[97,159690,3930],{"class":103},[97,159692,159693],{"class":99,"line":241},[97,159694,31817],{"class":319},[97,159696,159697,159699],{"class":99,"line":1387},[97,159698,31489],{"class":370},[97,159700,159344],{"class":103},[24,159702,146571],{},[87,159704,159707],{"className":159705,"code":159706,"language":5378,"meta":92},[5376],"1\n2\n",[94,159708,159706],{"__ignoreMap":92},[48,159710,159712],{"id":159711},"_452-continue","4.5.2 continue",[24,159714,159715,159717],{},[94,159716,154786],{}," 跳过本轮剩余代码，进入下一轮循环。",[87,159719,159721],{"className":30568,"code":159720,"language":30570,"meta":92,"style":92},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[94,159722,159723,159743,159755,159759],{"__ignoreMap":92},[97,159724,159725,159727,159729,159731,159733,159735,159737,159739,159741],{"class":99,"line":100},[97,159726,3216],{"class":319},[97,159728,9629],{"class":103},[97,159730,26233],{"class":319},[97,159732,32633],{"class":370},[97,159734,323],{"class":103},[97,159736,537],{"class":370},[97,159738,12626],{"class":103},[97,159740,664],{"class":370},[97,159742,30976],{"class":103},[97,159744,159745,159747,159749,159751,159753],{"class":99,"line":195},[97,159746,3292],{"class":319},[97,159748,9629],{"class":103},[97,159750,3140],{"class":319},[97,159752,78254],{"class":370},[97,159754,3930],{"class":103},[97,159756,159757],{"class":99,"line":241},[97,159758,148626],{"class":319},[97,159760,159761,159763],{"class":99,"line":1387},[97,159762,31489],{"class":370},[97,159764,159344],{"class":103},[24,159766,146571],{},[87,159768,159771],{"className":159769,"code":159770,"language":5378,"meta":92},[5376],"1\n2\n4\n5\n",[94,159772,159770],{"__ignoreMap":92},[14,159774,159776],{"id":159775},"_46-for循环","4.6 for循环",[24,159778,159779,159781],{},[94,159780,3216],{}," 常用于遍历序列。",[87,159783,159785],{"className":30568,"code":159784,"language":30570,"meta":92,"style":92},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[94,159786,159787,159796,159800,159811],{"__ignoreMap":92},[97,159788,159789,159791,159793],{"class":99,"line":100},[97,159790,146650],{"class":103},[97,159792,115],{"class":319},[97,159794,159795],{"class":118}," \"python\"\n",[97,159797,159798],{"class":99,"line":195},[97,159799,2591],{"emptyLinePlaceholder":249},[97,159801,159802,159804,159807,159809],{"class":99,"line":241},[97,159803,3216],{"class":319},[97,159805,159806],{"class":103}," ch ",[97,159808,26233],{"class":319},[97,159810,158513],{"class":103},[97,159812,159813,159815],{"class":99,"line":1387},[97,159814,31489],{"class":370},[97,159816,159817],{"class":103},"(ch)\n",[24,159819,159820],{},"遍历列表：",[87,159822,159824],{"className":30568,"code":159823,"language":30570,"meta":92,"style":92},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[94,159825,159826,159848,159852,159862],{"__ignoreMap":92},[97,159827,159828,159831,159833,159835,159837,159839,159841,159843,159846],{"class":99,"line":100},[97,159829,159830],{"class":103},"students ",[97,159832,115],{"class":319},[97,159834,52410],{"class":103},[97,159836,150002],{"class":118},[97,159838,12626],{"class":103},[97,159840,151050],{"class":118},[97,159842,12626],{"class":103},[97,159844,159845],{"class":118},"\"小刚\"",[97,159847,33436],{"class":103},[97,159849,159850],{"class":99,"line":195},[97,159851,2591],{"emptyLinePlaceholder":249},[97,159853,159854,159856,159858,159860],{"class":99,"line":241},[97,159855,3216],{"class":319},[97,159857,152251],{"class":103},[97,159859,26233],{"class":319},[97,159861,152256],{"class":103},[97,159863,159864,159866],{"class":99,"line":1387},[97,159865,31489],{"class":370},[97,159867,150156],{"class":103},[14,159869,159871],{"id":159870},"_47-range函数","4.7 range函数",[24,159873,159874,159877],{},[94,159875,159876],{},"range()"," 用于生成整数序列。",[87,159879,159881],{"className":30568,"code":159880,"language":30570,"meta":92,"style":92},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[94,159882,159883,159897,159915],{"__ignoreMap":92},[97,159884,159885,159887,159889,159891,159894],{"class":99,"line":100},[97,159886,33606],{"class":370},[97,159888,323],{"class":103},[97,159890,639],{"class":370},[97,159892,159893],{"class":103},")          ",[97,159895,159896],{"class":191},"# 0,1,2,3,4\n",[97,159898,159899,159901,159903,159905,159907,159909,159912],{"class":99,"line":195},[97,159900,33606],{"class":370},[97,159902,323],{"class":103},[97,159904,537],{"class":370},[97,159906,12626],{"class":103},[97,159908,639],{"class":370},[97,159910,159911],{"class":103},")       ",[97,159913,159914],{"class":191},"# 1,2,3,4\n",[97,159916,159917,159919,159921,159923,159925,159927,159929,159931,159933],{"class":99,"line":241},[97,159918,33606],{"class":370},[97,159920,323],{"class":103},[97,159922,537],{"class":370},[97,159924,12626],{"class":103},[97,159926,766],{"class":370},[97,159928,12626],{"class":103},[97,159930,398],{"class":370},[97,159932,155775],{"class":103},[97,159934,159935],{"class":191},"# 1,3,5,7,9\n",[24,159937,159938,159939,24808],{},"配合 ",[94,159940,3216],{},[87,159942,159944],{"className":30568,"code":159943,"language":30570,"meta":92,"style":92},"for i in range(1, 6):\n    print(i)\n",[94,159945,159946,159966],{"__ignoreMap":92},[97,159947,159948,159950,159952,159954,159956,159958,159960,159962,159964],{"class":99,"line":100},[97,159949,3216],{"class":319},[97,159951,9629],{"class":103},[97,159953,26233],{"class":319},[97,159955,32633],{"class":370},[97,159957,323],{"class":103},[97,159959,537],{"class":370},[97,159961,12626],{"class":103},[97,159963,664],{"class":370},[97,159965,30976],{"class":103},[97,159967,159968,159970],{"class":99,"line":195},[97,159969,31489],{"class":370},[97,159971,159344],{"class":103},[24,159973,9216,159974,159976],{},[94,159975,33606],{}," 的结束值不包含在内。",[14,159978,159980],{"id":159979},"_48-for循环求和","4.8 for循环求和",[87,159982,159984],{"className":30568,"code":159983,"language":30570,"meta":92,"style":92},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[94,159985,159986,159994,159998,160018,160026,160030],{"__ignoreMap":92},[97,159987,159988,159990,159992],{"class":99,"line":100},[97,159989,157374],{"class":103},[97,159991,115],{"class":319},[97,159993,47523],{"class":370},[97,159995,159996],{"class":99,"line":195},[97,159997,2591],{"emptyLinePlaceholder":249},[97,159999,160000,160002,160004,160006,160008,160010,160012,160014,160016],{"class":99,"line":241},[97,160001,3216],{"class":319},[97,160003,9629],{"class":103},[97,160005,26233],{"class":319},[97,160007,32633],{"class":370},[97,160009,323],{"class":103},[97,160011,537],{"class":370},[97,160013,12626],{"class":103},[97,160015,657],{"class":370},[97,160017,30976],{"class":103},[97,160019,160020,160022,160024],{"class":99,"line":1387},[97,160021,159421],{"class":103},[97,160023,9668],{"class":319},[97,160025,159426],{"class":103},[97,160027,160028],{"class":99,"line":1393},[97,160029,2591],{"emptyLinePlaceholder":249},[97,160031,160032,160034],{"class":99,"line":1407},[97,160033,30605],{"class":370},[97,160035,159445],{"class":103},[24,160037,160038],{},"求偶数和：",[87,160040,160042],{"className":30568,"code":160041,"language":30570,"meta":92,"style":92},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[94,160043,160044,160052,160056,160076,160092,160101,160105],{"__ignoreMap":92},[97,160045,160046,160048,160050],{"class":99,"line":100},[97,160047,157374],{"class":103},[97,160049,115],{"class":319},[97,160051,47523],{"class":370},[97,160053,160054],{"class":99,"line":195},[97,160055,2591],{"emptyLinePlaceholder":249},[97,160057,160058,160060,160062,160064,160066,160068,160070,160072,160074],{"class":99,"line":241},[97,160059,3216],{"class":319},[97,160061,9629],{"class":103},[97,160063,26233],{"class":319},[97,160065,32633],{"class":370},[97,160067,323],{"class":103},[97,160069,537],{"class":370},[97,160071,12626],{"class":103},[97,160073,657],{"class":370},[97,160075,30976],{"class":103},[97,160077,160078,160080,160082,160084,160086,160088,160090],{"class":99,"line":1387},[97,160079,3292],{"class":319},[97,160081,9629],{"class":103},[97,160083,648],{"class":319},[97,160085,14946],{"class":370},[97,160087,101743],{"class":319},[97,160089,4284],{"class":370},[97,160091,3930],{"class":103},[97,160093,160094,160097,160099],{"class":99,"line":1393},[97,160095,160096],{"class":103},"        total ",[97,160098,9668],{"class":319},[97,160100,159426],{"class":103},[97,160102,160103],{"class":99,"line":1407},[97,160104,2591],{"emptyLinePlaceholder":249},[97,160106,160107,160109],{"class":99,"line":1413},[97,160108,30605],{"class":370},[97,160110,159445],{"class":103},[24,160112,160113],{},"也可以：",[87,160115,160117],{"className":30568,"code":160116,"language":30570,"meta":92,"style":92},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[94,160118,160119,160127,160131,160155,160163,160167],{"__ignoreMap":92},[97,160120,160121,160123,160125],{"class":99,"line":100},[97,160122,157374],{"class":103},[97,160124,115],{"class":319},[97,160126,47523],{"class":370},[97,160128,160129],{"class":99,"line":195},[97,160130,2591],{"emptyLinePlaceholder":249},[97,160132,160133,160135,160137,160139,160141,160143,160145,160147,160149,160151,160153],{"class":99,"line":241},[97,160134,3216],{"class":319},[97,160136,9629],{"class":103},[97,160138,26233],{"class":319},[97,160140,32633],{"class":370},[97,160142,323],{"class":103},[97,160144,398],{"class":370},[97,160146,12626],{"class":103},[97,160148,657],{"class":370},[97,160150,12626],{"class":103},[97,160152,398],{"class":370},[97,160154,30976],{"class":103},[97,160156,160157,160159,160161],{"class":99,"line":1387},[97,160158,159421],{"class":103},[97,160160,9668],{"class":319},[97,160162,159426],{"class":103},[97,160164,160165],{"class":99,"line":1393},[97,160166,2591],{"emptyLinePlaceholder":249},[97,160168,160169,160171],{"class":99,"line":1407},[97,160170,30605],{"class":370},[97,160172,159445],{"class":103},[14,160174,160176],{"id":160175},"_49-循环嵌套","4.9 循环嵌套",[24,160178,160179],{},"嵌套循环就是循环里面再写循环。",[87,160181,160183],{"className":30568,"code":160182,"language":30570,"meta":92,"style":92},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[94,160184,160185,160205,160225],{"__ignoreMap":92},[97,160186,160187,160189,160191,160193,160195,160197,160199,160201,160203],{"class":99,"line":100},[97,160188,3216],{"class":319},[97,160190,9629],{"class":103},[97,160192,26233],{"class":319},[97,160194,32633],{"class":370},[97,160196,323],{"class":103},[97,160198,537],{"class":370},[97,160200,12626],{"class":103},[97,160202,613],{"class":370},[97,160204,30976],{"class":103},[97,160206,160207,160209,160211,160213,160215,160217,160219,160221,160223],{"class":99,"line":195},[97,160208,3392],{"class":319},[97,160210,9691],{"class":103},[97,160212,26233],{"class":319},[97,160214,32633],{"class":370},[97,160216,323],{"class":103},[97,160218,537],{"class":370},[97,160220,12626],{"class":103},[97,160222,613],{"class":370},[97,160224,30976],{"class":103},[97,160226,160227,160229,160231,160233,160236,160238,160240,160242,160245,160247,160249,160251,160253],{"class":99,"line":241},[97,160228,32641],{"class":370},[97,160230,323],{"class":103},[97,160232,374],{"class":319},[97,160234,160235],{"class":118},"\"i=",[97,160237,1216],{"class":370},[97,160239,761],{"class":103},[97,160241,1265],{"class":370},[97,160243,160244],{"class":118},", j=",[97,160246,1216],{"class":370},[97,160248,787],{"class":103},[97,160250,1265],{"class":370},[97,160252,571],{"class":118},[97,160254,329],{"class":103},[24,160256,160257],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160259,160261],{"id":160260},"_410-九九乘法表","4.10 九九乘法表",[87,160263,160265],{"className":30568,"code":160264,"language":30570,"meta":92,"style":92},"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",[94,160266,160267,160287,160310,160362],{"__ignoreMap":92},[97,160268,160269,160271,160273,160275,160277,160279,160281,160283,160285],{"class":99,"line":100},[97,160270,3216],{"class":319},[97,160272,9629],{"class":103},[97,160274,26233],{"class":319},[97,160276,32633],{"class":370},[97,160278,323],{"class":103},[97,160280,537],{"class":370},[97,160282,12626],{"class":103},[97,160284,766],{"class":370},[97,160286,30976],{"class":103},[97,160288,160289,160291,160293,160295,160297,160299,160301,160304,160306,160308],{"class":99,"line":195},[97,160290,3392],{"class":319},[97,160292,9691],{"class":103},[97,160294,26233],{"class":319},[97,160296,32633],{"class":370},[97,160298,323],{"class":103},[97,160300,537],{"class":370},[97,160302,160303],{"class":103},", i ",[97,160305,801],{"class":319},[97,160307,25308],{"class":370},[97,160309,30976],{"class":103},[97,160311,160312,160314,160316,160318,160320,160322,160324,160326,160328,160330,160332,160334,160336,160338,160340,160342,160344,160346,160348,160350,160352,160354,160356,160358,160360],{"class":99,"line":241},[97,160313,32641],{"class":370},[97,160315,323],{"class":103},[97,160317,374],{"class":319},[97,160319,571],{"class":118},[97,160321,1216],{"class":370},[97,160323,787],{"class":103},[97,160325,1265],{"class":370},[97,160327,775],{"class":118},[97,160329,1216],{"class":370},[97,160331,761],{"class":103},[97,160333,1265],{"class":370},[97,160335,115],{"class":118},[97,160337,1216],{"class":370},[97,160339,100332],{"class":103},[97,160341,775],{"class":319},[97,160343,3601],{"class":103},[97,160345,1265],{"class":370},[97,160347,571],{"class":118},[97,160349,12626],{"class":103},[97,160351,45991],{"class":5407},[97,160353,115],{"class":319},[97,160355,571],{"class":118},[97,160357,1423],{"class":370},[97,160359,571],{"class":118},[97,160361,329],{"class":103},[97,160363,160364,160366],{"class":99,"line":1387},[97,160365,31489],{"class":370},[97,160367,2167],{"class":103},[24,160369,160370],{},"关键点：",[138,160372,160373,160379,160385,160391],{},[70,160374,160375,160376,160378],{},"外层 ",[94,160377,761],{}," 控制行。",[70,160380,160381,160382,160384],{},"内层 ",[94,160383,787],{}," 控制列。",[70,160386,160387,160388,160390],{},"每行结束后用 ",[94,160389,146586],{}," 换行。",[70,160392,160393,160396],{},[94,160394,160395],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160398,160400],{"id":160399},"_411-循环else","4.11 循环else",[24,160402,160403,160404,160406,160407,160409,160410,160412],{},"Python 的循环可以带 ",[94,160405,1893],{},"。当循环正常结束时执行 ",[94,160408,1893],{},"，如果被 ",[94,160411,2244],{}," 打断，则不执行。",[87,160414,160416],{"className":30568,"code":160415,"language":30570,"meta":92,"style":92},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[94,160417,160418,160438,160450,160461,160465,160471],{"__ignoreMap":92},[97,160419,160420,160422,160424,160426,160428,160430,160432,160434,160436],{"class":99,"line":100},[97,160421,3216],{"class":319},[97,160423,9629],{"class":103},[97,160425,26233],{"class":319},[97,160427,32633],{"class":370},[97,160429,323],{"class":103},[97,160431,537],{"class":370},[97,160433,12626],{"class":103},[97,160435,664],{"class":370},[97,160437,30976],{"class":103},[97,160439,160440,160442,160444,160446,160448],{"class":99,"line":195},[97,160441,3292],{"class":319},[97,160443,9629],{"class":103},[97,160445,3140],{"class":319},[97,160447,2229],{"class":370},[97,160449,3930],{"class":103},[97,160451,160452,160454,160456,160459],{"class":99,"line":241},[97,160453,32641],{"class":370},[97,160455,323],{"class":103},[97,160457,160458],{"class":118},"\"找到了\"",[97,160460,329],{"class":103},[97,160462,160463],{"class":99,"line":1387},[97,160464,31817],{"class":319},[97,160466,160467,160469],{"class":99,"line":1393},[97,160468,1893],{"class":319},[97,160470,3930],{"class":103},[97,160472,160473,160475,160477,160480],{"class":99,"line":1407},[97,160474,31489],{"class":370},[97,160476,323],{"class":103},[97,160478,160479],{"class":118},"\"没找到\"",[97,160481,329],{"class":103},[24,160483,160484],{},"常用于搜索。",[87,160486,160488],{"className":30568,"code":160487,"language":30570,"meta":92,"style":92},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[94,160489,160490,160511,160520,160524,160536,160547,160557,160561,160567],{"__ignoreMap":92},[97,160491,160492,160495,160497,160499,160501,160503,160505,160507,160509],{"class":99,"line":100},[97,160493,160494],{"class":103},"names ",[97,160496,115],{"class":319},[97,160498,52410],{"class":103},[97,160500,150002],{"class":118},[97,160502,12626],{"class":103},[97,160504,151050],{"class":118},[97,160506,12626],{"class":103},[97,160508,159845],{"class":118},[97,160510,33436],{"class":103},[97,160512,160513,160515,160517],{"class":99,"line":195},[97,160514,111762],{"class":103},[97,160516,115],{"class":319},[97,160518,160519],{"class":118}," \"小李\"\n",[97,160521,160522],{"class":99,"line":241},[97,160523,2591],{"emptyLinePlaceholder":249},[97,160525,160526,160528,160531,160533],{"class":99,"line":1387},[97,160527,3216],{"class":319},[97,160529,160530],{"class":103}," name ",[97,160532,26233],{"class":319},[97,160534,160535],{"class":103}," names:\n",[97,160537,160538,160540,160542,160544],{"class":99,"line":1393},[97,160539,3292],{"class":319},[97,160541,160530],{"class":103},[97,160543,3140],{"class":319},[97,160545,160546],{"class":103}," target:\n",[97,160548,160549,160551,160553,160555],{"class":99,"line":1407},[97,160550,32641],{"class":370},[97,160552,323],{"class":103},[97,160554,160458],{"class":118},[97,160556,329],{"class":103},[97,160558,160559],{"class":99,"line":1413},[97,160560,31817],{"class":319},[97,160562,160563,160565],{"class":99,"line":1504},[97,160564,1893],{"class":319},[97,160566,3930],{"class":103},[97,160568,160569,160571,160573,160575],{"class":99,"line":1510},[97,160570,31489],{"class":370},[97,160572,323],{"class":103},[97,160574,160479],{"class":118},[97,160576,329],{"class":103},[14,160578,160580],{"id":160579},"_412-小案例登录重试","4.12 小案例：登录重试",[24,160582,123476],{},[138,160584,160585,160588,160591],{},[70,160586,160587],{},"用户最多输入 3 次密码。",[70,160589,160590],{},"密码正确则登录成功。",[70,160592,160593],{},"3 次都错误则锁定账号。",[24,160595,10226],{},[87,160597,160599],{"className":30568,"code":160598,"language":30570,"meta":92,"style":92},"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",[94,160600,160601,160611,160615,160631,160647,160651,160663,160674,160678,160684,160709,160715],{"__ignoreMap":92},[97,160602,160603,160606,160608],{"class":99,"line":100},[97,160604,160605],{"class":103},"password ",[97,160607,115],{"class":319},[97,160609,160610],{"class":118}," \"123456\"\n",[97,160612,160613],{"class":99,"line":195},[97,160614,2591],{"emptyLinePlaceholder":249},[97,160616,160617,160619,160621,160623,160625,160627,160629],{"class":99,"line":241},[97,160618,3216],{"class":319},[97,160620,9629],{"class":103},[97,160622,26233],{"class":319},[97,160624,32633],{"class":370},[97,160626,323],{"class":103},[97,160628,392],{"class":370},[97,160630,30976],{"class":103},[97,160632,160633,160636,160638,160640,160642,160645],{"class":99,"line":1387},[97,160634,160635],{"class":103},"    user_password ",[97,160637,115],{"class":319},[97,160639,60789],{"class":370},[97,160641,323],{"class":103},[97,160643,160644],{"class":118},"\"请输入密码:\"",[97,160646,329],{"class":103},[97,160648,160649],{"class":99,"line":1393},[97,160650,2591],{"emptyLinePlaceholder":249},[97,160652,160653,160655,160658,160660],{"class":99,"line":1407},[97,160654,3292],{"class":319},[97,160656,160657],{"class":103}," user_password ",[97,160659,3140],{"class":319},[97,160661,160662],{"class":103}," password:\n",[97,160664,160665,160667,160669,160672],{"class":99,"line":1413},[97,160666,32641],{"class":370},[97,160668,323],{"class":103},[97,160670,160671],{"class":118},"\"登录成功\"",[97,160673,329],{"class":103},[97,160675,160676],{"class":99,"line":1504},[97,160677,31817],{"class":319},[97,160679,160680,160682],{"class":99,"line":1510},[97,160681,158136],{"class":319},[97,160683,3930],{"class":103},[97,160685,160686,160688,160690,160692,160695,160698,160700,160702,160704,160707],{"class":99,"line":1522},[97,160687,32641],{"class":370},[97,160689,323],{"class":103},[97,160691,374],{"class":319},[97,160693,160694],{"class":118},"\"密码错误，还剩",[97,160696,160697],{"class":370},"{2",[97,160699,52455],{"class":319},[97,160701,3223],{"class":103},[97,160703,1265],{"class":370},[97,160705,160706],{"class":118},"次机会\"",[97,160708,329],{"class":103},[97,160710,160711,160713],{"class":99,"line":1804},[97,160712,1893],{"class":319},[97,160714,3930],{"class":103},[97,160716,160717,160719,160721,160724],{"class":99,"line":1809},[97,160718,31489],{"class":370},[97,160720,323],{"class":103},[97,160722,160723],{"class":118},"\"账号已锁定\"",[97,160725,329],{"class":103},[14,160727,160729],{"id":160728},"_413-小案例菜单程序","4.13 小案例：菜单程序",[87,160731,160733],{"className":30568,"code":160732,"language":30570,"meta":92,"style":92},"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",[94,160734,160735,160743,160754,160765,160776,160787,160798,160802,160817,160821,160833,160844,160856,160867,160879,160890,160902,160912,160916,160922],{"__ignoreMap":92},[97,160736,160737,160739,160741],{"class":99,"line":100},[97,160738,108847],{"class":319},[97,160740,95476],{"class":370},[97,160742,3930],{"class":103},[97,160744,160745,160747,160749,160752],{"class":99,"line":195},[97,160746,31489],{"class":370},[97,160748,323],{"class":103},[97,160750,160751],{"class":118},"\"====== 菜单 ======\"",[97,160753,329],{"class":103},[97,160755,160756,160758,160760,160763],{"class":99,"line":241},[97,160757,31489],{"class":370},[97,160759,323],{"class":103},[97,160761,160762],{"class":118},"\"1. 查询余额\"",[97,160764,329],{"class":103},[97,160766,160767,160769,160771,160774],{"class":99,"line":1387},[97,160768,31489],{"class":370},[97,160770,323],{"class":103},[97,160772,160773],{"class":118},"\"2. 存款\"",[97,160775,329],{"class":103},[97,160777,160778,160780,160782,160785],{"class":99,"line":1393},[97,160779,31489],{"class":370},[97,160781,323],{"class":103},[97,160783,160784],{"class":118},"\"3. 取款\"",[97,160786,329],{"class":103},[97,160788,160789,160791,160793,160796],{"class":99,"line":1407},[97,160790,31489],{"class":370},[97,160792,323],{"class":103},[97,160794,160795],{"class":118},"\"0. 退出\"",[97,160797,329],{"class":103},[97,160799,160800],{"class":99,"line":1413},[97,160801,2591],{"emptyLinePlaceholder":249},[97,160803,160804,160807,160809,160811,160813,160815],{"class":99,"line":1504},[97,160805,160806],{"class":103},"    choice ",[97,160808,115],{"class":319},[97,160810,60789],{"class":370},[97,160812,323],{"class":103},[97,160814,153187],{"class":118},[97,160816,329],{"class":103},[97,160818,160819],{"class":99,"line":1510},[97,160820,2591],{"emptyLinePlaceholder":249},[97,160822,160823,160825,160827,160829,160831],{"class":99,"line":1522},[97,160824,3292],{"class":319},[97,160826,153200],{"class":103},[97,160828,3140],{"class":319},[97,160830,153205],{"class":118},[97,160832,3930],{"class":103},[97,160834,160835,160837,160839,160842],{"class":99,"line":1804},[97,160836,32641],{"class":370},[97,160838,323],{"class":103},[97,160840,160841],{"class":118},"\"余额为1000元\"",[97,160843,329],{"class":103},[97,160845,160846,160848,160850,160852,160854],{"class":99,"line":1809},[97,160847,39483],{"class":319},[97,160849,153200],{"class":103},[97,160851,3140],{"class":319},[97,160853,153224],{"class":118},[97,160855,3930],{"class":103},[97,160857,160858,160860,160862,160865],{"class":99,"line":1815},[97,160859,32641],{"class":370},[97,160861,323],{"class":103},[97,160863,160864],{"class":118},"\"存款功能\"",[97,160866,329],{"class":103},[97,160868,160869,160871,160873,160875,160877],{"class":99,"line":1820},[97,160870,39483],{"class":319},[97,160872,153200],{"class":103},[97,160874,3140],{"class":319},[97,160876,153242],{"class":118},[97,160878,3930],{"class":103},[97,160880,160881,160883,160885,160888],{"class":99,"line":1834},[97,160882,32641],{"class":370},[97,160884,323],{"class":103},[97,160886,160887],{"class":118},"\"取款功能\"",[97,160889,329],{"class":103},[97,160891,160892,160894,160896,160898,160900],{"class":99,"line":1839},[97,160893,39483],{"class":319},[97,160895,153200],{"class":103},[97,160897,3140],{"class":319},[97,160899,153296],{"class":118},[97,160901,3930],{"class":103},[97,160903,160904,160906,160908,160910],{"class":99,"line":1845},[97,160905,32641],{"class":370},[97,160907,323],{"class":103},[97,160909,153307],{"class":118},[97,160911,329],{"class":103},[97,160913,160914],{"class":99,"line":1866},[97,160915,31817],{"class":319},[97,160917,160918,160920],{"class":99,"line":1871},[97,160919,158136],{"class":319},[97,160921,3930],{"class":103},[97,160923,160924,160926,160928,160930],{"class":99,"line":1885},[97,160925,32641],{"class":370},[97,160927,323],{"class":103},[97,160929,153328],{"class":118},[97,160931,329],{"class":103},[24,160933,160934,160935,160937,160938,28575],{},"菜单类程序通常使用 ",[94,160936,159636],{},"，用户选择退出时 ",[94,160939,2244],{},[14,160941,160943],{"id":160942},"_414-易错点","4.14 易错点",[138,160945,160946,160951,160957,160965,160971],{},[70,160947,160948,160950],{},[94,160949,108847],{}," 循环必须更新控制变量。",[70,160952,160953,160956],{},[94,160954,160955],{},"range(1, 10)"," 不包含 10。",[70,160958,160959,160961,160962,160964],{},[94,160960,2244],{}," 结束整个循环，",[94,160963,154786],{}," 只跳过本轮。",[70,160966,160967,160968,160970],{},"嵌套循环中，",[94,160969,2244],{}," 只跳出当前所在的一层循环。",[70,160972,160973],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,160975,160977],{"id":160976},"_415-本章练习","4.15 本章练习",[138,160979,160980,160983,160986,160989,160992],{},[70,160981,160982],{},"输出 1 到 100。",[70,160984,160985],{},"计算 1 到 100 的偶数和。",[70,160987,160988],{},"输出 100 以内能被 3 和 5 同时整除的数。",[70,160990,160991],{},"编写猜数字游戏，限制最多猜 7 次。",[70,160993,160994],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[231,160996,160997],{},"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":92,"searchDepth":195,"depth":195,"links":160999},[161000,161001,161002,161003,161004,161008,161009,161010,161011,161012,161013,161014,161015,161016,161017],{"id":159256,"depth":195,"text":159257},{"id":159286,"depth":195,"text":159287},{"id":159375,"depth":195,"text":159376},{"id":159469,"depth":195,"text":159470},{"id":159643,"depth":195,"text":159644,"children":161005},[161006,161007],{"id":159647,"depth":241,"text":159648},{"id":159711,"depth":241,"text":159712},{"id":159775,"depth":195,"text":159776},{"id":159870,"depth":195,"text":159871},{"id":159979,"depth":195,"text":159980},{"id":160175,"depth":195,"text":160176},{"id":160260,"depth":195,"text":160261},{"id":160399,"depth":195,"text":160400},{"id":160579,"depth":195,"text":160580},{"id":160728,"depth":195,"text":160729},{"id":160942,"depth":195,"text":160943},{"id":160976,"depth":195,"text":160977},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159248,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161024,"title":161025,"body":161026,"description":246,"extension":247,"meta":163031,"navigation":249,"path":163032,"seo":163033,"stem":163034,"__hash__":163035},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161027,"toc":163011},[161028,161031,161035,161038,161041,161055,161058,161072,161076,161078,161097,161099,161146,161148,161162,161166,161240,161243,161247,161250,161309,161317,161320,161373,161376,161380,161385,161440,161448,161498,161502,161507,161515,161614,161620,161624,161629,161632,161643,161684,161697,161701,161704,161740,161743,161756,161759,161819,161823,161827,161830,161881,161885,161888,161935,161941,162007,162010,162014,162017,162133,162136,162140,162143,162249,162253,162256,162294,162297,162339,162342,162402,162405,162409,162873,162876,162880,162907,162913,162974,162978,163008],[10,161029,161025],{"id":161030},"_5-函数基础",[14,161032,161034],{"id":161033},"_51-为什么需要函数","5.1 为什么需要函数",[24,161036,161037],{},"函数用于封装一段可以重复使用的代码。",[24,161039,161040],{},"不使用函数的问题：",[138,161042,161043,161046,161049,161052],{},[70,161044,161045],{},"重复代码多。",[70,161047,161048],{},"修改逻辑时容易漏改。",[70,161050,161051],{},"主流程不清晰。",[70,161053,161054],{},"程序越写越长，难以维护。",[24,161056,161057],{},"使用函数后的好处：",[138,161059,161060,161063,161066,161069],{},[70,161061,161062],{},"提高复用性。",[70,161064,161065],{},"提高可读性。",[70,161067,161068],{},"便于调试。",[70,161070,161071],{},"便于分工。",[14,161073,161075],{"id":161074},"_52-函数定义","5.2 函数定义",[24,161077,5372],{},[87,161079,161081],{"className":30568,"code":161080,"language":30570,"meta":92,"style":92},"def 函数名():\n    函数体\n",[94,161082,161083,161092],{"__ignoreMap":92},[97,161084,161085,161087,161090],{"class":99,"line":100},[97,161086,32137],{"class":319},[97,161088,161089],{"class":111}," 函数名",[97,161091,32143],{"class":103},[97,161093,161094],{"class":99,"line":195},[97,161095,161096],{"class":103},"    函数体\n",[24,161098,15325],{},[87,161100,161102],{"className":30568,"code":161101,"language":30570,"meta":92,"style":92},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[94,161103,161104,161113,161123,161133,161137,161141],{"__ignoreMap":92},[97,161105,161106,161108,161111],{"class":99,"line":100},[97,161107,32137],{"class":319},[97,161109,161110],{"class":111}," say_hello",[97,161112,32143],{"class":103},[97,161114,161115,161117,161119,161121],{"class":99,"line":195},[97,161116,31489],{"class":370},[97,161118,323],{"class":103},[97,161120,6035],{"class":118},[97,161122,329],{"class":103},[97,161124,161125,161127,161129,161131],{"class":99,"line":241},[97,161126,31489],{"class":370},[97,161128,323],{"class":103},[97,161130,146753],{"class":118},[97,161132,329],{"class":103},[97,161134,161135],{"class":99,"line":1387},[97,161136,2591],{"emptyLinePlaceholder":249},[97,161138,161139],{"class":99,"line":1393},[97,161140,2591],{"emptyLinePlaceholder":249},[97,161142,161143],{"class":99,"line":1407},[97,161144,161145],{"class":103},"say_hello()\n",[24,161147,9216],{},[138,161149,161150,161153,161156,161159],{},[70,161151,161152],{},"函数必须先定义，再调用。",[70,161154,161155],{},"函数名遵循变量命名规则。",[70,161157,161158],{},"函数体需要缩进。",[70,161160,161161],{},"函数不调用就不会执行。",[14,161163,161165],{"id":161164},"_53-函数调用","5.3 函数调用",[87,161167,161169],{"className":30568,"code":161168,"language":30570,"meta":92,"style":92},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[94,161170,161171,161180,161191,161202,161213,161223,161227,161231,161236],{"__ignoreMap":92},[97,161172,161173,161175,161178],{"class":99,"line":100},[97,161174,32137],{"class":319},[97,161176,161177],{"class":111}," print_menu",[97,161179,32143],{"class":103},[97,161181,161182,161184,161186,161189],{"class":99,"line":195},[97,161183,31489],{"class":370},[97,161185,323],{"class":103},[97,161187,161188],{"class":118},"\"1. 查询\"",[97,161190,329],{"class":103},[97,161192,161193,161195,161197,161200],{"class":99,"line":241},[97,161194,31489],{"class":370},[97,161196,323],{"class":103},[97,161198,161199],{"class":118},"\"2. 添加\"",[97,161201,329],{"class":103},[97,161203,161204,161206,161208,161211],{"class":99,"line":1387},[97,161205,31489],{"class":370},[97,161207,323],{"class":103},[97,161209,161210],{"class":118},"\"3. 删除\"",[97,161212,329],{"class":103},[97,161214,161215,161217,161219,161221],{"class":99,"line":1393},[97,161216,31489],{"class":370},[97,161218,323],{"class":103},[97,161220,160795],{"class":118},[97,161222,329],{"class":103},[97,161224,161225],{"class":99,"line":1407},[97,161226,2591],{"emptyLinePlaceholder":249},[97,161228,161229],{"class":99,"line":1413},[97,161230,2591],{"emptyLinePlaceholder":249},[97,161232,161233],{"class":99,"line":1504},[97,161234,161235],{"class":103},"print_menu()\n",[97,161237,161238],{"class":99,"line":1510},[97,161239,161235],{"class":103},[24,161241,161242],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161244,161246],{"id":161245},"_54-参数","5.4 参数",[24,161248,161249],{},"参数用于向函数传递数据。",[87,161251,161253],{"className":30568,"code":161252,"language":30570,"meta":92,"style":92},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[94,161254,161255,161264,161284,161288,161292,161301],{"__ignoreMap":92},[97,161256,161257,161259,161261],{"class":99,"line":100},[97,161258,32137],{"class":319},[97,161260,161110],{"class":111},[97,161262,161263],{"class":103},"(name):\n",[97,161265,161266,161268,161270,161272,161274,161276,161278,161280,161282],{"class":99,"line":195},[97,161267,31489],{"class":370},[97,161269,323],{"class":103},[97,161271,374],{"class":319},[97,161273,157168],{"class":118},[97,161275,1216],{"class":370},[97,161277,79994],{"class":103},[97,161279,1265],{"class":370},[97,161281,571],{"class":118},[97,161283,329],{"class":103},[97,161285,161286],{"class":99,"line":241},[97,161287,2591],{"emptyLinePlaceholder":249},[97,161289,161290],{"class":99,"line":1387},[97,161291,2591],{"emptyLinePlaceholder":249},[97,161293,161294,161297,161299],{"class":99,"line":1393},[97,161295,161296],{"class":103},"say_hello(",[97,161298,150002],{"class":118},[97,161300,329],{"class":103},[97,161302,161303,161305,161307],{"class":99,"line":1407},[97,161304,161296],{"class":103},[97,161306,151050],{"class":118},[97,161308,329],{"class":103},[24,161310,161311,161313,161314,161316],{},[94,161312,79994],{}," 是形参，",[94,161315,150002],{}," 是实参。",[24,161318,161319],{},"多个参数：",[87,161321,161323],{"className":30568,"code":161322,"language":30570,"meta":92,"style":92},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[94,161324,161325,161333,161346,161352,161356,161360],{"__ignoreMap":92},[97,161326,161327,161329,161331],{"class":99,"line":100},[97,161328,32137],{"class":319},[97,161330,5400],{"class":111},[97,161332,151207],{"class":103},[97,161334,161335,161338,161340,161342,161344],{"class":99,"line":195},[97,161336,161337],{"class":103},"    result ",[97,161339,115],{"class":319},[97,161341,11060],{"class":103},[97,161343,801],{"class":319},[97,161345,151218],{"class":103},[97,161347,161348,161350],{"class":99,"line":241},[97,161349,31489],{"class":370},[97,161351,76769],{"class":103},[97,161353,161354],{"class":99,"line":1387},[97,161355,2591],{"emptyLinePlaceholder":249},[97,161357,161358],{"class":99,"line":1393},[97,161359,2591],{"emptyLinePlaceholder":249},[97,161361,161362,161365,161367,161369,161371],{"class":99,"line":1407},[97,161363,161364],{"class":103},"add(",[97,161366,766],{"class":370},[97,161368,12626],{"class":103},[97,161370,1020],{"class":370},[97,161372,329],{"class":103},[24,161374,161375],{},"调用时参数数量必须匹配。",[14,161377,161379],{"id":161378},"_55-返回值","5.5 返回值",[24,161381,161382,161384],{},[94,161383,17236],{}," 用于把函数内部的结果返回给调用者。",[87,161386,161388],{"className":30568,"code":161387,"language":30570,"meta":92,"style":92},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[94,161389,161390,161398,161408,161412,161416,161434],{"__ignoreMap":92},[97,161391,161392,161394,161396],{"class":99,"line":100},[97,161393,32137],{"class":319},[97,161395,5400],{"class":111},[97,161397,151207],{"class":103},[97,161399,161400,161402,161404,161406],{"class":99,"line":195},[97,161401,4281],{"class":319},[97,161403,11060],{"class":103},[97,161405,801],{"class":319},[97,161407,151218],{"class":103},[97,161409,161410],{"class":99,"line":241},[97,161411,2591],{"emptyLinePlaceholder":249},[97,161413,161414],{"class":99,"line":1387},[97,161415,2591],{"emptyLinePlaceholder":249},[97,161417,161418,161421,161423,161426,161428,161430,161432],{"class":99,"line":1393},[97,161419,161420],{"class":103},"result ",[97,161422,115],{"class":319},[97,161424,161425],{"class":103}," add(",[97,161427,766],{"class":370},[97,161429,12626],{"class":103},[97,161431,1020],{"class":370},[97,161433,329],{"class":103},[97,161435,161436,161438],{"class":99,"line":1407},[97,161437,30605],{"class":370},[97,161439,76769],{"class":103},[24,161441,161442,161443,161445,161446,28575],{},"如果函数没有写 ",[94,161444,17236],{},"，默认返回 ",[94,161447,95870],{},[87,161449,161451],{"className":30568,"code":161450,"language":30570,"meta":92,"style":92},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[94,161452,161453,161461,161471,161475,161479,161488],{"__ignoreMap":92},[97,161454,161455,161457,161459],{"class":99,"line":100},[97,161456,32137],{"class":319},[97,161458,161110],{"class":111},[97,161460,32143],{"class":103},[97,161462,161463,161465,161467,161469],{"class":99,"line":195},[97,161464,31489],{"class":370},[97,161466,323],{"class":103},[97,161468,6035],{"class":118},[97,161470,329],{"class":103},[97,161472,161473],{"class":99,"line":241},[97,161474,2591],{"emptyLinePlaceholder":249},[97,161476,161477],{"class":99,"line":1387},[97,161478,2591],{"emptyLinePlaceholder":249},[97,161480,161481,161483,161485],{"class":99,"line":1393},[97,161482,161420],{"class":103},[97,161484,115],{"class":319},[97,161486,161487],{"class":103}," say_hello()\n",[97,161489,161490,161492,161495],{"class":99,"line":1407},[97,161491,30605],{"class":370},[97,161493,161494],{"class":103},"(result)  ",[97,161496,161497],{"class":191},"# None\n",[14,161499,161501],{"id":161500},"_56-return的作用","5.6 return的作用",[24,161503,161504,161506],{},[94,161505,17236],{}," 有两个作用：",[138,161508,161509,161512],{},[70,161510,161511],{},"返回结果。",[70,161513,161514],{},"结束函数。",[87,161516,161518],{"className":30568,"code":161517,"language":30570,"meta":92,"style":92},"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",[94,161519,161520,161530,161542,161549,161553,161565,161572,161576,161583,161587,161591,161602],{"__ignoreMap":92},[97,161521,161522,161524,161527],{"class":99,"line":100},[97,161523,32137],{"class":319},[97,161525,161526],{"class":111}," check_age",[97,161528,161529],{"class":103},"(age):\n",[97,161531,161532,161534,161536,161538,161540],{"class":99,"line":195},[97,161533,3292],{"class":319},[97,161535,15897],{"class":103},[97,161537,104],{"class":319},[97,161539,4284],{"class":370},[97,161541,3930],{"class":103},[97,161543,161544,161546],{"class":99,"line":241},[97,161545,14943],{"class":319},[97,161547,161548],{"class":118}," \"年龄不合法\"\n",[97,161550,161551],{"class":99,"line":1387},[97,161552,2591],{"emptyLinePlaceholder":249},[97,161554,161555,161557,161559,161561,161563],{"class":99,"line":1393},[97,161556,3292],{"class":319},[97,161558,15897],{"class":103},[97,161560,1902],{"class":319},[97,161562,156399],{"class":370},[97,161564,3930],{"class":103},[97,161566,161567,161569],{"class":99,"line":1407},[97,161568,14943],{"class":319},[97,161570,161571],{"class":118}," \"成年人\"\n",[97,161573,161574],{"class":99,"line":1413},[97,161575,2591],{"emptyLinePlaceholder":249},[97,161577,161578,161580],{"class":99,"line":1504},[97,161579,4281],{"class":319},[97,161581,161582],{"class":118}," \"未成年人\"\n",[97,161584,161585],{"class":99,"line":1510},[97,161586,2591],{"emptyLinePlaceholder":249},[97,161588,161589],{"class":99,"line":1522},[97,161590,2591],{"emptyLinePlaceholder":249},[97,161592,161593,161595,161598,161600],{"class":99,"line":1804},[97,161594,30605],{"class":370},[97,161596,161597],{"class":103},"(check_age(",[97,161599,1020],{"class":370},[97,161601,30687],{"class":103},[97,161603,161604,161606,161608,161610,161612],{"class":99,"line":1809},[97,161605,30605],{"class":370},[97,161607,161597],{"class":103},[97,161609,852],{"class":319},[97,161611,537],{"class":370},[97,161613,30687],{"class":103},[24,161615,161616,161617,161619],{},"函数执行到 ",[94,161618,17236],{}," 后，后面的代码不会继续执行。",[14,161621,161623],{"id":161622},"_57-none","5.7 None",[24,161625,161626,161628],{},[94,161627,95870],{}," 表示空值或没有结果。",[24,161630,161631],{},"常见使用场景：",[138,161633,161634,161637,161640],{},[70,161635,161636],{},"函数没有返回值。",[70,161638,161639],{},"变量暂时没有具体值。",[70,161641,161642],{},"表示查询不到结果。",[87,161644,161646],{"className":30568,"code":161645,"language":30570,"meta":92,"style":92},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[94,161647,161648,161656,161660,161673],{"__ignoreMap":92},[97,161649,161650,161652,161654],{"class":99,"line":100},[97,161651,161420],{"class":103},[97,161653,115],{"class":319},[97,161655,152286],{"class":370},[97,161657,161658],{"class":99,"line":195},[97,161659,2591],{"emptyLinePlaceholder":249},[97,161661,161662,161664,161667,161669,161671],{"class":99,"line":241},[97,161663,1723],{"class":319},[97,161665,161666],{"class":103}," result ",[97,161668,39117],{"class":319},[97,161670,39123],{"class":370},[97,161672,3930],{"class":103},[97,161674,161675,161677,161679,161682],{"class":99,"line":1387},[97,161676,31489],{"class":370},[97,161678,323],{"class":103},[97,161680,161681],{"class":118},"\"没有数据\"",[97,161683,329],{"class":103},[24,161685,161686,161687,161689,161690,161693,161694,28575],{},"判断 ",[94,161688,95870],{}," 推荐使用 ",[94,161691,161692],{},"is None","，不要写成 ",[94,161695,161696],{},"== None",[14,161698,161700],{"id":161699},"_58-函数文档字符串","5.8 函数文档字符串",[24,161702,161703],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[87,161705,161707],{"className":30568,"code":161706,"language":30570,"meta":92,"style":92},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[94,161708,161709,161719,161724],{"__ignoreMap":92},[97,161710,161711,161713,161716],{"class":99,"line":100},[97,161712,32137],{"class":319},[97,161714,161715],{"class":111}," calculate_bmi",[97,161717,161718],{"class":103},"(weight, height):\n",[97,161720,161721],{"class":99,"line":195},[97,161722,161723],{"class":118},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[97,161725,161726,161728,161731,161733,161736,161738],{"class":99,"line":241},[97,161727,4281],{"class":319},[97,161729,161730],{"class":103}," weight ",[97,161732,904],{"class":319},[97,161734,161735],{"class":103}," height ",[97,161737,10852],{"class":319},[97,161739,47913],{"class":370},[24,161741,161742],{},"查看说明：",[87,161744,161746],{"className":30568,"code":161745,"language":30570,"meta":92,"style":92},"help(calculate_bmi)\n",[94,161747,161748],{"__ignoreMap":92},[97,161749,161750,161753],{"class":99,"line":100},[97,161751,161752],{"class":370},"help",[97,161754,161755],{"class":103},"(calculate_bmi)\n",[24,161757,161758],{},"较完整的写法：",[87,161760,161762],{"className":30568,"code":161761,"language":30570,"meta":92,"style":92},"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",[94,161763,161764,161772,161777,161782,161786,161791,161796,161801,161805],{"__ignoreMap":92},[97,161765,161766,161768,161770],{"class":99,"line":100},[97,161767,32137],{"class":319},[97,161769,161715],{"class":111},[97,161771,161718],{"class":103},[97,161773,161774],{"class":99,"line":195},[97,161775,161776],{"class":118},"    \"\"\"\n",[97,161778,161779],{"class":99,"line":241},[97,161780,161781],{"class":118},"    计算BMI。\n",[97,161783,161784],{"class":99,"line":1387},[97,161785,2591],{"emptyLinePlaceholder":249},[97,161787,161788],{"class":99,"line":1393},[97,161789,161790],{"class":118},"    :param weight: 体重，单位kg\n",[97,161792,161793],{"class":99,"line":1407},[97,161794,161795],{"class":118},"    :param height: 身高，单位m\n",[97,161797,161798],{"class":99,"line":1413},[97,161799,161800],{"class":118},"    :return: BMI数值\n",[97,161802,161803],{"class":99,"line":1504},[97,161804,161776],{"class":118},[97,161806,161807,161809,161811,161813,161815,161817],{"class":99,"line":1510},[97,161808,4281],{"class":319},[97,161810,161730],{"class":103},[97,161812,904],{"class":319},[97,161814,161735],{"class":103},[97,161816,10852],{"class":319},[97,161818,47913],{"class":370},[14,161820,161822],{"id":161821},"_59-变量作用域","5.9 变量作用域",[48,161824,161826],{"id":161825},"_591-局部变量","5.9.1 局部变量",[24,161828,161829],{},"在函数内部定义的变量，只能在函数内部使用。",[87,161831,161833],{"className":30568,"code":161832,"language":30570,"meta":92,"style":92},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[94,161834,161835,161844,161852,161858,161862,161866,161871],{"__ignoreMap":92},[97,161836,161837,161839,161842],{"class":99,"line":100},[97,161838,32137],{"class":319},[97,161840,161841],{"class":111}," test",[97,161843,32143],{"class":103},[97,161845,161846,161848,161850],{"class":99,"line":195},[97,161847,45783],{"class":103},[97,161849,115],{"class":319},[97,161851,58612],{"class":370},[97,161853,161854,161856],{"class":99,"line":241},[97,161855,31489],{"class":370},[97,161857,336],{"class":103},[97,161859,161860],{"class":99,"line":1387},[97,161861,2591],{"emptyLinePlaceholder":249},[97,161863,161864],{"class":99,"line":1393},[97,161865,2591],{"emptyLinePlaceholder":249},[97,161867,161868],{"class":99,"line":1407},[97,161869,161870],{"class":103},"test()\n",[97,161872,161873,161875,161878],{"class":99,"line":1413},[97,161874,30605],{"class":370},[97,161876,161877],{"class":103},"(num)  ",[97,161879,161880],{"class":191},"# 报错\n",[48,161882,161884],{"id":161883},"_592-全局变量","5.9.2 全局变量",[24,161886,161887],{},"在函数外部定义的变量，可以在函数内部读取。",[87,161889,161891],{"className":30568,"code":161890,"language":30570,"meta":92,"style":92},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[94,161892,161893,161901,161905,161909,161917,161923,161927,161931],{"__ignoreMap":92},[97,161894,161895,161897,161899],{"class":99,"line":100},[97,161896,146650],{"class":103},[97,161898,115],{"class":319},[97,161900,149467],{"class":118},[97,161902,161903],{"class":99,"line":195},[97,161904,2591],{"emptyLinePlaceholder":249},[97,161906,161907],{"class":99,"line":241},[97,161908,2591],{"emptyLinePlaceholder":249},[97,161910,161911,161913,161915],{"class":99,"line":1387},[97,161912,32137],{"class":319},[97,161914,161110],{"class":111},[97,161916,32143],{"class":103},[97,161918,161919,161921],{"class":99,"line":1393},[97,161920,31489],{"class":370},[97,161922,150774],{"class":103},[97,161924,161925],{"class":99,"line":1407},[97,161926,2591],{"emptyLinePlaceholder":249},[97,161928,161929],{"class":99,"line":1413},[97,161930,2591],{"emptyLinePlaceholder":249},[97,161932,161933],{"class":99,"line":1504},[97,161934,161145],{"class":103},[24,161936,161937,161938,28575],{},"如果要在函数内部修改全局变量，需要 ",[94,161939,161940],{},"global",[87,161942,161944],{"className":30568,"code":161943,"language":30570,"meta":92,"style":92},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[94,161945,161946,161954,161958,161962,161971,161979,161987,161991,161995,162000],{"__ignoreMap":92},[97,161947,161948,161950,161952],{"class":99,"line":100},[97,161949,146805],{"class":103},[97,161951,115],{"class":319},[97,161953,47523],{"class":370},[97,161955,161956],{"class":99,"line":195},[97,161957,2591],{"emptyLinePlaceholder":249},[97,161959,161960],{"class":99,"line":241},[97,161961,2591],{"emptyLinePlaceholder":249},[97,161963,161964,161966,161969],{"class":99,"line":1387},[97,161965,32137],{"class":319},[97,161967,161968],{"class":111}," add_count",[97,161970,32143],{"class":103},[97,161972,161973,161976],{"class":99,"line":1393},[97,161974,161975],{"class":319},"    global",[97,161977,161978],{"class":103}," count\n",[97,161980,161981,161983,161985],{"class":99,"line":1407},[97,161982,159547],{"class":103},[97,161984,9668],{"class":319},[97,161986,55883],{"class":370},[97,161988,161989],{"class":99,"line":1413},[97,161990,2591],{"emptyLinePlaceholder":249},[97,161992,161993],{"class":99,"line":1504},[97,161994,2591],{"emptyLinePlaceholder":249},[97,161996,161997],{"class":99,"line":1510},[97,161998,161999],{"class":103},"add_count()\n",[97,162001,162002,162004],{"class":99,"line":1522},[97,162003,30605],{"class":370},[97,162005,162006],{"class":103},"(count)\n",[24,162008,162009],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162011,162013],{"id":162012},"_510-函数嵌套调用","5.10 函数嵌套调用",[24,162015,162016],{},"一个函数中可以调用另一个函数。",[87,162018,162020],{"className":30568,"code":162019,"language":30570,"meta":92,"style":92},"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",[94,162021,162022,162031,162045,162049,162053,162062,162067,162087,162108,162112,162116,162120],{"__ignoreMap":92},[97,162023,162024,162026,162029],{"class":99,"line":100},[97,162025,32137],{"class":319},[97,162027,162028],{"class":111}," print_line",[97,162030,32143],{"class":103},[97,162032,162033,162035,162037,162039,162041,162043],{"class":99,"line":195},[97,162034,31489],{"class":370},[97,162036,323],{"class":103},[97,162038,32673],{"class":118},[97,162040,6709],{"class":319},[97,162042,78849],{"class":370},[97,162044,329],{"class":103},[97,162046,162047],{"class":99,"line":241},[97,162048,2591],{"emptyLinePlaceholder":249},[97,162050,162051],{"class":99,"line":1387},[97,162052,2591],{"emptyLinePlaceholder":249},[97,162054,162055,162057,162060],{"class":99,"line":1393},[97,162056,32137],{"class":319},[97,162058,162059],{"class":111}," print_info",[97,162061,149489],{"class":103},[97,162063,162064],{"class":99,"line":1407},[97,162065,162066],{"class":103},"    print_line()\n",[97,162068,162069,162071,162073,162075,162077,162079,162081,162083,162085],{"class":99,"line":1413},[97,162070,31489],{"class":370},[97,162072,323],{"class":103},[97,162074,374],{"class":319},[97,162076,156796],{"class":118},[97,162078,1216],{"class":370},[97,162080,79994],{"class":103},[97,162082,1265],{"class":370},[97,162084,571],{"class":118},[97,162086,329],{"class":103},[97,162088,162089,162091,162093,162095,162098,162100,162102,162104,162106],{"class":99,"line":1504},[97,162090,31489],{"class":370},[97,162092,323],{"class":103},[97,162094,374],{"class":319},[97,162096,162097],{"class":118},"\"年龄:",[97,162099,1216],{"class":370},[97,162101,70405],{"class":103},[97,162103,1265],{"class":370},[97,162105,571],{"class":118},[97,162107,329],{"class":103},[97,162109,162110],{"class":99,"line":1510},[97,162111,162066],{"class":103},[97,162113,162114],{"class":99,"line":1522},[97,162115,2591],{"emptyLinePlaceholder":249},[97,162117,162118],{"class":99,"line":1804},[97,162119,2591],{"emptyLinePlaceholder":249},[97,162121,162122,162125,162127,162129,162131],{"class":99,"line":1809},[97,162123,162124],{"class":103},"print_info(",[97,162126,150002],{"class":118},[97,162128,12626],{"class":103},[97,162130,970],{"class":370},[97,162132,329],{"class":103},[24,162134,162135],{},"这种方式可以把小功能组合成大功能。",[14,162137,162139],{"id":162138},"_511-参数检查","5.11 参数检查",[24,162141,162142],{},"函数内部可以检查参数是否合法。",[87,162144,162146],{"className":30568,"code":162145,"language":30570,"meta":92,"style":92},"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",[94,162147,162148,162157,162169,162175,162185,162189,162193,162210,162214,162226,162237,162243],{"__ignoreMap":92},[97,162149,162150,162152,162155],{"class":99,"line":100},[97,162151,32137],{"class":319},[97,162153,162154],{"class":111}," divide",[97,162156,151207],{"class":103},[97,162158,162159,162161,162163,162165,162167],{"class":99,"line":195},[97,162160,3292],{"class":319},[97,162162,11073],{"class":103},[97,162164,3140],{"class":319},[97,162166,4284],{"class":370},[97,162168,3930],{"class":103},[97,162170,162171,162173],{"class":99,"line":241},[97,162172,14943],{"class":319},[97,162174,152286],{"class":370},[97,162176,162177,162179,162181,162183],{"class":99,"line":1387},[97,162178,4281],{"class":319},[97,162180,11060],{"class":103},[97,162182,904],{"class":319},[97,162184,151218],{"class":103},[97,162186,162187],{"class":99,"line":1393},[97,162188,2591],{"emptyLinePlaceholder":249},[97,162190,162191],{"class":99,"line":1407},[97,162192,2591],{"emptyLinePlaceholder":249},[97,162194,162195,162197,162199,162202,162204,162206,162208],{"class":99,"line":1413},[97,162196,161420],{"class":103},[97,162198,115],{"class":319},[97,162200,162201],{"class":103}," divide(",[97,162203,766],{"class":370},[97,162205,12626],{"class":103},[97,162207,511],{"class":370},[97,162209,329],{"class":103},[97,162211,162212],{"class":99,"line":1504},[97,162213,2591],{"emptyLinePlaceholder":249},[97,162215,162216,162218,162220,162222,162224],{"class":99,"line":1510},[97,162217,1723],{"class":319},[97,162219,161666],{"class":103},[97,162221,39117],{"class":319},[97,162223,39123],{"class":370},[97,162225,3930],{"class":103},[97,162227,162228,162230,162232,162235],{"class":99,"line":1522},[97,162229,31489],{"class":370},[97,162231,323],{"class":103},[97,162233,162234],{"class":118},"\"除数不能为0\"",[97,162236,329],{"class":103},[97,162238,162239,162241],{"class":99,"line":1804},[97,162240,1893],{"class":319},[97,162242,3930],{"class":103},[97,162244,162245,162247],{"class":99,"line":1809},[97,162246,31489],{"class":370},[97,162248,76769],{"class":103},[14,162250,162252],{"id":162251},"_512-类型提示","5.12 类型提示",[24,162254,162255],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[87,162257,162259],{"className":30568,"code":162258,"language":30570,"meta":92,"style":92},"def add(a: int, b: int) -> int:\n    return a + b\n",[94,162260,162261,162284],{"__ignoreMap":92},[97,162262,162263,162265,162267,162270,162272,162275,162277,162280,162282],{"class":99,"line":100},[97,162264,32137],{"class":319},[97,162266,5400],{"class":111},[97,162268,162269],{"class":103},"(a: ",[97,162271,326],{"class":370},[97,162273,162274],{"class":103},", b: ",[97,162276,326],{"class":370},[97,162278,162279],{"class":103},") -> ",[97,162281,326],{"class":370},[97,162283,3930],{"class":103},[97,162285,162286,162288,162290,162292],{"class":99,"line":195},[97,162287,4281],{"class":319},[97,162289,11060],{"class":103},[97,162291,801],{"class":319},[97,162293,151218],{"class":103},[24,162295,162296],{},"字符串参数：",[87,162298,162300],{"className":30568,"code":162299,"language":30570,"meta":92,"style":92},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[94,162301,162302,162319],{"__ignoreMap":92},[97,162303,162304,162306,162308,162311,162313,162315,162317],{"class":99,"line":100},[97,162305,32137],{"class":319},[97,162307,161110],{"class":111},[97,162309,162310],{"class":103},"(name: ",[97,162312,1492],{"class":370},[97,162314,162279],{"class":103},[97,162316,95870],{"class":370},[97,162318,3930],{"class":103},[97,162320,162321,162323,162325,162327,162329,162331,162333,162335,162337],{"class":99,"line":195},[97,162322,31489],{"class":370},[97,162324,323],{"class":103},[97,162326,374],{"class":319},[97,162328,157168],{"class":118},[97,162330,1216],{"class":370},[97,162332,79994],{"class":103},[97,162334,1265],{"class":370},[97,162336,571],{"class":118},[97,162338,329],{"class":103},[24,162340,162341],{},"列表参数：",[87,162343,162345],{"className":30568,"code":162344,"language":30570,"meta":92,"style":92},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[94,162346,162347,162366,162374,162386,162395],{"__ignoreMap":92},[97,162348,162349,162351,162354,162357,162359,162362,162364],{"class":99,"line":100},[97,162350,32137],{"class":319},[97,162352,162353],{"class":111}," get_total",[97,162355,162356],{"class":103},"(numbers: list[",[97,162358,326],{"class":370},[97,162360,162361],{"class":103},"]) -> ",[97,162363,326],{"class":370},[97,162365,3930],{"class":103},[97,162367,162368,162370,162372],{"class":99,"line":195},[97,162369,159421],{"class":103},[97,162371,115],{"class":319},[97,162373,47523],{"class":370},[97,162375,162376,162378,162381,162383],{"class":99,"line":241},[97,162377,3392],{"class":319},[97,162379,162380],{"class":103}," number ",[97,162382,26233],{"class":319},[97,162384,162385],{"class":103}," numbers:\n",[97,162387,162388,162390,162392],{"class":99,"line":1387},[97,162389,160096],{"class":103},[97,162391,9668],{"class":319},[97,162393,162394],{"class":103}," number\n",[97,162396,162397,162399],{"class":99,"line":1393},[97,162398,4281],{"class":319},[97,162400,162401],{"class":103}," total\n",[24,162403,162404],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162406,162408],{"id":162407},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[87,162410,162412],{"className":30568,"code":162411,"language":30570,"meta":92,"style":92},"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",[94,162413,162414,162424,162428,162432,162440,162451,162461,162471,162481,162491,162495,162499,162508,162530,162534,162538,162547,162553,162573,162585,162596,162600,162609,162620,162625,162629,162633,162642,162648,162667,162679,162689,162693,162704,162714,162718,162726,162737,162741,162745,162749,162757,162762,162776,162780,162792,162797,162809,162814,162826,162831,162843,162853,162857,162863],{"__ignoreMap":92},[97,162415,162416,162419,162421],{"class":99,"line":100},[97,162417,162418],{"class":103},"balance ",[97,162420,115],{"class":319},[97,162422,162423],{"class":370}," 1000\n",[97,162425,162426],{"class":99,"line":195},[97,162427,2591],{"emptyLinePlaceholder":249},[97,162429,162430],{"class":99,"line":241},[97,162431,2591],{"emptyLinePlaceholder":249},[97,162433,162434,162436,162438],{"class":99,"line":1387},[97,162435,32137],{"class":319},[97,162437,152147],{"class":111},[97,162439,32143],{"class":103},[97,162441,162442,162444,162446,162449],{"class":99,"line":1393},[97,162443,31489],{"class":370},[97,162445,323],{"class":103},[97,162447,162448],{"class":118},"\"====== ATM ======\"",[97,162450,329],{"class":103},[97,162452,162453,162455,162457,162459],{"class":99,"line":1407},[97,162454,31489],{"class":370},[97,162456,323],{"class":103},[97,162458,160762],{"class":118},[97,162460,329],{"class":103},[97,162462,162463,162465,162467,162469],{"class":99,"line":1413},[97,162464,31489],{"class":370},[97,162466,323],{"class":103},[97,162468,160773],{"class":118},[97,162470,329],{"class":103},[97,162472,162473,162475,162477,162479],{"class":99,"line":1504},[97,162474,31489],{"class":370},[97,162476,323],{"class":103},[97,162478,160784],{"class":118},[97,162480,329],{"class":103},[97,162482,162483,162485,162487,162489],{"class":99,"line":1510},[97,162484,31489],{"class":370},[97,162486,323],{"class":103},[97,162488,160795],{"class":118},[97,162490,329],{"class":103},[97,162492,162493],{"class":99,"line":1522},[97,162494,2591],{"emptyLinePlaceholder":249},[97,162496,162497],{"class":99,"line":1804},[97,162498,2591],{"emptyLinePlaceholder":249},[97,162500,162501,162503,162506],{"class":99,"line":1809},[97,162502,32137],{"class":319},[97,162504,162505],{"class":111}," show_balance",[97,162507,32143],{"class":103},[97,162509,162510,162512,162514,162516,162519,162521,162524,162526,162528],{"class":99,"line":1815},[97,162511,31489],{"class":370},[97,162513,323],{"class":103},[97,162515,374],{"class":319},[97,162517,162518],{"class":118},"\"当前余额:",[97,162520,1216],{"class":370},[97,162522,162523],{"class":103},"balance",[97,162525,1265],{"class":370},[97,162527,157126],{"class":118},[97,162529,329],{"class":103},[97,162531,162532],{"class":99,"line":1820},[97,162533,2591],{"emptyLinePlaceholder":249},[97,162535,162536],{"class":99,"line":1834},[97,162537,2591],{"emptyLinePlaceholder":249},[97,162539,162540,162542,162545],{"class":99,"line":1839},[97,162541,32137],{"class":319},[97,162543,162544],{"class":111}," save_money",[97,162546,32143],{"class":103},[97,162548,162549,162551],{"class":99,"line":1845},[97,162550,161975],{"class":319},[97,162552,150213],{"class":103},[97,162554,162555,162558,162560,162562,162564,162566,162568,162571],{"class":99,"line":1866},[97,162556,162557],{"class":103},"    money ",[97,162559,115],{"class":319},[97,162561,109981],{"class":370},[97,162563,323],{"class":103},[97,162565,54005],{"class":370},[97,162567,323],{"class":103},[97,162569,162570],{"class":118},"\"请输入存款金额:\"",[97,162572,30687],{"class":103},[97,162574,162575,162577,162579,162581,162583],{"class":99,"line":1871},[97,162576,3292],{"class":319},[97,162578,150256],{"class":103},[97,162580,1780],{"class":319},[97,162582,4284],{"class":370},[97,162584,3930],{"class":103},[97,162586,162587,162589,162591,162594],{"class":99,"line":1885},[97,162588,32641],{"class":370},[97,162590,323],{"class":103},[97,162592,162593],{"class":118},"\"金额必须大于0\"",[97,162595,329],{"class":103},[97,162597,162598],{"class":99,"line":1890},[97,162599,152475],{"class":319},[97,162601,162602,162605,162607],{"class":99,"line":1919},[97,162603,162604],{"class":103},"    balance ",[97,162606,9668],{"class":319},[97,162608,150289],{"class":103},[97,162610,162611,162613,162615,162618],{"class":99,"line":1924},[97,162612,31489],{"class":370},[97,162614,323],{"class":103},[97,162616,162617],{"class":118},"\"存款成功\"",[97,162619,329],{"class":103},[97,162621,162622],{"class":99,"line":1941},[97,162623,162624],{"class":103},"    show_balance()\n",[97,162626,162627],{"class":99,"line":1946},[97,162628,2591],{"emptyLinePlaceholder":249},[97,162630,162631],{"class":99,"line":1951},[97,162632,2591],{"emptyLinePlaceholder":249},[97,162634,162635,162637,162640],{"class":99,"line":1956},[97,162636,32137],{"class":319},[97,162638,162639],{"class":111}," withdraw_money",[97,162641,32143],{"class":103},[97,162643,162644,162646],{"class":99,"line":1970},[97,162645,161975],{"class":319},[97,162647,150213],{"class":103},[97,162649,162650,162652,162654,162656,162658,162660,162662,162665],{"class":99,"line":1975},[97,162651,162557],{"class":103},[97,162653,115],{"class":319},[97,162655,109981],{"class":370},[97,162657,323],{"class":103},[97,162659,54005],{"class":370},[97,162661,323],{"class":103},[97,162663,162664],{"class":118},"\"请输入取款金额:\"",[97,162666,30687],{"class":103},[97,162668,162669,162671,162673,162675,162677],{"class":99,"line":2768},[97,162670,3292],{"class":319},[97,162672,150256],{"class":103},[97,162674,1780],{"class":319},[97,162676,4284],{"class":370},[97,162678,3930],{"class":103},[97,162680,162681,162683,162685,162687],{"class":99,"line":2782},[97,162682,32641],{"class":370},[97,162684,323],{"class":103},[97,162686,162593],{"class":118},[97,162688,329],{"class":103},[97,162690,162691],{"class":99,"line":2790},[97,162692,152475],{"class":319},[97,162694,162695,162697,162699,162701],{"class":99,"line":2795},[97,162696,3292],{"class":319},[97,162698,150256],{"class":103},[97,162700,1279],{"class":319},[97,162702,162703],{"class":103}," balance:\n",[97,162705,162706,162708,162710,162712],{"class":99,"line":2801},[97,162707,32641],{"class":370},[97,162709,323],{"class":103},[97,162711,150351],{"class":118},[97,162713,329],{"class":103},[97,162715,162716],{"class":99,"line":2807},[97,162717,152475],{"class":319},[97,162719,162720,162722,162724],{"class":99,"line":2812},[97,162721,162604],{"class":103},[97,162723,150366],{"class":319},[97,162725,150289],{"class":103},[97,162727,162728,162730,162732,162735],{"class":99,"line":8139},[97,162729,31489],{"class":370},[97,162731,323],{"class":103},[97,162733,162734],{"class":118},"\"取款成功\"",[97,162736,329],{"class":103},[97,162738,162739],{"class":99,"line":8163},[97,162740,162624],{"class":103},[97,162742,162743],{"class":99,"line":8168},[97,162744,2591],{"emptyLinePlaceholder":249},[97,162746,162747],{"class":99,"line":8174},[97,162748,2591],{"emptyLinePlaceholder":249},[97,162750,162751,162753,162755],{"class":99,"line":8201},[97,162752,108847],{"class":319},[97,162754,95476],{"class":370},[97,162756,3930],{"class":103},[97,162758,162759],{"class":99,"line":8206},[97,162760,162761],{"class":103},"    show_menu()\n",[97,162763,162764,162766,162768,162770,162772,162774],{"class":99,"line":8212},[97,162765,160806],{"class":103},[97,162767,115],{"class":319},[97,162769,60789],{"class":370},[97,162771,323],{"class":103},[97,162773,153187],{"class":118},[97,162775,329],{"class":103},[97,162777,162778],{"class":99,"line":8224},[97,162779,2591],{"emptyLinePlaceholder":249},[97,162781,162782,162784,162786,162788,162790],{"class":99,"line":8236},[97,162783,3292],{"class":319},[97,162785,153200],{"class":103},[97,162787,3140],{"class":319},[97,162789,153205],{"class":118},[97,162791,3930],{"class":103},[97,162793,162794],{"class":99,"line":8248},[97,162795,162796],{"class":103},"        show_balance()\n",[97,162798,162799,162801,162803,162805,162807],{"class":99,"line":9907},[97,162800,39483],{"class":319},[97,162802,153200],{"class":103},[97,162804,3140],{"class":319},[97,162806,153224],{"class":118},[97,162808,3930],{"class":103},[97,162810,162811],{"class":99,"line":9932},[97,162812,162813],{"class":103},"        save_money()\n",[97,162815,162816,162818,162820,162822,162824],{"class":99,"line":9955},[97,162817,39483],{"class":319},[97,162819,153200],{"class":103},[97,162821,3140],{"class":319},[97,162823,153242],{"class":118},[97,162825,3930],{"class":103},[97,162827,162828],{"class":99,"line":9979},[97,162829,162830],{"class":103},"        withdraw_money()\n",[97,162832,162833,162835,162837,162839,162841],{"class":99,"line":9984},[97,162834,39483],{"class":319},[97,162836,153200],{"class":103},[97,162838,3140],{"class":319},[97,162840,153296],{"class":118},[97,162842,3930],{"class":103},[97,162844,162845,162847,162849,162851],{"class":99,"line":9989},[97,162846,32641],{"class":370},[97,162848,323],{"class":103},[97,162850,153307],{"class":118},[97,162852,329],{"class":103},[97,162854,162855],{"class":99,"line":9994},[97,162856,31817],{"class":319},[97,162858,162859,162861],{"class":99,"line":10003},[97,162860,158136],{"class":319},[97,162862,3930],{"class":103},[97,162864,162865,162867,162869,162871],{"class":99,"line":10008},[97,162866,32641],{"class":370},[97,162868,323],{"class":103},[97,162870,153328],{"class":118},[97,162872,329],{"class":103},[24,162874,162875],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162877,162879],{"id":162878},"_514-易错点","5.14 易错点",[138,162881,162882,162885,162888,162893,162898,162901],{},[70,162883,162884],{},"函数定义后必须调用才会执行。",[70,162886,162887],{},"函数名后面有括号才是调用。",[70,162889,162890,162892],{},[94,162891,17236],{}," 后面的代码不会执行。",[70,162894,162895,162896,28575],{},"没有返回值的函数默认返回 ",[94,162897,95870],{},[70,162899,162900],{},"局部变量不能在函数外部访问。",[70,162902,162903,162904,162906],{},"不要滥用 ",[94,162905,161940],{},"，更好的方式是让函数返回新值。",[24,162908,162909,162910,162912],{},"例如不用 ",[94,162911,161940],{}," 改写存款：",[87,162914,162916],{"className":30568,"code":162915,"language":30570,"meta":92,"style":92},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[94,162917,162918,162927,162938,162942,162946,162954,162967],{"__ignoreMap":92},[97,162919,162920,162922,162924],{"class":99,"line":100},[97,162921,32137],{"class":319},[97,162923,162544],{"class":111},[97,162925,162926],{"class":103},"(balance, money):\n",[97,162928,162929,162931,162934,162936],{"class":99,"line":195},[97,162930,4281],{"class":319},[97,162932,162933],{"class":103}," balance ",[97,162935,801],{"class":319},[97,162937,150289],{"class":103},[97,162939,162940],{"class":99,"line":241},[97,162941,2591],{"emptyLinePlaceholder":249},[97,162943,162944],{"class":99,"line":1387},[97,162945,2591],{"emptyLinePlaceholder":249},[97,162947,162948,162950,162952],{"class":99,"line":1393},[97,162949,162418],{"class":103},[97,162951,115],{"class":319},[97,162953,162423],{"class":370},[97,162955,162956,162958,162960,162963,162965],{"class":99,"line":1407},[97,162957,162418],{"class":103},[97,162959,115],{"class":319},[97,162961,162962],{"class":103}," save_money(balance, ",[97,162964,1914],{"class":370},[97,162966,329],{"class":103},[97,162968,162969,162971],{"class":99,"line":1413},[97,162970,30605],{"class":370},[97,162972,162973],{"class":103},"(balance)\n",[14,162975,162977],{"id":162976},"_515-本章练习","5.15 本章练习",[138,162979,162980,162987,162993,162999,163005],{},[70,162981,162982,162983,162986],{},"定义函数 ",[94,162984,162985],{},"print_student(name, age)","，输出学生信息。",[70,162988,162982,162989,162992],{},[94,162990,162991],{},"get_max(a, b, c)","，返回三个数中的最大值。",[70,162994,162982,162995,162998],{},[94,162996,162997],{},"is_even(num)","，判断一个数是否为偶数。",[70,163000,162982,163001,163004],{},[94,163002,163003],{},"calculate_bmi(weight, height)","，返回 BMI。",[70,163006,163007],{},"把第 4 章的菜单程序拆分成多个函数。",[231,163009,163010],{},"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":92,"searchDepth":195,"depth":195,"links":163012},[163013,163014,163015,163016,163017,163018,163019,163020,163021,163025,163026,163027,163028,163029,163030],{"id":161033,"depth":195,"text":161034},{"id":161074,"depth":195,"text":161075},{"id":161164,"depth":195,"text":161165},{"id":161245,"depth":195,"text":161246},{"id":161378,"depth":195,"text":161379},{"id":161500,"depth":195,"text":161501},{"id":161622,"depth":195,"text":161623},{"id":161699,"depth":195,"text":161700},{"id":161821,"depth":195,"text":161822,"children":163022},[163023,163024],{"id":161825,"depth":241,"text":161826},{"id":161883,"depth":241,"text":161884},{"id":162012,"depth":195,"text":162013},{"id":162138,"depth":195,"text":162139},{"id":162251,"depth":195,"text":162252},{"id":162407,"depth":195,"text":162408},{"id":162878,"depth":195,"text":162879},{"id":162976,"depth":195,"text":162977},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161025,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163037,"title":163038,"body":163039,"description":246,"extension":247,"meta":166083,"navigation":249,"path":166084,"seo":166085,"stem":166086,"__hash__":166087},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163040,"toc":166064},[163041,163044,163048,163051,163054,163158,163161,163165,163168,163248,163251,163255,163258,163318,163321,163357,163360,163375,163379,163452,163455,163510,163513,163583,163586,163670,163680,163738,163742,163787,163790,163816,163819,163925,163929,163932,163974,163977,164041,164044,164048,164051,164112,164115,164145,164148,164186,164190,164193,164202,164205,164329,164332,164373,164377,164380,164391,164431,164434,164449,164454,164457,164524,164527,164617,164621,164624,164672,164675,164702,164704,164734,164737,164757,164760,164791,164794,164827,164831,164834,164858,164861,164885,164888,164912,164916,164919,165049,165052,165132,165135,165210,165214,165217,165267,165270,165312,165315,165339,165341,165365,165368,165423,165426,165492,165496,165499,165502,165540,165543,165596,165599,165645,165648,165681,165684,165688,166007,166011,166040,166044,166061],[10,163042,163038],{"id":163043},"_6-数据容器",[14,163045,163047],{"id":163046},"_61-什么是数据容器","6.1 什么是数据容器",[24,163049,163050],{},"数据容器用于一次保存多个数据。",[24,163052,163053],{},"常见容器：",[457,163055,163056,163073],{},[460,163057,163058],{},[463,163059,163060,163062,163065,163068,163071],{},[466,163061,25961],{},[466,163063,163064],{},"是否有序",[466,163066,163067],{},"是否可变",[466,163069,163070],{},"是否允许重复",[466,163072,27682],{},[504,163074,163075,163093,163109,163124,163141],{},[463,163076,163077,163080,163083,163086,163089],{},[509,163078,163079],{},"list列表",[509,163081,163082],{},"有序",[509,163084,163085],{},"可变",[509,163087,163088],{},"允许",[509,163090,163091],{},[94,163092,155371],{},[463,163094,163095,163098,163100,163103,163105],{},[509,163096,163097],{},"tuple元组",[509,163099,163082],{},[509,163101,163102],{},"不可变",[509,163104,163088],{},[509,163106,163107],{},[94,163108,155384],{},[463,163110,163111,163114,163116,163118,163120],{},[509,163112,163113],{},"str字符串",[509,163115,163082],{},[509,163117,163102],{},[509,163119,163088],{},[509,163121,163122],{},[94,163123,155994],{},[463,163125,163126,163129,163132,163134,163137],{},[509,163127,163128],{},"set集合",[509,163130,163131],{},"无序",[509,163133,163085],{},[509,163135,163136],{},"不允许",[509,163138,163139],{},[94,163140,155409],{},[463,163142,163143,163146,163148,163150,163153],{},[509,163144,163145],{},"dict字典",[509,163147,163082],{},[509,163149,163085],{},[509,163151,163152],{},"key不允许重复",[509,163154,163155],{},[94,163156,163157],{},"{\"name\": \"小明\"}",[24,163159,163160],{},"Python 3.7 之后，字典保持插入顺序。",[14,163162,163164],{"id":163163},"_62-列表list","6.2 列表list",[24,163166,163167],{},"列表用于保存一组有顺序的数据。",[87,163169,163171],{"className":30568,"code":163170,"language":30570,"meta":92,"style":92},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[94,163172,163173,163193,163218,163239],{"__ignoreMap":92},[97,163174,163175,163177,163179,163181,163183,163185,163187,163189,163191],{"class":99,"line":100},[97,163176,160494],{"class":103},[97,163178,115],{"class":319},[97,163180,52410],{"class":103},[97,163182,150002],{"class":118},[97,163184,12626],{"class":103},[97,163186,151050],{"class":118},[97,163188,12626],{"class":103},[97,163190,159845],{"class":118},[97,163192,33436],{"class":103},[97,163194,163195,163198,163200,163202,163204,163206,163208,163210,163212,163214,163216],{"class":99,"line":195},[97,163196,163197],{"class":103},"numbers ",[97,163199,115],{"class":319},[97,163201,52410],{"class":103},[97,163203,537],{"class":370},[97,163205,12626],{"class":103},[97,163207,398],{"class":370},[97,163209,12626],{"class":103},[97,163211,392],{"class":370},[97,163213,12626],{"class":103},[97,163215,613],{"class":370},[97,163217,33436],{"class":103},[97,163219,163220,163223,163225,163227,163229,163231,163233,163235,163237],{"class":99,"line":241},[97,163221,163222],{"class":103},"mixed ",[97,163224,115],{"class":319},[97,163226,52410],{"class":103},[97,163228,150002],{"class":118},[97,163230,12626],{"class":103},[97,163232,970],{"class":370},[97,163234,12626],{"class":103},[97,163236,31666],{"class":370},[97,163238,33436],{"class":103},[97,163240,163241,163244,163246],{"class":99,"line":1387},[97,163242,163243],{"class":103},"empty ",[97,163245,115],{"class":319},[97,163247,52022],{"class":103},[24,163249,163250],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163252,163254],{"id":163253},"_63-列表索引","6.3 列表索引",[24,163256,163257],{},"正向索引从 0 开始：",[87,163259,163261],{"className":30568,"code":163260,"language":30570,"meta":92,"style":92},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[94,163262,163263,163283,163287,163298,163308],{"__ignoreMap":92},[97,163264,163265,163267,163269,163271,163273,163275,163277,163279,163281],{"class":99,"line":100},[97,163266,160494],{"class":103},[97,163268,115],{"class":319},[97,163270,52410],{"class":103},[97,163272,150002],{"class":118},[97,163274,12626],{"class":103},[97,163276,151050],{"class":118},[97,163278,12626],{"class":103},[97,163280,159845],{"class":118},[97,163282,33436],{"class":103},[97,163284,163285],{"class":99,"line":195},[97,163286,2591],{"emptyLinePlaceholder":249},[97,163288,163289,163291,163294,163296],{"class":99,"line":241},[97,163290,30605],{"class":370},[97,163292,163293],{"class":103},"(names[",[97,163295,511],{"class":370},[97,163297,4848],{"class":103},[97,163299,163300,163302,163304,163306],{"class":99,"line":1387},[97,163301,30605],{"class":370},[97,163303,163293],{"class":103},[97,163305,537],{"class":370},[97,163307,4848],{"class":103},[97,163309,163310,163312,163314,163316],{"class":99,"line":1393},[97,163311,30605],{"class":370},[97,163313,163293],{"class":103},[97,163315,398],{"class":370},[97,163317,4848],{"class":103},[24,163319,163320],{},"反向索引从 -1 开始：",[87,163322,163324],{"className":30568,"code":163323,"language":30570,"meta":92,"style":92},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[94,163325,163326,163342],{"__ignoreMap":92},[97,163327,163328,163330,163332,163334,163336,163339],{"class":99,"line":100},[97,163329,30605],{"class":370},[97,163331,163293],{"class":103},[97,163333,852],{"class":319},[97,163335,537],{"class":370},[97,163337,163338],{"class":103},"])  ",[97,163340,163341],{"class":191},"# 小刚\n",[97,163343,163344,163346,163348,163350,163352,163354],{"class":99,"line":195},[97,163345,30605],{"class":370},[97,163347,163293],{"class":103},[97,163349,852],{"class":319},[97,163351,398],{"class":370},[97,163353,163338],{"class":103},[97,163355,163356],{"class":191},"# 小红\n",[24,163358,163359],{},"索引越界会报错：",[87,163361,163363],{"className":30568,"code":163362,"language":30570,"meta":92,"style":92},"print(names[3])\n",[94,163364,163365],{"__ignoreMap":92},[97,163366,163367,163369,163371,163373],{"class":99,"line":100},[97,163368,30605],{"class":370},[97,163370,163293],{"class":103},[97,163372,392],{"class":370},[97,163374,4848],{"class":103},[14,163376,163378],{"id":163377},"_64-列表常用方法","6.4 列表常用方法",[87,163380,163382],{"className":30568,"code":163381,"language":30570,"meta":92,"style":92},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[94,163383,163384,163400,163404,163413,163427,163441,163445],{"__ignoreMap":92},[97,163385,163386,163388,163390,163392,163394,163396,163398],{"class":99,"line":100},[97,163387,160494],{"class":103},[97,163389,115],{"class":319},[97,163391,52410],{"class":103},[97,163393,150002],{"class":118},[97,163395,12626],{"class":103},[97,163397,151050],{"class":118},[97,163399,33436],{"class":103},[97,163401,163402],{"class":99,"line":195},[97,163403,2591],{"emptyLinePlaceholder":249},[97,163405,163406,163409,163411],{"class":99,"line":241},[97,163407,163408],{"class":103},"names.append(",[97,163410,159845],{"class":118},[97,163412,329],{"class":103},[97,163414,163415,163418,163420,163422,163425],{"class":99,"line":1387},[97,163416,163417],{"class":103},"names.insert(",[97,163419,537],{"class":370},[97,163421,12626],{"class":103},[97,163423,163424],{"class":118},"\"小李\"",[97,163426,329],{"class":103},[97,163428,163429,163432,163434,163436,163439],{"class":99,"line":1393},[97,163430,163431],{"class":103},"names.extend([",[97,163433,8874],{"class":118},[97,163435,12626],{"class":103},[97,163437,163438],{"class":118},"\"小赵\"",[97,163440,4848],{"class":103},[97,163442,163443],{"class":99,"line":1407},[97,163444,2591],{"emptyLinePlaceholder":249},[97,163446,163447,163449],{"class":99,"line":1413},[97,163448,30605],{"class":370},[97,163450,163451],{"class":103},"(names)\n",[24,163453,163454],{},"删除元素：",[87,163456,163458],{"className":30568,"code":163457,"language":30570,"meta":92,"style":92},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[94,163459,163460,163469,163479,163493,163505],{"__ignoreMap":92},[97,163461,163462,163465,163467],{"class":99,"line":100},[97,163463,163464],{"class":103},"names.remove(",[97,163466,151050],{"class":118},[97,163468,329],{"class":103},[97,163470,163471,163474,163476],{"class":99,"line":195},[97,163472,163473],{"class":103},"last ",[97,163475,115],{"class":319},[97,163477,163478],{"class":103}," names.pop()\n",[97,163480,163481,163484,163486,163489,163491],{"class":99,"line":241},[97,163482,163483],{"class":103},"first ",[97,163485,115],{"class":319},[97,163487,163488],{"class":103}," names.pop(",[97,163490,511],{"class":370},[97,163492,329],{"class":103},[97,163494,163495,163498,163501,163503],{"class":99,"line":1387},[97,163496,163497],{"class":319},"del",[97,163499,163500],{"class":103}," names[",[97,163502,511],{"class":370},[97,163504,33436],{"class":103},[97,163506,163507],{"class":99,"line":1393},[97,163508,163509],{"class":103},"names.clear()\n",[24,163511,163512],{},"查询和统计：",[87,163514,163516],{"className":30568,"code":163515,"language":30570,"meta":92,"style":92},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[94,163517,163518,163546,163550,163561,163572],{"__ignoreMap":92},[97,163519,163520,163522,163524,163526,163528,163530,163532,163534,163536,163538,163540,163542,163544],{"class":99,"line":100},[97,163521,163197],{"class":103},[97,163523,115],{"class":319},[97,163525,52410],{"class":103},[97,163527,537],{"class":370},[97,163529,12626],{"class":103},[97,163531,398],{"class":370},[97,163533,12626],{"class":103},[97,163535,392],{"class":370},[97,163537,12626],{"class":103},[97,163539,398],{"class":370},[97,163541,12626],{"class":103},[97,163543,613],{"class":370},[97,163545,33436],{"class":103},[97,163547,163548],{"class":99,"line":195},[97,163549,2591],{"emptyLinePlaceholder":249},[97,163551,163552,163554,163557,163559],{"class":99,"line":241},[97,163553,30605],{"class":370},[97,163555,163556],{"class":103},"(numbers.index(",[97,163558,392],{"class":370},[97,163560,30687],{"class":103},[97,163562,163563,163565,163568,163570],{"class":99,"line":1387},[97,163564,30605],{"class":370},[97,163566,163567],{"class":103},"(numbers.count(",[97,163569,398],{"class":370},[97,163571,30687],{"class":103},[97,163573,163574,163576,163578,163580],{"class":99,"line":1393},[97,163575,30605],{"class":370},[97,163577,323],{"class":103},[97,163579,7549],{"class":370},[97,163581,163582],{"class":103},"(numbers))\n",[24,163584,163585],{},"排序：",[87,163587,163589],{"className":30568,"code":163588,"language":30570,"meta":92,"style":92},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[94,163590,163591,163615,163619,163624,163631,163635,163649,163655,163659,163664],{"__ignoreMap":92},[97,163592,163593,163595,163597,163599,163601,163603,163605,163607,163609,163611,163613],{"class":99,"line":100},[97,163594,163197],{"class":103},[97,163596,115],{"class":319},[97,163598,52410],{"class":103},[97,163600,392],{"class":370},[97,163602,12626],{"class":103},[97,163604,537],{"class":370},[97,163606,12626],{"class":103},[97,163608,639],{"class":370},[97,163610,12626],{"class":103},[97,163612,398],{"class":370},[97,163614,33436],{"class":103},[97,163616,163617],{"class":99,"line":195},[97,163618,2591],{"emptyLinePlaceholder":249},[97,163620,163621],{"class":99,"line":241},[97,163622,163623],{"class":103},"numbers.sort()\n",[97,163625,163626,163628],{"class":99,"line":1387},[97,163627,30605],{"class":370},[97,163629,163630],{"class":103},"(numbers)\n",[97,163632,163633],{"class":99,"line":1393},[97,163634,2591],{"emptyLinePlaceholder":249},[97,163636,163637,163640,163643,163645,163647],{"class":99,"line":1407},[97,163638,163639],{"class":103},"numbers.sort(",[97,163641,163642],{"class":5407},"reverse",[97,163644,115],{"class":319},[97,163646,31666],{"class":370},[97,163648,329],{"class":103},[97,163650,163651,163653],{"class":99,"line":1413},[97,163652,30605],{"class":370},[97,163654,163630],{"class":103},[97,163656,163657],{"class":99,"line":1504},[97,163658,2591],{"emptyLinePlaceholder":249},[97,163660,163661],{"class":99,"line":1510},[97,163662,163663],{"class":103},"numbers.reverse()\n",[97,163665,163666,163668],{"class":99,"line":1522},[97,163667,30605],{"class":370},[97,163669,163630],{"class":103},[24,163671,163672,163675,163676,163679],{},[94,163673,163674],{},"sort()"," 会修改原列表，",[94,163677,163678],{},"sorted()"," 返回新列表。",[87,163681,163683],{"className":30568,"code":163682,"language":30570,"meta":92,"style":92},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[94,163684,163685,163709,163721,163725,163731],{"__ignoreMap":92},[97,163686,163687,163689,163691,163693,163695,163697,163699,163701,163703,163705,163707],{"class":99,"line":100},[97,163688,163197],{"class":103},[97,163690,115],{"class":319},[97,163692,52410],{"class":103},[97,163694,392],{"class":370},[97,163696,12626],{"class":103},[97,163698,537],{"class":370},[97,163700,12626],{"class":103},[97,163702,639],{"class":370},[97,163704,12626],{"class":103},[97,163706,398],{"class":370},[97,163708,33436],{"class":103},[97,163710,163711,163714,163716,163719],{"class":99,"line":195},[97,163712,163713],{"class":103},"new_numbers ",[97,163715,115],{"class":319},[97,163717,163718],{"class":370}," sorted",[97,163720,163630],{"class":103},[97,163722,163723],{"class":99,"line":241},[97,163724,2591],{"emptyLinePlaceholder":249},[97,163726,163727,163729],{"class":99,"line":1387},[97,163728,30605],{"class":370},[97,163730,163630],{"class":103},[97,163732,163733,163735],{"class":99,"line":1393},[97,163734,30605],{"class":370},[97,163736,163737],{"class":103},"(new_numbers)\n",[14,163739,163741],{"id":163740},"_65-列表遍历","6.5 列表遍历",[87,163743,163745],{"className":30568,"code":163744,"language":30570,"meta":92,"style":92},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[94,163746,163747,163767,163771,163781],{"__ignoreMap":92},[97,163748,163749,163751,163753,163755,163757,163759,163761,163763,163765],{"class":99,"line":100},[97,163750,160494],{"class":103},[97,163752,115],{"class":319},[97,163754,52410],{"class":103},[97,163756,150002],{"class":118},[97,163758,12626],{"class":103},[97,163760,151050],{"class":118},[97,163762,12626],{"class":103},[97,163764,159845],{"class":118},[97,163766,33436],{"class":103},[97,163768,163769],{"class":99,"line":195},[97,163770,2591],{"emptyLinePlaceholder":249},[97,163772,163773,163775,163777,163779],{"class":99,"line":241},[97,163774,3216],{"class":319},[97,163776,160530],{"class":103},[97,163778,26233],{"class":319},[97,163780,160535],{"class":103},[97,163782,163783,163785],{"class":99,"line":1387},[97,163784,31489],{"class":370},[97,163786,150774],{"class":103},[24,163788,163789],{},"需要索引时：",[87,163791,163793],{"className":30568,"code":163792,"language":30570,"meta":92,"style":92},"for index, name in enumerate(names):\n    print(index, name)\n",[94,163794,163795,163809],{"__ignoreMap":92},[97,163796,163797,163799,163802,163804,163806],{"class":99,"line":100},[97,163798,3216],{"class":319},[97,163800,163801],{"class":103}," index, name ",[97,163803,26233],{"class":319},[97,163805,31796],{"class":370},[97,163807,163808],{"class":103},"(names):\n",[97,163810,163811,163813],{"class":99,"line":195},[97,163812,31489],{"class":370},[97,163814,163815],{"class":103},"(index, name)\n",[24,163817,163818],{},"统计总分：",[87,163820,163822],{"className":30568,"code":163821,"language":30570,"meta":92,"style":92},"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",[94,163823,163824,163849,163857,163861,163872,163880,163884,163901],{"__ignoreMap":92},[97,163825,163826,163829,163831,163833,163835,163837,163839,163841,163843,163845,163847],{"class":99,"line":100},[97,163827,163828],{"class":103},"scores ",[97,163830,115],{"class":319},[97,163832,52410],{"class":103},[97,163834,1182],{"class":370},[97,163836,12626],{"class":103},[97,163838,1056],{"class":370},[97,163840,12626],{"class":103},[97,163842,574],{"class":370},[97,163844,12626],{"class":103},[97,163846,881],{"class":370},[97,163848,33436],{"class":103},[97,163850,163851,163853,163855],{"class":99,"line":195},[97,163852,157374],{"class":103},[97,163854,115],{"class":319},[97,163856,47523],{"class":370},[97,163858,163859],{"class":99,"line":241},[97,163860,2591],{"emptyLinePlaceholder":249},[97,163862,163863,163865,163867,163869],{"class":99,"line":1387},[97,163864,3216],{"class":319},[97,163866,157897],{"class":103},[97,163868,26233],{"class":319},[97,163870,163871],{"class":103}," scores:\n",[97,163873,163874,163876,163878],{"class":99,"line":1393},[97,163875,159421],{"class":103},[97,163877,9668],{"class":319},[97,163879,1771],{"class":103},[97,163881,163882],{"class":99,"line":1407},[97,163883,2591],{"emptyLinePlaceholder":249},[97,163885,163886,163889,163891,163894,163896,163898],{"class":99,"line":1413},[97,163887,163888],{"class":103},"avg ",[97,163890,115],{"class":319},[97,163892,163893],{"class":103}," total ",[97,163895,904],{"class":319},[97,163897,7522],{"class":370},[97,163899,163900],{"class":103},"(scores)\n",[97,163902,163903,163905,163907,163909,163912,163914,163917,163919,163921,163923],{"class":99,"line":1504},[97,163904,30605],{"class":370},[97,163906,323],{"class":103},[97,163908,374],{"class":319},[97,163910,163911],{"class":118},"\"平均分:",[97,163913,1216],{"class":370},[97,163915,163916],{"class":103},"avg",[97,163918,157273],{"class":319},[97,163920,1265],{"class":370},[97,163922,571],{"class":118},[97,163924,329],{"class":103},[14,163926,163928],{"id":163927},"_66-元组tuple","6.6 元组tuple",[24,163930,163931],{},"元组和列表类似，但不可修改。",[87,163933,163935],{"className":30568,"code":163934,"language":30570,"meta":92,"style":92},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[94,163936,163937,163954],{"__ignoreMap":92},[97,163938,163939,163942,163944,163946,163948,163950,163952],{"class":99,"line":100},[97,163940,163941],{"class":103},"point ",[97,163943,115],{"class":319},[97,163945,1850],{"class":103},[97,163947,766],{"class":370},[97,163949,12626],{"class":103},[97,163951,1020],{"class":370},[97,163953,329],{"class":103},[97,163955,163956,163958,163960,163962,163964,163966,163968,163970,163972],{"class":99,"line":195},[97,163957,116498],{"class":103},[97,163959,115],{"class":319},[97,163961,1850],{"class":103},[97,163963,150002],{"class":118},[97,163965,12626],{"class":103},[97,163967,970],{"class":370},[97,163969,12626],{"class":103},[97,163971,69453],{"class":118},[97,163973,329],{"class":103},[24,163975,163976],{},"单元素元组必须加逗号：",[87,163978,163980],{"className":30568,"code":163979,"language":30570,"meta":92,"style":92},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[94,163981,163982,163996,164009,164013,164027],{"__ignoreMap":92},[97,163983,163984,163987,163989,163991,163993],{"class":99,"line":100},[97,163985,163986],{"class":103},"t1 ",[97,163988,115],{"class":319},[97,163990,1850],{"class":103},[97,163992,766],{"class":370},[97,163994,163995],{"class":103},",)\n",[97,163997,163998,164001,164003,164005,164007],{"class":99,"line":195},[97,163999,164000],{"class":103},"t2 ",[97,164002,115],{"class":319},[97,164004,1850],{"class":103},[97,164006,766],{"class":370},[97,164008,329],{"class":103},[97,164010,164011],{"class":99,"line":241},[97,164012,2591],{"emptyLinePlaceholder":249},[97,164014,164015,164017,164019,164021,164024],{"class":99,"line":1387},[97,164016,30605],{"class":370},[97,164018,323],{"class":103},[97,164020,103291],{"class":370},[97,164022,164023],{"class":103},"(t1))  ",[97,164025,164026],{"class":191},"# tuple\n",[97,164028,164029,164031,164033,164035,164038],{"class":99,"line":1393},[97,164030,30605],{"class":370},[97,164032,323],{"class":103},[97,164034,103291],{"class":370},[97,164036,164037],{"class":103},"(t2))  ",[97,164039,164040],{"class":191},"# int\n",[24,164042,164043],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164045,164047],{"id":164046},"_67-字符串str","6.7 字符串str",[24,164049,164050],{},"字符串也是序列，可以索引、切片和遍历。",[87,164052,164054],{"className":30568,"code":164053,"language":30570,"meta":92,"style":92},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[94,164055,164056,164064,164068,164079,164091,164095,164106],{"__ignoreMap":92},[97,164057,164058,164060,164062],{"class":99,"line":100},[97,164059,156558],{"class":103},[97,164061,115],{"class":319},[97,164063,159795],{"class":118},[97,164065,164066],{"class":99,"line":195},[97,164067,2591],{"emptyLinePlaceholder":249},[97,164069,164070,164072,164075,164077],{"class":99,"line":241},[97,164071,30605],{"class":370},[97,164073,164074],{"class":103},"(text[",[97,164076,511],{"class":370},[97,164078,4848],{"class":103},[97,164080,164081,164083,164085,164087,164089],{"class":99,"line":1387},[97,164082,30605],{"class":370},[97,164084,164074],{"class":103},[97,164086,852],{"class":319},[97,164088,537],{"class":370},[97,164090,4848],{"class":103},[97,164092,164093],{"class":99,"line":1393},[97,164094,2591],{"emptyLinePlaceholder":249},[97,164096,164097,164099,164101,164103],{"class":99,"line":1407},[97,164098,3216],{"class":319},[97,164100,159806],{"class":103},[97,164102,26233],{"class":319},[97,164104,164105],{"class":103}," text:\n",[97,164107,164108,164110],{"class":99,"line":1413},[97,164109,31489],{"class":370},[97,164111,159817],{"class":103},[24,164113,164114],{},"字符串不可变：",[87,164116,164118],{"className":30568,"code":164117,"language":30570,"meta":92,"style":92},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[94,164119,164120,164128],{"__ignoreMap":92},[97,164121,164122,164124,164126],{"class":99,"line":100},[97,164123,156558],{"class":103},[97,164125,115],{"class":319},[97,164127,159795],{"class":118},[97,164129,164130,164133,164135,164137,164139,164142],{"class":99,"line":195},[97,164131,164132],{"class":103},"text[",[97,164134,511],{"class":370},[97,164136,4634],{"class":103},[97,164138,115],{"class":319},[97,164140,164141],{"class":118}," \"P\"",[97,164143,164144],{"class":191},"  # 报错\n",[24,164146,164147],{},"如果要得到新字符串：",[87,164149,164151],{"className":30568,"code":164150,"language":30570,"meta":92,"style":92},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[94,164152,164153,164161,164179],{"__ignoreMap":92},[97,164154,164155,164157,164159],{"class":99,"line":100},[97,164156,156558],{"class":103},[97,164158,115],{"class":319},[97,164160,159795],{"class":118},[97,164162,164163,164165,164167,164169,164171,164174,164176],{"class":99,"line":195},[97,164164,156558],{"class":103},[97,164166,115],{"class":319},[97,164168,164141],{"class":118},[97,164170,45756],{"class":319},[97,164172,164173],{"class":103}," text[",[97,164175,537],{"class":370},[97,164177,164178],{"class":103},":]\n",[97,164180,164181,164183],{"class":99,"line":241},[97,164182,30605],{"class":370},[97,164184,164185],{"class":103},"(text)\n",[14,164187,164189],{"id":164188},"_68-切片","6.8 切片",[24,164191,164192],{},"切片用于从序列中取一部分。",[87,164194,164196],{"className":30568,"code":164195,"language":30570,"meta":92,"style":92},"序列[开始:结束:步长]\n",[94,164197,164198],{"__ignoreMap":92},[97,164199,164200],{"class":99,"line":100},[97,164201,164195],{"class":103},[24,164203,164204],{},"结束位置不包含。",[87,164206,164208],{"className":30568,"code":164207,"language":30570,"meta":92,"style":92},"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",[94,164209,164210,164247,164251,164270,164285,164299,164313],{"__ignoreMap":92},[97,164211,164212,164215,164217,164219,164221,164223,164225,164227,164229,164231,164233,164235,164237,164239,164241,164243,164245],{"class":99,"line":100},[97,164213,164214],{"class":103},"nums ",[97,164216,115],{"class":319},[97,164218,52410],{"class":103},[97,164220,511],{"class":370},[97,164222,12626],{"class":103},[97,164224,537],{"class":370},[97,164226,12626],{"class":103},[97,164228,398],{"class":370},[97,164230,12626],{"class":103},[97,164232,392],{"class":370},[97,164234,12626],{"class":103},[97,164236,613],{"class":370},[97,164238,12626],{"class":103},[97,164240,639],{"class":370},[97,164242,12626],{"class":103},[97,164244,664],{"class":370},[97,164246,33436],{"class":103},[97,164248,164249],{"class":99,"line":195},[97,164250,2591],{"emptyLinePlaceholder":249},[97,164252,164253,164255,164258,164260,164262,164264,164267],{"class":99,"line":241},[97,164254,30605],{"class":370},[97,164256,164257],{"class":103},"(nums[",[97,164259,537],{"class":370},[97,164261,1179],{"class":103},[97,164263,613],{"class":370},[97,164265,164266],{"class":103},"])    ",[97,164268,164269],{"class":191},"# [1, 2, 3]\n",[97,164271,164272,164274,164277,164279,164282],{"class":99,"line":1387},[97,164273,30605],{"class":370},[97,164275,164276],{"class":103},"(nums[:",[97,164278,392],{"class":370},[97,164280,164281],{"class":103},"])     ",[97,164283,164284],{"class":191},"# [0, 1, 2]\n",[97,164286,164287,164289,164291,164293,164296],{"class":99,"line":1393},[97,164288,30605],{"class":370},[97,164290,164257],{"class":103},[97,164292,392],{"class":370},[97,164294,164295],{"class":103},":])     ",[97,164297,164298],{"class":191},"# [3, 4, 5, 6]\n",[97,164300,164301,164303,164306,164308,164310],{"class":99,"line":1407},[97,164302,30605],{"class":370},[97,164304,164305],{"class":103},"(nums[::",[97,164307,398],{"class":370},[97,164309,164266],{"class":103},[97,164311,164312],{"class":191},"# [0, 2, 4, 6]\n",[97,164314,164315,164317,164319,164321,164323,164326],{"class":99,"line":1413},[97,164316,30605],{"class":370},[97,164318,164305],{"class":103},[97,164320,852],{"class":319},[97,164322,537],{"class":370},[97,164324,164325],{"class":103},"])   ",[97,164327,164328],{"class":191},"# 反转\n",[24,164330,164331],{},"字符串切片：",[87,164333,164335],{"className":30568,"code":164334,"language":30570,"meta":92,"style":92},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[94,164336,164337,164346,164360],{"__ignoreMap":92},[97,164338,164339,164341,164343],{"class":99,"line":100},[97,164340,156558],{"class":103},[97,164342,115],{"class":319},[97,164344,164345],{"class":118}," \"abcdef\"\n",[97,164347,164348,164350,164352,164354,164356,164358],{"class":99,"line":195},[97,164349,30605],{"class":370},[97,164351,164074],{"class":103},[97,164353,537],{"class":370},[97,164355,1179],{"class":103},[97,164357,613],{"class":370},[97,164359,4848],{"class":103},[97,164361,164362,164364,164367,164369,164371],{"class":99,"line":241},[97,164363,30605],{"class":370},[97,164365,164366],{"class":103},"(text[::",[97,164368,852],{"class":319},[97,164370,537],{"class":370},[97,164372,4848],{"class":103},[14,164374,164376],{"id":164375},"_69-集合set","6.9 集合set",[24,164378,164379],{},"集合特点：",[138,164381,164382,164385,164388],{},[70,164383,164384],{},"无序。",[70,164386,164387],{},"元素不重复。",[70,164389,164390],{},"可以做交集、并集、差集。",[87,164392,164394],{"className":30568,"code":164393,"language":30570,"meta":92,"style":92},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[94,164395,164396,164424],{"__ignoreMap":92},[97,164397,164398,164400,164402,164404,164406,164408,164410,164412,164414,164416,164418,164420,164422],{"class":99,"line":100},[97,164399,164214],{"class":103},[97,164401,115],{"class":319},[97,164403,4639],{"class":103},[97,164405,537],{"class":370},[97,164407,12626],{"class":103},[97,164409,398],{"class":370},[97,164411,12626],{"class":103},[97,164413,392],{"class":370},[97,164415,12626],{"class":103},[97,164417,392],{"class":370},[97,164419,12626],{"class":103},[97,164421,613],{"class":370},[97,164423,1757],{"class":103},[97,164425,164426,164428],{"class":99,"line":195},[97,164427,30605],{"class":370},[97,164429,164430],{"class":103},"(nums)\n",[24,164432,164433],{},"创建空集合：",[87,164435,164437],{"className":30568,"code":164436,"language":30570,"meta":92,"style":92},"s = set()\n",[94,164438,164439],{"__ignoreMap":92},[97,164440,164441,164443,164445,164447],{"class":99,"line":100},[97,164442,10770],{"class":103},[97,164444,115],{"class":319},[97,164446,119906],{"class":370},[97,164448,2167],{"class":103},[24,164450,9216,164451,164453],{},[94,164452,32649],{}," 是空字典，不是空集合。",[24,164455,164456],{},"集合常用操作：",[87,164458,164460],{"className":30568,"code":164459,"language":30570,"meta":92,"style":92},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[94,164461,164462,164482,164486,164495,164504,164513],{"__ignoreMap":92},[97,164463,164464,164466,164468,164470,164472,164474,164476,164478,164480],{"class":99,"line":100},[97,164465,10770],{"class":103},[97,164467,115],{"class":319},[97,164469,4639],{"class":103},[97,164471,537],{"class":370},[97,164473,12626],{"class":103},[97,164475,398],{"class":370},[97,164477,12626],{"class":103},[97,164479,392],{"class":370},[97,164481,1757],{"class":103},[97,164483,164484],{"class":99,"line":195},[97,164485,2591],{"emptyLinePlaceholder":249},[97,164487,164488,164491,164493],{"class":99,"line":241},[97,164489,164490],{"class":103},"s.add(",[97,164492,613],{"class":370},[97,164494,329],{"class":103},[97,164496,164497,164500,164502],{"class":99,"line":1387},[97,164498,164499],{"class":103},"s.remove(",[97,164501,398],{"class":370},[97,164503,329],{"class":103},[97,164505,164506,164509,164511],{"class":99,"line":1393},[97,164507,164508],{"class":103},"s.discard(",[97,164510,766],{"class":370},[97,164512,329],{"class":103},[97,164514,164515,164517,164519,164521],{"class":99,"line":1407},[97,164516,30605],{"class":370},[97,164518,323],{"class":103},[97,164520,7549],{"class":370},[97,164522,164523],{"class":103},"(s))\n",[24,164525,164526],{},"交并差：",[87,164528,164530],{"className":30568,"code":164529,"language":30570,"meta":92,"style":92},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[94,164531,164532,164552,164572,164576,164591,164604],{"__ignoreMap":92},[97,164533,164534,164536,164538,164540,164542,164544,164546,164548,164550],{"class":99,"line":100},[97,164535,11110],{"class":103},[97,164537,115],{"class":319},[97,164539,4639],{"class":103},[97,164541,537],{"class":370},[97,164543,12626],{"class":103},[97,164545,398],{"class":370},[97,164547,12626],{"class":103},[97,164549,392],{"class":370},[97,164551,1757],{"class":103},[97,164553,164554,164556,164558,164560,164562,164564,164566,164568,164570],{"class":99,"line":195},[97,164555,11136],{"class":103},[97,164557,115],{"class":319},[97,164559,4639],{"class":103},[97,164561,392],{"class":370},[97,164563,12626],{"class":103},[97,164565,613],{"class":370},[97,164567,12626],{"class":103},[97,164569,639],{"class":370},[97,164571,1757],{"class":103},[97,164573,164574],{"class":99,"line":241},[97,164575,2591],{"emptyLinePlaceholder":249},[97,164577,164578,164580,164583,164585,164588],{"class":99,"line":1387},[97,164579,30605],{"class":370},[97,164581,164582],{"class":103},"(a ",[97,164584,673],{"class":319},[97,164586,164587],{"class":103}," b)  ",[97,164589,164590],{"class":191},"# 交集\n",[97,164592,164593,164595,164597,164599,164601],{"class":99,"line":1393},[97,164594,30605],{"class":370},[97,164596,164582],{"class":103},[97,164598,1240],{"class":319},[97,164600,164587],{"class":103},[97,164602,164603],{"class":191},"# 并集\n",[97,164605,164606,164608,164610,164612,164614],{"class":99,"line":1407},[97,164607,30605],{"class":370},[97,164609,164582],{"class":103},[97,164611,852],{"class":319},[97,164613,164587],{"class":103},[97,164615,164616],{"class":191},"# 差集\n",[14,164618,164620],{"id":164619},"_610-字典dict","6.10 字典dict",[24,164622,164623],{},"字典通过 key-value 保存数据。",[87,164625,164627],{"className":30568,"code":164626,"language":30570,"meta":92,"style":92},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[94,164628,164629,164637,164647,164658,164668],{"__ignoreMap":92},[97,164630,164631,164633,164635],{"class":99,"line":100},[97,164632,149595],{"class":103},[97,164634,115],{"class":319},[97,164636,15762],{"class":103},[97,164638,164639,164641,164643,164645],{"class":99,"line":195},[97,164640,147134],{"class":118},[97,164642,51621],{"class":103},[97,164644,150002],{"class":118},[97,164646,31656],{"class":103},[97,164648,164649,164652,164654,164656],{"class":99,"line":241},[97,164650,164651],{"class":118},"    \"age\"",[97,164653,51621],{"class":103},[97,164655,970],{"class":370},[97,164657,31656],{"class":103},[97,164659,164660,164663,164665],{"class":99,"line":1387},[97,164661,164662],{"class":118},"    \"score\"",[97,164664,51621],{"class":103},[97,164666,164667],{"class":370},"95\n",[97,164669,164670],{"class":99,"line":1393},[97,164671,1757],{"class":103},[24,164673,164674],{},"获取值：",[87,164676,164678],{"className":30568,"code":164677,"language":30570,"meta":92,"style":92},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[94,164679,164680,164691],{"__ignoreMap":92},[97,164681,164682,164684,164687,164689],{"class":99,"line":100},[97,164683,30605],{"class":370},[97,164685,164686],{"class":103},"(student[",[97,164688,62863],{"class":118},[97,164690,4848],{"class":103},[97,164692,164693,164695,164698,164700],{"class":99,"line":195},[97,164694,30605],{"class":370},[97,164696,164697],{"class":103},"(student.get(",[97,164699,62863],{"class":118},[97,164701,30687],{"class":103},[24,164703,15578],{},[87,164705,164707],{"className":30568,"code":164706,"language":30570,"meta":92,"style":92},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[94,164708,164709,164722],{"__ignoreMap":92},[97,164710,164711,164713,164716,164719],{"class":99,"line":100},[97,164712,152973],{"class":103},[97,164714,164715],{"class":118},"\"address\"",[97,164717,164718],{"class":103},"]     ",[97,164720,164721],{"class":191},"# key不存在会报错\n",[97,164723,164724,164727,164729,164731],{"class":99,"line":195},[97,164725,164726],{"class":103},"student.get(",[97,164728,164715],{"class":118},[97,164730,13905],{"class":103},[97,164732,164733],{"class":191},"# key不存在返回None\n",[24,164735,164736],{},"设置默认值：",[87,164738,164740],{"className":30568,"code":164739,"language":30570,"meta":92,"style":92},"print(student.get(\"address\", \"未知\"))\n",[94,164741,164742],{"__ignoreMap":92},[97,164743,164744,164746,164748,164750,164752,164755],{"class":99,"line":100},[97,164745,30605],{"class":370},[97,164747,164697],{"class":103},[97,164749,164715],{"class":118},[97,164751,12626],{"class":103},[97,164753,164754],{"class":118},"\"未知\"",[97,164756,30687],{"class":103},[24,164758,164759],{},"新增和修改：",[87,164761,164763],{"className":30568,"code":164762,"language":30570,"meta":92,"style":92},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[94,164764,164765,164778],{"__ignoreMap":92},[97,164766,164767,164769,164771,164773,164775],{"class":99,"line":100},[97,164768,152973],{"class":103},[97,164770,69308],{"class":118},[97,164772,4634],{"class":103},[97,164774,115],{"class":319},[97,164776,164777],{"class":370}," 19\n",[97,164779,164780,164782,164784,164786,164788],{"class":99,"line":195},[97,164781,152973],{"class":103},[97,164783,164715],{"class":118},[97,164785,4634],{"class":103},[97,164787,115],{"class":319},[97,164789,164790],{"class":118}," \"北京\"\n",[24,164792,164793],{},"删除：",[87,164795,164797],{"className":30568,"code":164796,"language":30570,"meta":92,"style":92},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[94,164798,164799,164812,164822],{"__ignoreMap":92},[97,164800,164801,164803,164805,164808,164810],{"class":99,"line":100},[97,164802,155472],{"class":103},[97,164804,115],{"class":319},[97,164806,164807],{"class":103}," student.pop(",[97,164809,151586],{"class":118},[97,164811,329],{"class":103},[97,164813,164814,164816,164818,164820],{"class":99,"line":195},[97,164815,163497],{"class":319},[97,164817,152263],{"class":103},[97,164819,69308],{"class":118},[97,164821,33436],{"class":103},[97,164823,164824],{"class":99,"line":241},[97,164825,164826],{"class":103},"student.clear()\n",[14,164828,164830],{"id":164829},"_611-字典遍历","6.11 字典遍历",[24,164832,164833],{},"遍历 key：",[87,164835,164837],{"className":30568,"code":164836,"language":30570,"meta":92,"style":92},"for key in student:\n    print(key, student[key])\n",[94,164838,164839,164851],{"__ignoreMap":92},[97,164840,164841,164843,164846,164848],{"class":99,"line":100},[97,164842,3216],{"class":319},[97,164844,164845],{"class":103}," key ",[97,164847,26233],{"class":319},[97,164849,164850],{"class":103}," student:\n",[97,164852,164853,164855],{"class":99,"line":195},[97,164854,31489],{"class":370},[97,164856,164857],{"class":103},"(key, student[key])\n",[24,164859,164860],{},"遍历 value：",[87,164862,164864],{"className":30568,"code":164863,"language":30570,"meta":92,"style":92},"for value in student.values():\n    print(value)\n",[94,164865,164866,164878],{"__ignoreMap":92},[97,164867,164868,164870,164873,164875],{"class":99,"line":100},[97,164869,3216],{"class":319},[97,164871,164872],{"class":103}," value ",[97,164874,26233],{"class":319},[97,164876,164877],{"class":103}," student.values():\n",[97,164879,164880,164882],{"class":99,"line":195},[97,164881,31489],{"class":370},[97,164883,164884],{"class":103},"(value)\n",[24,164886,164887],{},"遍历 key 和 value：",[87,164889,164891],{"className":30568,"code":164890,"language":30570,"meta":92,"style":92},"for key, value in student.items():\n    print(key, value)\n",[94,164892,164893,164905],{"__ignoreMap":92},[97,164894,164895,164897,164900,164902],{"class":99,"line":100},[97,164896,3216],{"class":319},[97,164898,164899],{"class":103}," key, value ",[97,164901,26233],{"class":319},[97,164903,164904],{"class":103}," student.items():\n",[97,164906,164907,164909],{"class":99,"line":195},[97,164908,31489],{"class":370},[97,164910,164911],{"class":103},"(key, value)\n",[14,164913,164915],{"id":164914},"_612-嵌套容器","6.12 嵌套容器",[24,164917,164918],{},"列表中保存字典，是项目中最常见的结构之一。",[87,164920,164922],{"className":30568,"code":164921,"language":30570,"meta":92,"style":92},"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",[94,164923,164924,164932,164960,164988,165016,165020,165024,165034],{"__ignoreMap":92},[97,164925,164926,164928,164930],{"class":99,"line":100},[97,164927,159830],{"class":103},[97,164929,115],{"class":319},[97,164931,55631],{"class":103},[97,164933,164934,164936,164938,164940,164942,164944,164946,164948,164950,164952,164954,164956,164958],{"class":99,"line":195},[97,164935,148499],{"class":103},[97,164937,62863],{"class":118},[97,164939,51621],{"class":103},[97,164941,150002],{"class":118},[97,164943,12626],{"class":103},[97,164945,69308],{"class":118},[97,164947,51621],{"class":103},[97,164949,970],{"class":370},[97,164951,12626],{"class":103},[97,164953,151586],{"class":118},[97,164955,51621],{"class":103},[97,164957,1308],{"class":370},[97,164959,5121],{"class":103},[97,164961,164962,164964,164966,164968,164970,164972,164974,164976,164978,164980,164982,164984,164986],{"class":99,"line":241},[97,164963,148499],{"class":103},[97,164965,62863],{"class":118},[97,164967,51621],{"class":103},[97,164969,151050],{"class":118},[97,164971,12626],{"class":103},[97,164973,69308],{"class":118},[97,164975,51621],{"class":103},[97,164977,945],{"class":370},[97,164979,12626],{"class":103},[97,164981,151586],{"class":118},[97,164983,51621],{"class":103},[97,164985,1131],{"class":370},[97,164987,5121],{"class":103},[97,164989,164990,164992,164994,164996,164998,165000,165002,165004,165006,165008,165010,165012,165014],{"class":99,"line":1387},[97,164991,148499],{"class":103},[97,164993,62863],{"class":118},[97,164995,51621],{"class":103},[97,164997,159845],{"class":118},[97,164999,12626],{"class":103},[97,165001,69308],{"class":118},[97,165003,51621],{"class":103},[97,165005,995],{"class":370},[97,165007,12626],{"class":103},[97,165009,151586],{"class":118},[97,165011,51621],{"class":103},[97,165013,726],{"class":370},[97,165015,5121],{"class":103},[97,165017,165018],{"class":99,"line":1393},[97,165019,33436],{"class":103},[97,165021,165022],{"class":99,"line":1407},[97,165023,2591],{"emptyLinePlaceholder":249},[97,165025,165026,165028,165030,165032],{"class":99,"line":1413},[97,165027,3216],{"class":319},[97,165029,152251],{"class":103},[97,165031,26233],{"class":319},[97,165033,152256],{"class":103},[97,165035,165036,165038,165040,165042,165045,165047],{"class":99,"line":1504},[97,165037,31489],{"class":370},[97,165039,164686],{"class":103},[97,165041,62863],{"class":118},[97,165043,165044],{"class":103},"], student[",[97,165046,151586],{"class":118},[97,165048,4848],{"class":103},[24,165050,165051],{},"统计平均分：",[87,165053,165055],{"className":30568,"code":165054,"language":30570,"meta":92,"style":92},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[94,165056,165057,165065,165069,165079,165091,165095,165110],{"__ignoreMap":92},[97,165058,165059,165061,165063],{"class":99,"line":100},[97,165060,157374],{"class":103},[97,165062,115],{"class":319},[97,165064,47523],{"class":370},[97,165066,165067],{"class":99,"line":195},[97,165068,2591],{"emptyLinePlaceholder":249},[97,165070,165071,165073,165075,165077],{"class":99,"line":241},[97,165072,3216],{"class":319},[97,165074,152251],{"class":103},[97,165076,26233],{"class":319},[97,165078,152256],{"class":103},[97,165080,165081,165083,165085,165087,165089],{"class":99,"line":1387},[97,165082,159421],{"class":103},[97,165084,9668],{"class":319},[97,165086,152263],{"class":103},[97,165088,151586],{"class":118},[97,165090,33436],{"class":103},[97,165092,165093],{"class":99,"line":1393},[97,165094,2591],{"emptyLinePlaceholder":249},[97,165096,165097,165099,165101,165103,165105,165107],{"class":99,"line":1407},[97,165098,163888],{"class":103},[97,165100,115],{"class":319},[97,165102,163893],{"class":103},[97,165104,904],{"class":319},[97,165106,7522],{"class":370},[97,165108,165109],{"class":103},"(students)\n",[97,165111,165112,165114,165116,165118,165120,165122,165124,165126,165128,165130],{"class":99,"line":1413},[97,165113,30605],{"class":370},[97,165115,323],{"class":103},[97,165117,374],{"class":319},[97,165119,163911],{"class":118},[97,165121,1216],{"class":370},[97,165123,163916],{"class":103},[97,165125,157273],{"class":319},[97,165127,1265],{"class":370},[97,165129,571],{"class":118},[97,165131,329],{"class":103},[24,165133,165134],{},"查找学生：",[87,165136,165138],{"className":30568,"code":165137,"language":30570,"meta":92,"style":92},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[94,165139,165140,165155,165159,165169,165183,165189,165193,165199],{"__ignoreMap":92},[97,165141,165142,165144,165146,165148,165150,165153],{"class":99,"line":100},[97,165143,111762],{"class":103},[97,165145,115],{"class":319},[97,165147,60789],{"class":370},[97,165149,323],{"class":103},[97,165151,165152],{"class":118},"\"请输入学生姓名:\"",[97,165154,329],{"class":103},[97,165156,165157],{"class":99,"line":195},[97,165158,2591],{"emptyLinePlaceholder":249},[97,165160,165161,165163,165165,165167],{"class":99,"line":241},[97,165162,3216],{"class":319},[97,165164,152251],{"class":103},[97,165166,26233],{"class":319},[97,165168,152256],{"class":103},[97,165170,165171,165173,165175,165177,165179,165181],{"class":99,"line":1387},[97,165172,3292],{"class":319},[97,165174,152263],{"class":103},[97,165176,62863],{"class":118},[97,165178,4634],{"class":103},[97,165180,3140],{"class":319},[97,165182,160546],{"class":103},[97,165184,165185,165187],{"class":99,"line":1393},[97,165186,32641],{"class":370},[97,165188,150156],{"class":103},[97,165190,165191],{"class":99,"line":1407},[97,165192,31817],{"class":319},[97,165194,165195,165197],{"class":99,"line":1413},[97,165196,1893],{"class":319},[97,165198,3930],{"class":103},[97,165200,165201,165203,165205,165208],{"class":99,"line":1504},[97,165202,31489],{"class":370},[97,165204,323],{"class":103},[97,165206,165207],{"class":118},"\"没有找到\"",[97,165209,329],{"class":103},[14,165211,165213],{"id":165212},"_613-容器通用操作","6.13 容器通用操作",[24,165215,165216],{},"长度：",[87,165218,165220],{"className":30568,"code":165219,"language":30570,"meta":92,"style":92},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[94,165221,165222,165241,165251],{"__ignoreMap":92},[97,165223,165224,165226,165229,165231,165233,165235,165237,165239],{"class":99,"line":100},[97,165225,7549],{"class":370},[97,165227,165228],{"class":103},"([",[97,165230,537],{"class":370},[97,165232,12626],{"class":103},[97,165234,398],{"class":370},[97,165236,12626],{"class":103},[97,165238,392],{"class":370},[97,165240,4848],{"class":103},[97,165242,165243,165245,165247,165249],{"class":99,"line":195},[97,165244,7549],{"class":370},[97,165246,323],{"class":103},[97,165248,155994],{"class":118},[97,165250,329],{"class":103},[97,165252,165253,165255,165258,165260,165262,165264],{"class":99,"line":241},[97,165254,7549],{"class":370},[97,165256,165257],{"class":103},"({",[97,165259,62863],{"class":118},[97,165261,51621],{"class":103},[97,165263,150002],{"class":118},[97,165265,165266],{"class":103},"})\n",[24,165268,165269],{},"最大最小：",[87,165271,165273],{"className":30568,"code":165272,"language":30570,"meta":92,"style":92},"max([1, 2, 3])\nmin([1, 2, 3])\n",[94,165274,165275,165293],{"__ignoreMap":92},[97,165276,165277,165279,165281,165283,165285,165287,165289,165291],{"class":99,"line":100},[97,165278,6206],{"class":370},[97,165280,165228],{"class":103},[97,165282,537],{"class":370},[97,165284,12626],{"class":103},[97,165286,398],{"class":370},[97,165288,12626],{"class":103},[97,165290,392],{"class":370},[97,165292,4848],{"class":103},[97,165294,165295,165298,165300,165302,165304,165306,165308,165310],{"class":99,"line":195},[97,165296,165297],{"class":370},"min",[97,165299,165228],{"class":103},[97,165301,537],{"class":370},[97,165303,12626],{"class":103},[97,165305,398],{"class":370},[97,165307,12626],{"class":103},[97,165309,392],{"class":370},[97,165311,4848],{"class":103},[24,165313,165314],{},"求和：",[87,165316,165318],{"className":30568,"code":165317,"language":30570,"meta":92,"style":92},"sum([1, 2, 3])\n",[94,165319,165320],{"__ignoreMap":92},[97,165321,165322,165325,165327,165329,165331,165333,165335,165337],{"class":99,"line":100},[97,165323,165324],{"class":370},"sum",[97,165326,165228],{"class":103},[97,165328,537],{"class":370},[97,165330,12626],{"class":103},[97,165332,398],{"class":370},[97,165334,12626],{"class":103},[97,165336,392],{"class":370},[97,165338,4848],{"class":103},[24,165340,163585],{},[87,165342,165344],{"className":30568,"code":165343,"language":30570,"meta":92,"style":92},"sorted([3, 1, 2])\n",[94,165345,165346],{"__ignoreMap":92},[97,165347,165348,165351,165353,165355,165357,165359,165361,165363],{"class":99,"line":100},[97,165349,165350],{"class":370},"sorted",[97,165352,165228],{"class":103},[97,165354,392],{"class":370},[97,165356,12626],{"class":103},[97,165358,537],{"class":370},[97,165360,12626],{"class":103},[97,165362,398],{"class":370},[97,165364,4848],{"class":103},[24,165366,165367],{},"类型转换：",[87,165369,165371],{"className":30568,"code":165370,"language":30570,"meta":92,"style":92},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[94,165372,165373,165383,165401],{"__ignoreMap":92},[97,165374,165375,165377,165379,165381],{"class":99,"line":100},[97,165376,154184],{"class":370},[97,165378,323],{"class":103},[97,165380,155994],{"class":118},[97,165382,329],{"class":103},[97,165384,165385,165387,165389,165391,165393,165395,165397,165399],{"class":99,"line":195},[97,165386,155379],{"class":370},[97,165388,165228],{"class":103},[97,165390,537],{"class":370},[97,165392,12626],{"class":103},[97,165394,398],{"class":370},[97,165396,12626],{"class":103},[97,165398,392],{"class":370},[97,165400,4848],{"class":103},[97,165402,165403,165405,165407,165409,165411,165413,165415,165417,165419,165421],{"class":99,"line":241},[97,165404,155404],{"class":370},[97,165406,165228],{"class":103},[97,165408,537],{"class":370},[97,165410,12626],{"class":103},[97,165412,537],{"class":370},[97,165414,12626],{"class":103},[97,165416,398],{"class":370},[97,165418,12626],{"class":103},[97,165420,392],{"class":370},[97,165422,4848],{"class":103},[24,165424,165425],{},"成员判断：",[87,165427,165429],{"className":30568,"code":165428,"language":30570,"meta":92,"style":92},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[94,165430,165431,165448,165472],{"__ignoreMap":92},[97,165432,165433,165435,165437,165440,165443,165446],{"class":99,"line":100},[97,165434,30605],{"class":370},[97,165436,323],{"class":103},[97,165438,165439],{"class":118},"\"a\"",[97,165441,165442],{"class":319}," in",[97,165444,165445],{"class":118}," \"abc\"",[97,165447,329],{"class":103},[97,165449,165450,165452,165454,165456,165458,165460,165462,165464,165466,165468,165470],{"class":99,"line":195},[97,165451,30605],{"class":370},[97,165453,323],{"class":103},[97,165455,537],{"class":370},[97,165457,165442],{"class":319},[97,165459,52410],{"class":103},[97,165461,537],{"class":370},[97,165463,12626],{"class":103},[97,165465,398],{"class":370},[97,165467,12626],{"class":103},[97,165469,392],{"class":370},[97,165471,4848],{"class":103},[97,165473,165474,165476,165478,165480,165482,165484,165486,165488,165490],{"class":99,"line":241},[97,165475,30605],{"class":370},[97,165477,323],{"class":103},[97,165479,62863],{"class":118},[97,165481,165442],{"class":319},[97,165483,4639],{"class":103},[97,165485,62863],{"class":118},[97,165487,51621],{"class":103},[97,165489,150002],{"class":118},[97,165491,165266],{"class":103},[14,165493,165495],{"id":165494},"_614-推导式","6.14 推导式",[24,165497,165498],{},"推导式用于快速生成容器。",[24,165500,165501],{},"列表推导式：",[87,165503,165505],{"className":30568,"code":165504,"language":30570,"meta":92,"style":92},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[94,165506,165507,165534],{"__ignoreMap":92},[97,165508,165509,165511,165513,165516,165518,165520,165522,165524,165526,165528,165530,165532],{"class":99,"line":100},[97,165510,164214],{"class":103},[97,165512,115],{"class":319},[97,165514,165515],{"class":103}," [i ",[97,165517,3216],{"class":319},[97,165519,9629],{"class":103},[97,165521,26233],{"class":319},[97,165523,32633],{"class":370},[97,165525,323],{"class":103},[97,165527,537],{"class":370},[97,165529,12626],{"class":103},[97,165531,664],{"class":370},[97,165533,97484],{"class":103},[97,165535,165536,165538],{"class":99,"line":195},[97,165537,30605],{"class":370},[97,165539,164430],{"class":103},[24,165541,165542],{},"带条件：",[87,165544,165546],{"className":30568,"code":165545,"language":30570,"meta":92,"style":92},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[94,165547,165548,165589],{"__ignoreMap":92},[97,165549,165550,165553,165555,165557,165559,165561,165563,165565,165567,165569,165571,165573,165575,165577,165579,165581,165583,165585,165587],{"class":99,"line":100},[97,165551,165552],{"class":103},"even_nums ",[97,165554,115],{"class":319},[97,165556,165515],{"class":103},[97,165558,3216],{"class":319},[97,165560,9629],{"class":103},[97,165562,26233],{"class":319},[97,165564,32633],{"class":370},[97,165566,323],{"class":103},[97,165568,537],{"class":370},[97,165570,12626],{"class":103},[97,165572,657],{"class":370},[97,165574,13905],{"class":103},[97,165576,1723],{"class":319},[97,165578,9629],{"class":103},[97,165580,648],{"class":319},[97,165582,14946],{"class":370},[97,165584,101743],{"class":319},[97,165586,4284],{"class":370},[97,165588,33436],{"class":103},[97,165590,165591,165593],{"class":99,"line":195},[97,165592,30605],{"class":370},[97,165594,165595],{"class":103},"(even_nums)\n",[24,165597,165598],{},"字典推导式：",[87,165600,165602],{"className":30568,"code":165601,"language":30570,"meta":92,"style":92},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[94,165603,165604,165638],{"__ignoreMap":92},[97,165605,165606,165609,165611,165614,165616,165618,165621,165623,165625,165627,165629,165631,165633,165635],{"class":99,"line":100},[97,165607,165608],{"class":103},"squares ",[97,165610,115],{"class":319},[97,165612,165613],{"class":103}," {i: i ",[97,165615,10852],{"class":319},[97,165617,14946],{"class":370},[97,165619,165620],{"class":319}," for",[97,165622,9629],{"class":103},[97,165624,26233],{"class":319},[97,165626,32633],{"class":370},[97,165628,323],{"class":103},[97,165630,537],{"class":370},[97,165632,12626],{"class":103},[97,165634,664],{"class":370},[97,165636,165637],{"class":103},")}\n",[97,165639,165640,165642],{"class":99,"line":195},[97,165641,30605],{"class":370},[97,165643,165644],{"class":103},"(squares)\n",[24,165646,165647],{},"集合推导式：",[87,165649,165651],{"className":30568,"code":165650,"language":30570,"meta":92,"style":92},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[94,165652,165653,165674],{"__ignoreMap":92},[97,165654,165655,165658,165660,165663,165665,165667,165669,165672],{"class":99,"line":100},[97,165656,165657],{"class":103},"chars ",[97,165659,115],{"class":319},[97,165661,165662],{"class":103}," {ch ",[97,165664,3216],{"class":319},[97,165666,159806],{"class":103},[97,165668,26233],{"class":319},[97,165670,165671],{"class":118}," \"hello\"",[97,165673,1757],{"class":103},[97,165675,165676,165678],{"class":99,"line":195},[97,165677,30605],{"class":370},[97,165679,165680],{"class":103},"(chars)\n",[24,165682,165683],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165685,165687],{"id":165686},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[87,165689,165691],{"className":30568,"code":165690,"language":30570,"meta":92,"style":92},"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",[94,165692,165693,165701,165721,165741,165761,165781,165785,165789,165797,165811,165820,165824,165834,165846,165850,165870,165879,165883,165899,165904,165908,165922,165926,165948,165984],{"__ignoreMap":92},[97,165694,165695,165697,165699],{"class":99,"line":100},[97,165696,159830],{"class":103},[97,165698,115],{"class":319},[97,165700,55631],{"class":103},[97,165702,165703,165705,165707,165709,165711,165713,165715,165717,165719],{"class":99,"line":195},[97,165704,148499],{"class":103},[97,165706,62863],{"class":118},[97,165708,51621],{"class":103},[97,165710,150002],{"class":118},[97,165712,12626],{"class":103},[97,165714,151586],{"class":118},[97,165716,51621],{"class":103},[97,165718,1308],{"class":370},[97,165720,5121],{"class":103},[97,165722,165723,165725,165727,165729,165731,165733,165735,165737,165739],{"class":99,"line":241},[97,165724,148499],{"class":103},[97,165726,62863],{"class":118},[97,165728,51621],{"class":103},[97,165730,151050],{"class":118},[97,165732,12626],{"class":103},[97,165734,151586],{"class":118},[97,165736,51621],{"class":103},[97,165738,1131],{"class":370},[97,165740,5121],{"class":103},[97,165742,165743,165745,165747,165749,165751,165753,165755,165757,165759],{"class":99,"line":1387},[97,165744,148499],{"class":103},[97,165746,62863],{"class":118},[97,165748,51621],{"class":103},[97,165750,159845],{"class":118},[97,165752,12626],{"class":103},[97,165754,151586],{"class":118},[97,165756,51621],{"class":103},[97,165758,726],{"class":370},[97,165760,5121],{"class":103},[97,165762,165763,165765,165767,165769,165771,165773,165775,165777,165779],{"class":99,"line":1393},[97,165764,148499],{"class":103},[97,165766,62863],{"class":118},[97,165768,51621],{"class":103},[97,165770,163424],{"class":118},[97,165772,12626],{"class":103},[97,165774,151586],{"class":118},[97,165776,51621],{"class":103},[97,165778,1202],{"class":370},[97,165780,5121],{"class":103},[97,165782,165783],{"class":99,"line":1407},[97,165784,33436],{"class":103},[97,165786,165787],{"class":99,"line":1413},[97,165788,2591],{"emptyLinePlaceholder":249},[97,165790,165791,165793,165795],{"class":99,"line":1504},[97,165792,157374],{"class":103},[97,165794,115],{"class":319},[97,165796,47523],{"class":370},[97,165798,165799,165802,165804,165807,165809],{"class":99,"line":1510},[97,165800,165801],{"class":103},"max_student ",[97,165803,115],{"class":319},[97,165805,165806],{"class":103}," students[",[97,165808,511],{"class":370},[97,165810,33436],{"class":103},[97,165812,165813,165816,165818],{"class":99,"line":1522},[97,165814,165815],{"class":103},"passed ",[97,165817,115],{"class":319},[97,165819,52022],{"class":103},[97,165821,165822],{"class":99,"line":1804},[97,165823,2591],{"emptyLinePlaceholder":249},[97,165825,165826,165828,165830,165832],{"class":99,"line":1809},[97,165827,3216],{"class":319},[97,165829,152251],{"class":103},[97,165831,26233],{"class":319},[97,165833,152256],{"class":103},[97,165835,165836,165838,165840,165842,165844],{"class":99,"line":1815},[97,165837,159421],{"class":103},[97,165839,9668],{"class":319},[97,165841,152263],{"class":103},[97,165843,151586],{"class":118},[97,165845,33436],{"class":103},[97,165847,165848],{"class":99,"line":1820},[97,165849,2591],{"emptyLinePlaceholder":249},[97,165851,165852,165854,165856,165858,165860,165862,165865,165867],{"class":99,"line":1834},[97,165853,3292],{"class":319},[97,165855,152263],{"class":103},[97,165857,151586],{"class":118},[97,165859,4634],{"class":103},[97,165861,1279],{"class":319},[97,165863,165864],{"class":103}," max_student[",[97,165866,151586],{"class":118},[97,165868,165869],{"class":103},"]:\n",[97,165871,165872,165875,165877],{"class":99,"line":1839},[97,165873,165874],{"class":103},"        max_student ",[97,165876,115],{"class":319},[97,165878,152279],{"class":103},[97,165880,165881],{"class":99,"line":1845},[97,165882,2591],{"emptyLinePlaceholder":249},[97,165884,165885,165887,165889,165891,165893,165895,165897],{"class":99,"line":1866},[97,165886,3292],{"class":319},[97,165888,152263],{"class":103},[97,165890,151586],{"class":118},[97,165892,4634],{"class":103},[97,165894,1902],{"class":319},[97,165896,157951],{"class":370},[97,165898,3930],{"class":103},[97,165900,165901],{"class":99,"line":1871},[97,165902,165903],{"class":103},"        passed.append(student)\n",[97,165905,165906],{"class":99,"line":1885},[97,165907,2591],{"emptyLinePlaceholder":249},[97,165909,165910,165912,165914,165916,165918,165920],{"class":99,"line":1890},[97,165911,163888],{"class":103},[97,165913,115],{"class":319},[97,165915,163893],{"class":103},[97,165917,904],{"class":319},[97,165919,7522],{"class":370},[97,165921,165109],{"class":103},[97,165923,165924],{"class":99,"line":1919},[97,165925,2591],{"emptyLinePlaceholder":249},[97,165927,165928,165930,165932,165934,165936,165938,165940,165942,165944,165946],{"class":99,"line":1924},[97,165929,30605],{"class":370},[97,165931,323],{"class":103},[97,165933,374],{"class":319},[97,165935,163911],{"class":118},[97,165937,1216],{"class":370},[97,165939,163916],{"class":103},[97,165941,157273],{"class":319},[97,165943,1265],{"class":370},[97,165945,571],{"class":118},[97,165947,329],{"class":103},[97,165949,165950,165952,165954,165956,165959,165961,165964,165966,165968,165970,165972,165974,165976,165978,165980,165982],{"class":99,"line":1941},[97,165951,30605],{"class":370},[97,165953,323],{"class":103},[97,165955,374],{"class":319},[97,165957,165958],{"class":118},"\"最高分学生:",[97,165960,1216],{"class":370},[97,165962,165963],{"class":103},"max_student[",[97,165965,152996],{"class":118},[97,165967,1259],{"class":103},[97,165969,1265],{"class":370},[97,165971,4639],{"class":370},[97,165973,165963],{"class":103},[97,165975,153034],{"class":118},[97,165977,1259],{"class":103},[97,165979,1265],{"class":370},[97,165981,571],{"class":118},[97,165983,329],{"class":103},[97,165985,165986,165988,165990,165992,165995,165998,166001,166003,166005],{"class":99,"line":1946},[97,165987,30605],{"class":370},[97,165989,323],{"class":103},[97,165991,374],{"class":319},[97,165993,165994],{"class":118},"\"及格人数:",[97,165996,165997],{"class":370},"{len",[97,165999,166000],{"class":103},"(passed)",[97,166002,1265],{"class":370},[97,166004,571],{"class":118},[97,166006,329],{"class":103},[14,166008,166010],{"id":166009},"_616-易错点","6.16 易错点",[138,166012,166013,166016,166019,166022,166028,166037],{},[70,166014,166015],{},"列表可变，元组和字符串不可变。",[70,166017,166018],{},"切片结束位置不包含。",[70,166020,166021],{},"字典通过 key 取值，不是通过索引。",[70,166023,166024,166025,28575],{},"空集合要用 ",[94,166026,166027],{},"set()",[70,166029,104550,166030,166033,166034,28575],{},[94,166031,166032],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[94,166035,166036],{},"get()",[70,166038,166039],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166041,166043],{"id":166042},"_617-本章练习","6.17 本章练习",[138,166045,166046,166049,166052,166055,166058],{},[70,166047,166048],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[70,166050,166051],{},"输入一句话，统计每个字符出现次数。",[70,166053,166054],{},"使用集合去除列表中的重复元素。",[70,166056,166057],{},"使用字典保存一个学生的信息，并实现修改成绩。",[70,166059,166060],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[231,166062,166063],{},"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":92,"searchDepth":195,"depth":195,"links":166065},[166066,166067,166068,166069,166070,166071,166072,166073,166074,166075,166076,166077,166078,166079,166080,166081,166082],{"id":163046,"depth":195,"text":163047},{"id":163163,"depth":195,"text":163164},{"id":163253,"depth":195,"text":163254},{"id":163377,"depth":195,"text":163378},{"id":163740,"depth":195,"text":163741},{"id":163927,"depth":195,"text":163928},{"id":164046,"depth":195,"text":164047},{"id":164188,"depth":195,"text":164189},{"id":164375,"depth":195,"text":164376},{"id":164619,"depth":195,"text":164620},{"id":164829,"depth":195,"text":164830},{"id":164914,"depth":195,"text":164915},{"id":165212,"depth":195,"text":165213},{"id":165494,"depth":195,"text":165495},{"id":165686,"depth":195,"text":165687},{"id":166009,"depth":195,"text":166010},{"id":166042,"depth":195,"text":166043},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163038,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166089,"title":166090,"body":166091,"description":246,"extension":247,"meta":168263,"navigation":249,"path":168264,"seo":168265,"stem":168266,"__hash__":168267},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166092,"toc":168238},[166093,166096,166100,166103,166183,166186,166207,166210,166214,166217,166279,166282,166299,166303,166306,166351,166353,166361,166365,166368,166450,166453,166456,166481,166484,166507,166511,166514,166516,166578,166581,166583,166634,166638,166642,166648,166753,166757,166763,166834,166838,166841,166909,166912,166992,166996,167002,167038,167041,167044,167154,167160,167164,167167,167239,167242,167246,167250,167255,167317,167321,167326,167394,167398,167403,167519,167523,167526,167606,167609,167613,167616,167720,167722,167737,167740,167744,167882,167890,167894,167896,167907,167909,168167,168171,168203,168207,168235],[10,166094,166090],{"id":166095},"_7-函数进阶",[14,166097,166099],{"id":166098},"_71-多返回值","7.1 多返回值",[24,166101,166102],{},"Python 函数可以返回多个值，本质上返回的是元组。",[87,166104,166106],{"className":30568,"code":166105,"language":30570,"meta":92,"style":92},"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",[94,166107,166108,166117,166125,166133,166142,166149,166153,166157,166166,166172],{"__ignoreMap":92},[97,166109,166110,166112,166115],{"class":99,"line":100},[97,166111,32137],{"class":319},[97,166113,166114],{"class":111}," get_info",[97,166116,32143],{"class":103},[97,166118,166119,166121,166123],{"class":99,"line":195},[97,166120,152484],{"class":103},[97,166122,115],{"class":319},[97,166124,149467],{"class":118},[97,166126,166127,166129,166131],{"class":99,"line":241},[97,166128,152500],{"class":103},[97,166130,115],{"class":319},[97,166132,146665],{"class":370},[97,166134,166135,166137,166139],{"class":99,"line":1387},[97,166136,152515],{"class":103},[97,166138,115],{"class":319},[97,166140,166141],{"class":370}," 95\n",[97,166143,166144,166146],{"class":99,"line":1393},[97,166145,4281],{"class":319},[97,166147,166148],{"class":103}," name, age, score\n",[97,166150,166151],{"class":99,"line":1407},[97,166152,2591],{"emptyLinePlaceholder":249},[97,166154,166155],{"class":99,"line":1413},[97,166156,2591],{"emptyLinePlaceholder":249},[97,166158,166159,166161,166163],{"class":99,"line":1504},[97,166160,161420],{"class":103},[97,166162,115],{"class":319},[97,166164,166165],{"class":103}," get_info()\n",[97,166167,166168,166170],{"class":99,"line":1510},[97,166169,30605],{"class":370},[97,166171,76769],{"class":103},[97,166173,166174,166176,166178,166180],{"class":99,"line":1522},[97,166175,30605],{"class":370},[97,166177,323],{"class":103},[97,166179,103291],{"class":370},[97,166181,166182],{"class":103},"(result))\n",[24,166184,166185],{},"可以直接解包：",[87,166187,166189],{"className":30568,"code":166188,"language":30570,"meta":92,"style":92},"name, age, score = get_info()\nprint(name, age, score)\n",[94,166190,166191,166200],{"__ignoreMap":92},[97,166192,166193,166196,166198],{"class":99,"line":100},[97,166194,166195],{"class":103},"name, age, score ",[97,166197,115],{"class":319},[97,166199,166165],{"class":103},[97,166201,166202,166204],{"class":99,"line":195},[97,166203,30605],{"class":370},[97,166205,166206],{"class":103},"(name, age, score)\n",[24,166208,166209],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166211,166213],{"id":166212},"_72-位置参数","7.2 位置参数",[24,166215,166216],{},"位置参数按顺序传递。",[87,166218,166220],{"className":30568,"code":166219,"language":30570,"meta":92,"style":92},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[94,166221,166222,166230,166258,166262,166266],{"__ignoreMap":92},[97,166223,166224,166226,166228],{"class":99,"line":100},[97,166225,32137],{"class":319},[97,166227,149486],{"class":111},[97,166229,149489],{"class":103},[97,166231,166232,166234,166236,166238,166240,166242,166244,166246,166248,166250,166252,166254,166256],{"class":99,"line":195},[97,166233,31489],{"class":370},[97,166235,323],{"class":103},[97,166237,374],{"class":319},[97,166239,149500],{"class":118},[97,166241,1216],{"class":370},[97,166243,79994],{"class":103},[97,166245,1265],{"class":370},[97,166247,149509],{"class":118},[97,166249,1216],{"class":370},[97,166251,70405],{"class":103},[97,166253,1265],{"class":370},[97,166255,149518],{"class":118},[97,166257,329],{"class":103},[97,166259,166260],{"class":99,"line":241},[97,166261,2591],{"emptyLinePlaceholder":249},[97,166263,166264],{"class":99,"line":1387},[97,166265,2591],{"emptyLinePlaceholder":249},[97,166267,166268,166271,166273,166275,166277],{"class":99,"line":1393},[97,166269,166270],{"class":103},"introduce(",[97,166272,150002],{"class":118},[97,166274,12626],{"class":103},[97,166276,970],{"class":370},[97,166278,329],{"class":103},[24,166280,166281],{},"顺序错了就会得到错误含义：",[87,166283,166285],{"className":30568,"code":166284,"language":30570,"meta":92,"style":92},"introduce(18, \"小明\")\n",[94,166286,166287],{"__ignoreMap":92},[97,166288,166289,166291,166293,166295,166297],{"class":99,"line":100},[97,166290,166270],{"class":103},[97,166292,970],{"class":370},[97,166294,12626],{"class":103},[97,166296,150002],{"class":118},[97,166298,329],{"class":103},[14,166300,166302],{"id":166301},"_73-关键字参数","7.3 关键字参数",[24,166304,166305],{},"关键字参数按参数名传递。",[87,166307,166309],{"className":30568,"code":166308,"language":30570,"meta":92,"style":92},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[94,166310,166311,166331],{"__ignoreMap":92},[97,166312,166313,166315,166317,166319,166321,166323,166325,166327,166329],{"class":99,"line":100},[97,166314,166270],{"class":103},[97,166316,79994],{"class":5407},[97,166318,115],{"class":319},[97,166320,150002],{"class":118},[97,166322,12626],{"class":103},[97,166324,70405],{"class":5407},[97,166326,115],{"class":319},[97,166328,970],{"class":370},[97,166330,329],{"class":103},[97,166332,166333,166335,166337,166339,166341,166343,166345,166347,166349],{"class":99,"line":195},[97,166334,166270],{"class":103},[97,166336,70405],{"class":5407},[97,166338,115],{"class":319},[97,166340,970],{"class":370},[97,166342,12626],{"class":103},[97,166344,79994],{"class":5407},[97,166346,115],{"class":319},[97,166348,150002],{"class":118},[97,166350,329],{"class":103},[24,166352,118118],{},[138,166354,166355,166358],{},[70,166356,166357],{},"顺序不容易错。",[70,166359,166360],{},"调用时可读性更强。",[14,166362,166364],{"id":166363},"_74-默认参数","7.4 默认参数",[24,166366,166367],{},"默认参数给参数设置默认值。",[87,166369,166371],{"className":30568,"code":166370,"language":30570,"meta":92,"style":92},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[94,166372,166373,166389,166419,166423,166427,166437],{"__ignoreMap":92},[97,166374,166375,166377,166379,166382,166384,166387],{"class":99,"line":100},[97,166376,32137],{"class":319},[97,166378,122277],{"class":111},[97,166380,166381],{"class":103},"(host, port",[97,166383,115],{"class":319},[97,166385,166386],{"class":370},"3306",[97,166388,30976],{"class":103},[97,166390,166391,166393,166395,166397,166400,166402,166404,166406,166408,166410,166413,166415,166417],{"class":99,"line":195},[97,166392,31489],{"class":370},[97,166394,323],{"class":103},[97,166396,374],{"class":319},[97,166398,166399],{"class":118},"\"连接",[97,166401,1216],{"class":370},[97,166403,27585],{"class":103},[97,166405,1265],{"class":370},[97,166407,1179],{"class":118},[97,166409,1216],{"class":370},[97,166411,166412],{"class":103},"port",[97,166414,1265],{"class":370},[97,166416,571],{"class":118},[97,166418,329],{"class":103},[97,166420,166421],{"class":99,"line":241},[97,166422,2591],{"emptyLinePlaceholder":249},[97,166424,166425],{"class":99,"line":1387},[97,166426,2591],{"emptyLinePlaceholder":249},[97,166428,166429,166432,166435],{"class":99,"line":1393},[97,166430,166431],{"class":103},"connect(",[97,166433,166434],{"class":118},"\"localhost\"",[97,166436,329],{"class":103},[97,166438,166439,166441,166443,166445,166448],{"class":99,"line":1407},[97,166440,166431],{"class":103},[97,166442,166434],{"class":118},[97,166444,12626],{"class":103},[97,166446,166447],{"class":370},"6379",[97,166449,329],{"class":103},[24,166451,166452],{},"注意：默认参数必须放在非默认参数后面。",[24,166454,166455],{},"错误：",[87,166457,166459],{"className":30568,"code":166458,"language":30570,"meta":92,"style":92},"def connect(port=3306, host):\n    pass\n",[94,166460,166461,166477],{"__ignoreMap":92},[97,166462,166463,166465,166467,166470,166472,166474],{"class":99,"line":100},[97,166464,32137],{"class":319},[97,166466,122277],{"class":111},[97,166468,166469],{"class":103},"(port",[97,166471,115],{"class":319},[97,166473,166386],{"class":370},[97,166475,166476],{"class":103},", host):\n",[97,166478,166479],{"class":99,"line":195},[97,166480,149651],{"class":319},[24,166482,166483],{},"正确：",[87,166485,166487],{"className":30568,"code":166486,"language":30570,"meta":92,"style":92},"def connect(host, port=3306):\n    pass\n",[94,166488,166489,166503],{"__ignoreMap":92},[97,166490,166491,166493,166495,166497,166499,166501],{"class":99,"line":100},[97,166492,32137],{"class":319},[97,166494,122277],{"class":111},[97,166496,166381],{"class":103},[97,166498,115],{"class":319},[97,166500,166386],{"class":370},[97,166502,30976],{"class":103},[97,166504,166505],{"class":99,"line":195},[97,166506,149651],{"class":319},[14,166508,166510],{"id":166509},"_75-默认参数的坑","7.5 默认参数的坑",[24,166512,166513],{},"不要使用可变对象作为默认参数。",[24,166515,157737],{},[87,166517,166519],{"className":30568,"code":166518,"language":30570,"meta":92,"style":92},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[94,166520,166521,166536,166541,166548,166552,166556,166567],{"__ignoreMap":92},[97,166522,166523,166525,166528,166531,166533],{"class":99,"line":100},[97,166524,32137],{"class":319},[97,166526,166527],{"class":111}," add_item",[97,166529,166530],{"class":103},"(item, items",[97,166532,115],{"class":319},[97,166534,166535],{"class":103},"[]):\n",[97,166537,166538],{"class":99,"line":195},[97,166539,166540],{"class":103},"    items.append(item)\n",[97,166542,166543,166545],{"class":99,"line":241},[97,166544,4281],{"class":319},[97,166546,166547],{"class":103}," items\n",[97,166549,166550],{"class":99,"line":1387},[97,166551,2591],{"emptyLinePlaceholder":249},[97,166553,166554],{"class":99,"line":1393},[97,166555,2591],{"emptyLinePlaceholder":249},[97,166557,166558,166560,166563,166565],{"class":99,"line":1407},[97,166559,30605],{"class":370},[97,166561,166562],{"class":103},"(add_item(",[97,166564,165439],{"class":118},[97,166566,30687],{"class":103},[97,166568,166569,166571,166573,166576],{"class":99,"line":1413},[97,166570,30605],{"class":370},[97,166572,166562],{"class":103},[97,166574,166575],{"class":118},"\"b\"",[97,166577,30687],{"class":103},[24,166579,166580],{},"第二次调用会复用第一次的列表。",[24,166582,156002],{},[87,166584,166586],{"className":30568,"code":166585,"language":30570,"meta":92,"style":92},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[94,166587,166588,166602,166615,166624,166628],{"__ignoreMap":92},[97,166589,166590,166592,166594,166596,166598,166600],{"class":99,"line":100},[97,166591,32137],{"class":319},[97,166593,166527],{"class":111},[97,166595,166530],{"class":103},[97,166597,115],{"class":319},[97,166599,95870],{"class":370},[97,166601,30976],{"class":103},[97,166603,166604,166606,166609,166611,166613],{"class":99,"line":195},[97,166605,3292],{"class":319},[97,166607,166608],{"class":103}," items ",[97,166610,39117],{"class":319},[97,166612,39123],{"class":370},[97,166614,3930],{"class":103},[97,166616,166617,166620,166622],{"class":99,"line":241},[97,166618,166619],{"class":103},"        items ",[97,166621,115],{"class":319},[97,166623,52022],{"class":103},[97,166625,166626],{"class":99,"line":1387},[97,166627,166540],{"class":103},[97,166629,166630,166632],{"class":99,"line":1393},[97,166631,4281],{"class":319},[97,166633,166547],{"class":103},[14,166635,166637],{"id":166636},"_76-不定长参数","7.6 不定长参数",[48,166639,166641],{"id":166640},"_761-args","7.6.1 *args",[24,166643,166644,166647],{},[94,166645,166646],{},"*args"," 接收任意数量的位置参数，得到元组。",[87,166649,166651],{"className":30568,"code":166650,"language":30570,"meta":92,"style":92},"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",[94,166652,166653,166666,166674,166685,166694,166700,166704,166708,166727],{"__ignoreMap":92},[97,166654,166655,166657,166659,166661,166663],{"class":99,"line":100},[97,166656,32137],{"class":319},[97,166658,5400],{"class":111},[97,166660,323],{"class":103},[97,166662,775],{"class":319},[97,166664,166665],{"class":103},"args):\n",[97,166667,166668,166670,166672],{"class":99,"line":195},[97,166669,159421],{"class":103},[97,166671,115],{"class":319},[97,166673,47523],{"class":370},[97,166675,166676,166678,166680,166682],{"class":99,"line":241},[97,166677,3392],{"class":319},[97,166679,156294],{"class":103},[97,166681,26233],{"class":319},[97,166683,166684],{"class":103}," args:\n",[97,166686,166687,166689,166691],{"class":99,"line":1387},[97,166688,160096],{"class":103},[97,166690,9668],{"class":319},[97,166692,166693],{"class":103}," num\n",[97,166695,166696,166698],{"class":99,"line":1393},[97,166697,4281],{"class":319},[97,166699,162401],{"class":103},[97,166701,166702],{"class":99,"line":1407},[97,166703,2591],{"emptyLinePlaceholder":249},[97,166705,166706],{"class":99,"line":1413},[97,166707,2591],{"emptyLinePlaceholder":249},[97,166709,166710,166712,166715,166717,166719,166721,166723,166725],{"class":99,"line":1504},[97,166711,30605],{"class":370},[97,166713,166714],{"class":103},"(add(",[97,166716,537],{"class":370},[97,166718,12626],{"class":103},[97,166720,398],{"class":370},[97,166722,12626],{"class":103},[97,166724,392],{"class":370},[97,166726,30687],{"class":103},[97,166728,166729,166731,166733,166735,166737,166739,166741,166743,166745,166747,166749,166751],{"class":99,"line":1510},[97,166730,30605],{"class":370},[97,166732,166714],{"class":103},[97,166734,537],{"class":370},[97,166736,12626],{"class":103},[97,166738,398],{"class":370},[97,166740,12626],{"class":103},[97,166742,392],{"class":370},[97,166744,12626],{"class":103},[97,166746,613],{"class":370},[97,166748,12626],{"class":103},[97,166750,639],{"class":370},[97,166752,30687],{"class":103},[48,166754,166756],{"id":166755},"_762-kwargs","7.6.2 **kwargs",[24,166758,166759,166762],{},[94,166760,166761],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[87,166764,166766],{"className":30568,"code":166765,"language":30570,"meta":92,"style":92},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[94,166767,166768,166781,166792,166798,166802,166806],{"__ignoreMap":92},[97,166769,166770,166772,166774,166776,166778],{"class":99,"line":100},[97,166771,32137],{"class":319},[97,166773,162059],{"class":111},[97,166775,323],{"class":103},[97,166777,10852],{"class":319},[97,166779,166780],{"class":103},"kwargs):\n",[97,166782,166783,166785,166787,166789],{"class":99,"line":195},[97,166784,3392],{"class":319},[97,166786,164899],{"class":103},[97,166788,26233],{"class":319},[97,166790,166791],{"class":103}," kwargs.items():\n",[97,166793,166794,166796],{"class":99,"line":241},[97,166795,32641],{"class":370},[97,166797,164911],{"class":103},[97,166799,166800],{"class":99,"line":1387},[97,166801,2591],{"emptyLinePlaceholder":249},[97,166803,166804],{"class":99,"line":1393},[97,166805,2591],{"emptyLinePlaceholder":249},[97,166807,166808,166810,166812,166814,166816,166818,166820,166822,166824,166826,166828,166830,166832],{"class":99,"line":1407},[97,166809,162124],{"class":103},[97,166811,79994],{"class":5407},[97,166813,115],{"class":319},[97,166815,150002],{"class":118},[97,166817,12626],{"class":103},[97,166819,70405],{"class":5407},[97,166821,115],{"class":319},[97,166823,970],{"class":370},[97,166825,12626],{"class":103},[97,166827,70456],{"class":5407},[97,166829,115],{"class":319},[97,166831,69453],{"class":118},[97,166833,329],{"class":103},[14,166835,166837],{"id":166836},"_77-参数解包","7.7 参数解包",[24,166839,166840],{},"列表或元组解包为位置参数：",[87,166842,166844],{"className":30568,"code":166843,"language":30570,"meta":92,"style":92},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[94,166845,166846,166855,166870,166874,166878,166898],{"__ignoreMap":92},[97,166847,166848,166850,166852],{"class":99,"line":100},[97,166849,32137],{"class":319},[97,166851,5400],{"class":111},[97,166853,166854],{"class":103},"(a, b, c):\n",[97,166856,166857,166859,166861,166863,166865,166867],{"class":99,"line":195},[97,166858,4281],{"class":319},[97,166860,11060],{"class":103},[97,166862,801],{"class":319},[97,166864,11073],{"class":103},[97,166866,801],{"class":319},[97,166868,166869],{"class":103}," c\n",[97,166871,166872],{"class":99,"line":241},[97,166873,2591],{"emptyLinePlaceholder":249},[97,166875,166876],{"class":99,"line":1387},[97,166877,2591],{"emptyLinePlaceholder":249},[97,166879,166880,166882,166884,166886,166888,166890,166892,166894,166896],{"class":99,"line":1393},[97,166881,164214],{"class":103},[97,166883,115],{"class":319},[97,166885,52410],{"class":103},[97,166887,537],{"class":370},[97,166889,12626],{"class":103},[97,166891,398],{"class":370},[97,166893,12626],{"class":103},[97,166895,392],{"class":370},[97,166897,33436],{"class":103},[97,166899,166900,166902,166904,166906],{"class":99,"line":1407},[97,166901,30605],{"class":370},[97,166903,166714],{"class":103},[97,166905,775],{"class":319},[97,166907,166908],{"class":103},"nums))\n",[24,166910,166911],{},"字典解包为关键字参数：",[87,166913,166915],{"className":30568,"code":166914,"language":30570,"meta":92,"style":92},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[94,166916,166917,166925,166951,166955,166959,166983],{"__ignoreMap":92},[97,166918,166919,166921,166923],{"class":99,"line":100},[97,166920,32137],{"class":319},[97,166922,149486],{"class":111},[97,166924,149489],{"class":103},[97,166926,166927,166929,166931,166933,166935,166937,166939,166941,166943,166945,166947,166949],{"class":99,"line":195},[97,166928,31489],{"class":370},[97,166930,323],{"class":103},[97,166932,374],{"class":319},[97,166934,571],{"class":118},[97,166936,1216],{"class":370},[97,166938,79994],{"class":103},[97,166940,1265],{"class":370},[97,166942,4639],{"class":370},[97,166944,70405],{"class":103},[97,166946,1265],{"class":370},[97,166948,571],{"class":118},[97,166950,329],{"class":103},[97,166952,166953],{"class":99,"line":241},[97,166954,2591],{"emptyLinePlaceholder":249},[97,166956,166957],{"class":99,"line":1387},[97,166958,2591],{"emptyLinePlaceholder":249},[97,166960,166961,166963,166965,166967,166969,166971,166973,166975,166977,166979,166981],{"class":99,"line":1393},[97,166962,116498],{"class":103},[97,166964,115],{"class":319},[97,166966,4639],{"class":103},[97,166968,62863],{"class":118},[97,166970,51621],{"class":103},[97,166972,150002],{"class":118},[97,166974,12626],{"class":103},[97,166976,69308],{"class":118},[97,166978,51621],{"class":103},[97,166980,970],{"class":370},[97,166982,1757],{"class":103},[97,166984,166985,166987,166989],{"class":99,"line":1407},[97,166986,166270],{"class":103},[97,166988,10852],{"class":319},[97,166990,166991],{"class":103},"info)\n",[14,166993,166995],{"id":166994},"_78-匿名函数lambda","7.8 匿名函数lambda",[24,166997,166998,167001],{},[94,166999,167000],{},"lambda"," 用于定义简单匿名函数。",[87,167003,167005],{"className":30568,"code":167004,"language":30570,"meta":92,"style":92},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[94,167006,167007,167024],{"__ignoreMap":92},[97,167008,167009,167012,167014,167017,167020,167022],{"class":99,"line":100},[97,167010,167011],{"class":103},"add ",[97,167013,115],{"class":319},[97,167015,167016],{"class":319}," lambda",[97,167018,167019],{"class":103}," a, b: a ",[97,167021,801],{"class":319},[97,167023,151218],{"class":103},[97,167025,167026,167028,167030,167032,167034,167036],{"class":99,"line":195},[97,167027,30605],{"class":370},[97,167029,166714],{"class":103},[97,167031,537],{"class":370},[97,167033,12626],{"class":103},[97,167035,398],{"class":370},[97,167037,30687],{"class":103},[24,167039,167040],{},"常和排序、过滤等函数一起使用。",[24,167042,167043],{},"按分数排序：",[87,167045,167047],{"className":30568,"code":167046,"language":30570,"meta":92,"style":92},"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",[94,167048,167049,167057,167077,167097,167117,167121,167125,167148],{"__ignoreMap":92},[97,167050,167051,167053,167055],{"class":99,"line":100},[97,167052,159830],{"class":103},[97,167054,115],{"class":319},[97,167056,55631],{"class":103},[97,167058,167059,167061,167063,167065,167067,167069,167071,167073,167075],{"class":99,"line":195},[97,167060,148499],{"class":103},[97,167062,62863],{"class":118},[97,167064,51621],{"class":103},[97,167066,150002],{"class":118},[97,167068,12626],{"class":103},[97,167070,151586],{"class":118},[97,167072,51621],{"class":103},[97,167074,1308],{"class":370},[97,167076,5121],{"class":103},[97,167078,167079,167081,167083,167085,167087,167089,167091,167093,167095],{"class":99,"line":241},[97,167080,148499],{"class":103},[97,167082,62863],{"class":118},[97,167084,51621],{"class":103},[97,167086,151050],{"class":118},[97,167088,12626],{"class":103},[97,167090,151586],{"class":118},[97,167092,51621],{"class":103},[97,167094,1131],{"class":370},[97,167096,5121],{"class":103},[97,167098,167099,167101,167103,167105,167107,167109,167111,167113,167115],{"class":99,"line":1387},[97,167100,148499],{"class":103},[97,167102,62863],{"class":118},[97,167104,51621],{"class":103},[97,167106,159845],{"class":118},[97,167108,12626],{"class":103},[97,167110,151586],{"class":118},[97,167112,51621],{"class":103},[97,167114,726],{"class":370},[97,167116,5121],{"class":103},[97,167118,167119],{"class":99,"line":1393},[97,167120,33436],{"class":103},[97,167122,167123],{"class":99,"line":1407},[97,167124,2591],{"emptyLinePlaceholder":249},[97,167126,167127,167130,167132,167134,167136,167138,167140,167142,167144,167146],{"class":99,"line":1413},[97,167128,167129],{"class":103},"students.sort(",[97,167131,154060],{"class":5407},[97,167133,154063],{"class":319},[97,167135,154066],{"class":103},[97,167137,151586],{"class":118},[97,167139,112386],{"class":103},[97,167141,163642],{"class":5407},[97,167143,115],{"class":319},[97,167145,31666],{"class":370},[97,167147,329],{"class":103},[97,167149,167150,167152],{"class":99,"line":1504},[97,167151,30605],{"class":370},[97,167153,165109],{"class":103},[24,167155,167156,167157,167159],{},"如果逻辑复杂，不要硬写 ",[94,167158,167000],{},"，定义普通函数更清晰。",[14,167161,167163],{"id":167162},"_79-函数作为参数","7.9 函数作为参数",[24,167165,167166],{},"函数可以作为参数传给另一个函数。",[87,167168,167170],{"className":30568,"code":167169,"language":30570,"meta":92,"style":92},"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",[94,167171,167172,167180,167190,167194,167198,167208,167215,167219,167223],{"__ignoreMap":92},[97,167173,167174,167176,167178],{"class":99,"line":100},[97,167175,32137],{"class":319},[97,167177,5400],{"class":111},[97,167179,151207],{"class":103},[97,167181,167182,167184,167186,167188],{"class":99,"line":195},[97,167183,4281],{"class":319},[97,167185,11060],{"class":103},[97,167187,801],{"class":319},[97,167189,151218],{"class":103},[97,167191,167192],{"class":99,"line":241},[97,167193,2591],{"emptyLinePlaceholder":249},[97,167195,167196],{"class":99,"line":1387},[97,167197,2591],{"emptyLinePlaceholder":249},[97,167199,167200,167202,167205],{"class":99,"line":1393},[97,167201,32137],{"class":319},[97,167203,167204],{"class":111}," calculate",[97,167206,167207],{"class":103},"(a, b, func):\n",[97,167209,167210,167212],{"class":99,"line":1407},[97,167211,4281],{"class":319},[97,167213,167214],{"class":103}," func(a, b)\n",[97,167216,167217],{"class":99,"line":1413},[97,167218,2591],{"emptyLinePlaceholder":249},[97,167220,167221],{"class":99,"line":1504},[97,167222,2591],{"emptyLinePlaceholder":249},[97,167224,167225,167227,167230,167232,167234,167236],{"class":99,"line":1510},[97,167226,30605],{"class":370},[97,167228,167229],{"class":103},"(calculate(",[97,167231,766],{"class":370},[97,167233,12626],{"class":103},[97,167235,1020],{"class":370},[97,167237,167238],{"class":103},", add))\n",[24,167240,167241],{},"这种思想在排序、回调、框架中经常出现。",[14,167243,167245],{"id":167244},"_710-mapfiltersorted","7.10 map、filter、sorted",[48,167247,167249],{"id":167248},"_7101-map","7.10.1 map",[24,167251,167252,167254],{},[94,167253,74228],{}," 对每个元素执行函数。",[87,167256,167258],{"className":30568,"code":167257,"language":30570,"meta":92,"style":92},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[94,167259,167260,167284,167307],{"__ignoreMap":92},[97,167261,167262,167264,167266,167268,167270,167272,167274,167276,167278,167280,167282],{"class":99,"line":100},[97,167263,164214],{"class":103},[97,167265,115],{"class":319},[97,167267,52410],{"class":103},[97,167269,537],{"class":370},[97,167271,12626],{"class":103},[97,167273,398],{"class":370},[97,167275,12626],{"class":103},[97,167277,392],{"class":370},[97,167279,12626],{"class":103},[97,167281,613],{"class":370},[97,167283,33436],{"class":103},[97,167285,167286,167288,167290,167293,167295,167297,167300,167302,167304],{"class":99,"line":195},[97,167287,161420],{"class":103},[97,167289,115],{"class":319},[97,167291,167292],{"class":370}," map",[97,167294,323],{"class":103},[97,167296,167000],{"class":319},[97,167298,167299],{"class":103}," x: x ",[97,167301,775],{"class":319},[97,167303,14946],{"class":370},[97,167305,167306],{"class":103},", nums)\n",[97,167308,167309,167311,167313,167315],{"class":99,"line":241},[97,167310,30605],{"class":370},[97,167312,323],{"class":103},[97,167314,154184],{"class":370},[97,167316,166182],{"class":103},[48,167318,167320],{"id":167319},"_7102-filter","7.10.2 filter",[24,167322,167323,167325],{},[94,167324,80235],{}," 保留满足条件的元素。",[87,167327,167329],{"className":30568,"code":167328,"language":30570,"meta":92,"style":92},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[94,167330,167331,167359,167384],{"__ignoreMap":92},[97,167332,167333,167335,167337,167339,167341,167343,167345,167347,167349,167351,167353,167355,167357],{"class":99,"line":100},[97,167334,164214],{"class":103},[97,167336,115],{"class":319},[97,167338,52410],{"class":103},[97,167340,537],{"class":370},[97,167342,12626],{"class":103},[97,167344,398],{"class":370},[97,167346,12626],{"class":103},[97,167348,392],{"class":370},[97,167350,12626],{"class":103},[97,167352,613],{"class":370},[97,167354,12626],{"class":103},[97,167356,639],{"class":370},[97,167358,33436],{"class":103},[97,167360,167361,167363,167365,167368,167370,167372,167374,167376,167378,167380,167382],{"class":99,"line":195},[97,167362,161420],{"class":103},[97,167364,115],{"class":319},[97,167366,167367],{"class":370}," filter",[97,167369,323],{"class":103},[97,167371,167000],{"class":319},[97,167373,167299],{"class":103},[97,167375,648],{"class":319},[97,167377,14946],{"class":370},[97,167379,101743],{"class":319},[97,167381,4284],{"class":370},[97,167383,167306],{"class":103},[97,167385,167386,167388,167390,167392],{"class":99,"line":241},[97,167387,30605],{"class":370},[97,167389,323],{"class":103},[97,167391,154184],{"class":370},[97,167393,166182],{"class":103},[48,167395,167397],{"id":167396},"_7103-sorted","7.10.3 sorted",[24,167399,167400,167402],{},[94,167401,165350],{}," 返回排序后的新列表。",[87,167404,167406],{"className":30568,"code":167405,"language":30570,"meta":92,"style":92},"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",[94,167407,167408,167416,167436,167456,167476,167480,167484,167513],{"__ignoreMap":92},[97,167409,167410,167412,167414],{"class":99,"line":100},[97,167411,159830],{"class":103},[97,167413,115],{"class":319},[97,167415,55631],{"class":103},[97,167417,167418,167420,167422,167424,167426,167428,167430,167432,167434],{"class":99,"line":195},[97,167419,148499],{"class":103},[97,167421,62863],{"class":118},[97,167423,51621],{"class":103},[97,167425,150002],{"class":118},[97,167427,12626],{"class":103},[97,167429,151586],{"class":118},[97,167431,51621],{"class":103},[97,167433,1308],{"class":370},[97,167435,5121],{"class":103},[97,167437,167438,167440,167442,167444,167446,167448,167450,167452,167454],{"class":99,"line":241},[97,167439,148499],{"class":103},[97,167441,62863],{"class":118},[97,167443,51621],{"class":103},[97,167445,151050],{"class":118},[97,167447,12626],{"class":103},[97,167449,151586],{"class":118},[97,167451,51621],{"class":103},[97,167453,1131],{"class":370},[97,167455,5121],{"class":103},[97,167457,167458,167460,167462,167464,167466,167468,167470,167472,167474],{"class":99,"line":1387},[97,167459,148499],{"class":103},[97,167461,62863],{"class":118},[97,167463,51621],{"class":103},[97,167465,159845],{"class":118},[97,167467,12626],{"class":103},[97,167469,151586],{"class":118},[97,167471,51621],{"class":103},[97,167473,726],{"class":370},[97,167475,5121],{"class":103},[97,167477,167478],{"class":99,"line":1393},[97,167479,33436],{"class":103},[97,167481,167482],{"class":99,"line":1407},[97,167483,2591],{"emptyLinePlaceholder":249},[97,167485,167486,167488,167490,167492,167495,167497,167499,167501,167503,167505,167507,167509,167511],{"class":99,"line":1413},[97,167487,161420],{"class":103},[97,167489,115],{"class":319},[97,167491,163718],{"class":370},[97,167493,167494],{"class":103},"(students, ",[97,167496,154060],{"class":5407},[97,167498,154063],{"class":319},[97,167500,154066],{"class":103},[97,167502,151586],{"class":118},[97,167504,112386],{"class":103},[97,167506,163642],{"class":5407},[97,167508,115],{"class":319},[97,167510,31666],{"class":370},[97,167512,329],{"class":103},[97,167514,167515,167517],{"class":99,"line":1504},[97,167516,30605],{"class":370},[97,167518,76769],{"class":103},[14,167520,167522],{"id":167521},"_711-闭包入门","7.11 闭包入门",[24,167524,167525],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[87,167527,167529],{"className":30568,"code":167528,"language":30570,"meta":92,"style":92},"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",[94,167530,167531,167541,167551,167562,167566,167573,167577,167581,167595],{"__ignoreMap":92},[97,167532,167533,167535,167538],{"class":99,"line":100},[97,167534,32137],{"class":319},[97,167536,167537],{"class":111}," outer",[97,167539,167540],{"class":103},"(base):\n",[97,167542,167543,167545,167548],{"class":99,"line":195},[97,167544,30991],{"class":319},[97,167546,167547],{"class":111}," inner",[97,167549,167550],{"class":103},"(num):\n",[97,167552,167553,167555,167558,167560],{"class":99,"line":241},[97,167554,14943],{"class":319},[97,167556,167557],{"class":103}," base ",[97,167559,801],{"class":319},[97,167561,166693],{"class":103},[97,167563,167564],{"class":99,"line":1387},[97,167565,2591],{"emptyLinePlaceholder":249},[97,167567,167568,167570],{"class":99,"line":1393},[97,167569,4281],{"class":319},[97,167571,167572],{"class":103}," inner\n",[97,167574,167575],{"class":99,"line":1407},[97,167576,2591],{"emptyLinePlaceholder":249},[97,167578,167579],{"class":99,"line":1413},[97,167580,2591],{"emptyLinePlaceholder":249},[97,167582,167583,167586,167588,167591,167593],{"class":99,"line":1504},[97,167584,167585],{"class":103},"add_10 ",[97,167587,115],{"class":319},[97,167589,167590],{"class":103}," outer(",[97,167592,766],{"class":370},[97,167594,329],{"class":103},[97,167596,167597,167599,167602,167604],{"class":99,"line":1510},[97,167598,30605],{"class":370},[97,167600,167601],{"class":103},"(add_10(",[97,167603,639],{"class":370},[97,167605,30687],{"class":103},[24,167607,167608],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167610,167612],{"id":167611},"_712-装饰器入门","7.12 装饰器入门",[24,167614,167615],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[87,167617,167619],{"className":30568,"code":167618,"language":30570,"meta":92,"style":92},"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",[94,167620,167621,167630,167639,167650,167655,167666,167670,167677,167681,167685,167690,167698,167708,167712,167716],{"__ignoreMap":92},[97,167622,167623,167625,167627],{"class":99,"line":100},[97,167624,32137],{"class":319},[97,167626,87375],{"class":111},[97,167628,167629],{"class":103},"(func):\n",[97,167631,167632,167634,167637],{"class":99,"line":195},[97,167633,30991],{"class":319},[97,167635,167636],{"class":111}," wrapper",[97,167638,32143],{"class":103},[97,167640,167641,167643,167645,167648],{"class":99,"line":241},[97,167642,32641],{"class":370},[97,167644,323],{"class":103},[97,167646,167647],{"class":118},"\"函数开始执行\"",[97,167649,329],{"class":103},[97,167651,167652],{"class":99,"line":1387},[97,167653,167654],{"class":103},"        func()\n",[97,167656,167657,167659,167661,167664],{"class":99,"line":1393},[97,167658,32641],{"class":370},[97,167660,323],{"class":103},[97,167662,167663],{"class":118},"\"函数执行结束\"",[97,167665,329],{"class":103},[97,167667,167668],{"class":99,"line":1407},[97,167669,2591],{"emptyLinePlaceholder":249},[97,167671,167672,167674],{"class":99,"line":1413},[97,167673,4281],{"class":319},[97,167675,167676],{"class":103}," wrapper\n",[97,167678,167679],{"class":99,"line":1504},[97,167680,2591],{"emptyLinePlaceholder":249},[97,167682,167683],{"class":99,"line":1510},[97,167684,2591],{"emptyLinePlaceholder":249},[97,167686,167687],{"class":99,"line":1522},[97,167688,167689],{"class":111},"@log\n",[97,167691,167692,167694,167696],{"class":99,"line":1804},[97,167693,32137],{"class":319},[97,167695,161110],{"class":111},[97,167697,32143],{"class":103},[97,167699,167700,167702,167704,167706],{"class":99,"line":1809},[97,167701,31489],{"class":370},[97,167703,323],{"class":103},[97,167705,6035],{"class":118},[97,167707,329],{"class":103},[97,167709,167710],{"class":99,"line":1815},[97,167711,2591],{"emptyLinePlaceholder":249},[97,167713,167714],{"class":99,"line":1820},[97,167715,2591],{"emptyLinePlaceholder":249},[97,167717,167718],{"class":99,"line":1834},[97,167719,161145],{"class":103},[24,167721,158388],{},[87,167723,167725],{"className":30568,"code":167724,"language":30570,"meta":92,"style":92},"say_hello = log(say_hello)\n",[94,167726,167727],{"__ignoreMap":92},[97,167728,167729,167732,167734],{"class":99,"line":100},[97,167730,167731],{"class":103},"say_hello ",[97,167733,115],{"class":319},[97,167735,167736],{"class":103}," log(say_hello)\n",[24,167738,167739],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167741,167743],{"id":167742},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[87,167745,167747],{"className":30568,"code":167746,"language":30570,"meta":92,"style":92},"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",[94,167748,167749,167757,167774,167784,167803,167813,167820,167824,167830,167834,167838,167842,167850,167860,167864,167868],{"__ignoreMap":92},[97,167750,167751,167753,167755],{"class":99,"line":100},[97,167752,32137],{"class":319},[97,167754,87375],{"class":111},[97,167756,167629],{"class":103},[97,167758,167759,167761,167763,167765,167767,167770,167772],{"class":99,"line":195},[97,167760,30991],{"class":319},[97,167762,167636],{"class":111},[97,167764,323],{"class":103},[97,167766,775],{"class":319},[97,167768,167769],{"class":103},"args, ",[97,167771,10852],{"class":319},[97,167773,166780],{"class":103},[97,167775,167776,167778,167780,167782],{"class":99,"line":241},[97,167777,32641],{"class":370},[97,167779,323],{"class":103},[97,167781,167647],{"class":118},[97,167783,329],{"class":103},[97,167785,167786,167789,167791,167794,167796,167798,167800],{"class":99,"line":1387},[97,167787,167788],{"class":103},"        result ",[97,167790,115],{"class":319},[97,167792,167793],{"class":103}," func(",[97,167795,775],{"class":319},[97,167797,167769],{"class":103},[97,167799,10852],{"class":319},[97,167801,167802],{"class":103},"kwargs)\n",[97,167804,167805,167807,167809,167811],{"class":99,"line":1393},[97,167806,32641],{"class":370},[97,167808,323],{"class":103},[97,167810,167663],{"class":118},[97,167812,329],{"class":103},[97,167814,167815,167817],{"class":99,"line":1407},[97,167816,14943],{"class":319},[97,167818,167819],{"class":103}," result\n",[97,167821,167822],{"class":99,"line":1413},[97,167823,2591],{"emptyLinePlaceholder":249},[97,167825,167826,167828],{"class":99,"line":1504},[97,167827,4281],{"class":319},[97,167829,167676],{"class":103},[97,167831,167832],{"class":99,"line":1510},[97,167833,2591],{"emptyLinePlaceholder":249},[97,167835,167836],{"class":99,"line":1522},[97,167837,2591],{"emptyLinePlaceholder":249},[97,167839,167840],{"class":99,"line":1804},[97,167841,167689],{"class":111},[97,167843,167844,167846,167848],{"class":99,"line":1809},[97,167845,32137],{"class":319},[97,167847,5400],{"class":111},[97,167849,151207],{"class":103},[97,167851,167852,167854,167856,167858],{"class":99,"line":1815},[97,167853,4281],{"class":319},[97,167855,11060],{"class":103},[97,167857,801],{"class":319},[97,167859,151218],{"class":103},[97,167861,167862],{"class":99,"line":1820},[97,167863,2591],{"emptyLinePlaceholder":249},[97,167865,167866],{"class":99,"line":1834},[97,167867,2591],{"emptyLinePlaceholder":249},[97,167869,167870,167872,167874,167876,167878,167880],{"class":99,"line":1839},[97,167871,30605],{"class":370},[97,167873,166714],{"class":103},[97,167875,766],{"class":370},[97,167877,12626],{"class":103},[97,167879,1020],{"class":370},[97,167881,30687],{"class":103},[24,167883,167884,167885,101202,167887,167889],{},"这个写法使用 ",[94,167886,166646],{},[94,167888,166761],{}," 接收原函数的所有参数。",[14,167891,167893],{"id":167892},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[24,167895,123476],{},[138,167897,167898,167901,167904],{},[70,167899,167900],{},"给定一组学生数据。",[70,167902,167903],{},"封装函数，根据传入规则筛选学生。",[70,167905,167906],{},"筛选及格、优秀、未成年学生。",[24,167908,10226],{},[87,167910,167912],{"className":30568,"code":167911,"language":30570,"meta":92,"style":92},"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",[94,167913,167914,167922,167950,167978,168006,168010,168014,168018,168028,168036,168046,168053,168058,168064,168068,168072,168096,168119,168142,168146,168153,168160],{"__ignoreMap":92},[97,167915,167916,167918,167920],{"class":99,"line":100},[97,167917,159830],{"class":103},[97,167919,115],{"class":319},[97,167921,55631],{"class":103},[97,167923,167924,167926,167928,167930,167932,167934,167936,167938,167940,167942,167944,167946,167948],{"class":99,"line":195},[97,167925,148499],{"class":103},[97,167927,62863],{"class":118},[97,167929,51621],{"class":103},[97,167931,150002],{"class":118},[97,167933,12626],{"class":103},[97,167935,69308],{"class":118},[97,167937,51621],{"class":103},[97,167939,970],{"class":370},[97,167941,12626],{"class":103},[97,167943,151586],{"class":118},[97,167945,51621],{"class":103},[97,167947,1308],{"class":370},[97,167949,5121],{"class":103},[97,167951,167952,167954,167956,167958,167960,167962,167964,167966,167968,167970,167972,167974,167976],{"class":99,"line":241},[97,167953,148499],{"class":103},[97,167955,62863],{"class":118},[97,167957,51621],{"class":103},[97,167959,151050],{"class":118},[97,167961,12626],{"class":103},[97,167963,69308],{"class":118},[97,167965,51621],{"class":103},[97,167967,945],{"class":370},[97,167969,12626],{"class":103},[97,167971,151586],{"class":118},[97,167973,51621],{"class":103},[97,167975,1131],{"class":370},[97,167977,5121],{"class":103},[97,167979,167980,167982,167984,167986,167988,167990,167992,167994,167996,167998,168000,168002,168004],{"class":99,"line":1387},[97,167981,148499],{"class":103},[97,167983,62863],{"class":118},[97,167985,51621],{"class":103},[97,167987,159845],{"class":118},[97,167989,12626],{"class":103},[97,167991,69308],{"class":118},[97,167993,51621],{"class":103},[97,167995,995],{"class":370},[97,167997,12626],{"class":103},[97,167999,151586],{"class":118},[97,168001,51621],{"class":103},[97,168003,1202],{"class":370},[97,168005,5121],{"class":103},[97,168007,168008],{"class":99,"line":1393},[97,168009,33436],{"class":103},[97,168011,168012],{"class":99,"line":1407},[97,168013,2591],{"emptyLinePlaceholder":249},[97,168015,168016],{"class":99,"line":1413},[97,168017,2591],{"emptyLinePlaceholder":249},[97,168019,168020,168022,168025],{"class":99,"line":1504},[97,168021,32137],{"class":319},[97,168023,168024],{"class":111}," filter_students",[97,168026,168027],{"class":103},"(students, condition):\n",[97,168029,168030,168032,168034],{"class":99,"line":1510},[97,168031,161337],{"class":103},[97,168033,115],{"class":319},[97,168035,52022],{"class":103},[97,168037,168038,168040,168042,168044],{"class":99,"line":1522},[97,168039,3392],{"class":319},[97,168041,152251],{"class":103},[97,168043,26233],{"class":319},[97,168045,152256],{"class":103},[97,168047,168048,168050],{"class":99,"line":1804},[97,168049,2688],{"class":319},[97,168051,168052],{"class":103}," condition(student):\n",[97,168054,168055],{"class":99,"line":1809},[97,168056,168057],{"class":103},"            result.append(student)\n",[97,168059,168060,168062],{"class":99,"line":1815},[97,168061,4281],{"class":319},[97,168063,167819],{"class":103},[97,168065,168066],{"class":99,"line":1820},[97,168067,2591],{"emptyLinePlaceholder":249},[97,168069,168070],{"class":99,"line":1834},[97,168071,2591],{"emptyLinePlaceholder":249},[97,168073,168074,168076,168078,168081,168083,168086,168088,168090,168092,168094],{"class":99,"line":1839},[97,168075,165815],{"class":103},[97,168077,115],{"class":319},[97,168079,168080],{"class":103}," filter_students(students, ",[97,168082,167000],{"class":319},[97,168084,168085],{"class":103}," s: s[",[97,168087,151586],{"class":118},[97,168089,4634],{"class":103},[97,168091,1902],{"class":319},[97,168093,157951],{"class":370},[97,168095,329],{"class":103},[97,168097,168098,168101,168103,168105,168107,168109,168111,168113,168115,168117],{"class":99,"line":1845},[97,168099,168100],{"class":103},"excellent ",[97,168102,115],{"class":319},[97,168104,168080],{"class":103},[97,168106,167000],{"class":319},[97,168108,168085],{"class":103},[97,168110,151586],{"class":118},[97,168112,4634],{"class":103},[97,168114,1902],{"class":319},[97,168116,157902],{"class":370},[97,168118,329],{"class":103},[97,168120,168121,168124,168126,168128,168130,168132,168134,168136,168138,168140],{"class":99,"line":1866},[97,168122,168123],{"class":103},"under_age ",[97,168125,115],{"class":319},[97,168127,168080],{"class":103},[97,168129,167000],{"class":319},[97,168131,168085],{"class":103},[97,168133,69308],{"class":118},[97,168135,4634],{"class":103},[97,168137,104],{"class":319},[97,168139,156399],{"class":370},[97,168141,329],{"class":103},[97,168143,168144],{"class":99,"line":1871},[97,168145,2591],{"emptyLinePlaceholder":249},[97,168147,168148,168150],{"class":99,"line":1885},[97,168149,30605],{"class":370},[97,168151,168152],{"class":103},"(passed)\n",[97,168154,168155,168157],{"class":99,"line":1890},[97,168156,30605],{"class":370},[97,168158,168159],{"class":103},"(excellent)\n",[97,168161,168162,168164],{"class":99,"line":1919},[97,168163,30605],{"class":370},[97,168165,168166],{"class":103},"(under_age)\n",[14,168168,168170],{"id":168169},"_715-易错点","7.15 易错点",[138,168172,168173,168176,168184,168189,168200],{},[70,168174,168175],{},"默认参数不要写可变对象。",[70,168177,168178,168180,168181,168183],{},[94,168179,166646],{}," 是元组，",[94,168182,166761],{}," 是字典。",[70,168185,168186,168188],{},[94,168187,167000],{}," 只适合简单表达式。",[70,168190,168191,101202,168193,168195,168196,168199],{},[94,168192,74228],{},[94,168194,80235],{}," 的结果是迭代器，常用 ",[94,168197,168198],{},"list()"," 转换查看。",[70,168201,168202],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168204,168206],{"id":168205},"_716-本章练习","7.16 本章练习",[138,168208,168209,168216,168222,168227,168232],{},[70,168210,168211,168212,168215],{},"写函数 ",[94,168213,168214],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[70,168217,168211,168218,168221],{},[94,168219,168220],{},"print_user(**kwargs)","，输出用户所有字段。",[70,168223,104550,168224,168226],{},[94,168225,167000],{}," 对学生列表按年龄排序。",[70,168228,104550,168229,168231],{},[94,168230,80235],{}," 找出成绩不及格的学生。",[70,168233,168234],{},"写一个装饰器，统计函数执行前后的提示信息。",[231,168236,168237],{},"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":92,"searchDepth":195,"depth":195,"links":168239},[168240,168241,168242,168243,168244,168245,168249,168250,168251,168252,168257,168258,168259,168260,168261,168262],{"id":166098,"depth":195,"text":166099},{"id":166212,"depth":195,"text":166213},{"id":166301,"depth":195,"text":166302},{"id":166363,"depth":195,"text":166364},{"id":166509,"depth":195,"text":166510},{"id":166636,"depth":195,"text":166637,"children":168246},[168247,168248],{"id":166640,"depth":241,"text":166641},{"id":166755,"depth":241,"text":166756},{"id":166836,"depth":195,"text":166837},{"id":166994,"depth":195,"text":166995},{"id":167162,"depth":195,"text":167163},{"id":167244,"depth":195,"text":167245,"children":168253},[168254,168255,168256],{"id":167248,"depth":241,"text":167249},{"id":167319,"depth":241,"text":167320},{"id":167396,"depth":241,"text":167397},{"id":167521,"depth":195,"text":167522},{"id":167611,"depth":195,"text":167612},{"id":167742,"depth":195,"text":167743},{"id":167892,"depth":195,"text":167893},{"id":168169,"depth":195,"text":168170},{"id":168205,"depth":195,"text":168206},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166090,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168269,"title":168270,"body":168271,"description":246,"extension":247,"meta":170790,"navigation":249,"path":170791,"seo":170792,"stem":170793,"__hash__":170794},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168272,"toc":170765},[168273,168276,168280,168283,168286,168317,168321,168325,168328,168355,168359,168362,168413,168416,168431,168434,168469,168473,168475,168499,168502,168562,168566,168570,168573,168630,168633,168653,168657,168660,168723,168727,168730,168786,168793,168817,168821,168824,168887,168891,168896,168947,168950,168954,168959,169026,169029,169111,169115,169120,169171,169174,169178,169181,169184,169192,169195,169241,169244,169290,169294,169300,169344,169347,169393,169396,169436,169439,169500,169504,169507,169597,169600,169742,169745,169812,169816,169819,169822,169963,169966,170044,170047,170223,170227,170229,170240,170242,170441,170445,170689,170693,170727,170731,170762],[10,168274,168270],{"id":168275},"_8-文件操作",[14,168277,168279],{"id":168278},"_81-文件操作的意义","8.1 文件操作的意义",[24,168281,168282],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[24,168284,168285],{},"常见文件类型：",[138,168287,168288,168294,168300,168306,168312],{},[70,168289,168290,168293],{},[94,168291,168292],{},".txt","：普通文本。",[70,168295,168296,168299],{},[94,168297,168298],{},".csv","：表格文本。",[70,168301,168302,168305],{},[94,168303,168304],{},".json","：结构化数据。",[70,168307,168308,168311],{},[94,168309,168310],{},".log","：日志文件。",[70,168313,168314,168316],{},[94,168315,146466],{},"：Python 源代码。",[14,168318,168320],{"id":168319},"_82-路径","8.2 路径",[48,168322,168324],{"id":168323},"_821-相对路径","8.2.1 相对路径",[24,168326,168327],{},"相对当前运行目录：",[87,168329,168331],{"className":30568,"code":168330,"language":30570,"meta":92,"style":92},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[94,168332,168333],{"__ignoreMap":92},[97,168334,168335,168337,168339,168341,168343,168345,168347,168349,168351,168353],{"class":99,"line":100},[97,168336,87099],{"class":370},[97,168338,323],{"class":103},[97,168340,146910],{"class":118},[97,168342,12626],{"class":103},[97,168344,146915],{"class":118},[97,168346,12626],{"class":103},[97,168348,146920],{"class":5407},[97,168350,115],{"class":319},[97,168352,146925],{"class":118},[97,168354,329],{"class":103},[48,168356,168358],{"id":168357},"_822-绝对路径","8.2.2 绝对路径",[24,168360,168361],{},"从根目录或盘符开始：",[87,168363,168365],{"className":30568,"code":168364,"language":30570,"meta":92,"style":92},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[94,168366,168367,168390],{"__ignoreMap":92},[97,168368,168369,168371,168373,168376,168378,168380,168382,168384,168386,168388],{"class":99,"line":100},[97,168370,87099],{"class":370},[97,168372,323],{"class":103},[97,168374,168375],{"class":118},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[97,168377,12626],{"class":103},[97,168379,146915],{"class":118},[97,168381,12626],{"class":103},[97,168383,146920],{"class":5407},[97,168385,115],{"class":319},[97,168387,146925],{"class":118},[97,168389,329],{"class":103},[97,168391,168392,168394,168396,168399,168401,168403,168405,168407,168409,168411],{"class":99,"line":195},[97,168393,87099],{"class":370},[97,168395,323],{"class":103},[97,168397,168398],{"class":118},"\"D:\u002Fdata\u002Fdata.txt\"",[97,168400,12626],{"class":103},[97,168402,146915],{"class":118},[97,168404,12626],{"class":103},[97,168406,146920],{"class":5407},[97,168408,115],{"class":319},[97,168410,146925],{"class":118},[97,168412,329],{"class":103},[24,168414,168415],{},"Windows 路径建议写成：",[87,168417,168419],{"className":30568,"code":168418,"language":30570,"meta":92,"style":92},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[94,168420,168421],{"__ignoreMap":92},[97,168422,168423,168426,168428],{"class":99,"line":100},[97,168424,168425],{"class":103},"path ",[97,168427,115],{"class":319},[97,168429,168430],{"class":118}," \"D:\u002Fdata\u002Fdata.txt\"\n",[24,168432,168433],{},"或原始字符串：",[87,168435,168437],{"className":30568,"code":168436,"language":30570,"meta":92,"style":92},"path = r\"D:\\data\\data.txt\"\n",[94,168438,168439],{"__ignoreMap":92},[97,168440,168441,168443,168445,168447,168449,168452,168455,168458,168460,168462,168464,168467],{"class":99,"line":100},[97,168442,168425],{"class":103},[97,168444,115],{"class":319},[97,168446,17311],{"class":319},[97,168448,571],{"class":118},[97,168450,168451],{"class":48167},"D:",[97,168453,168454],{"class":370},"\\d",[97,168456,168457],{"class":48167},"ata",[97,168459,168454],{"class":370},[97,168461,168457],{"class":48167},[97,168463,878],{"class":370},[97,168465,168466],{"class":48167},"txt",[97,168468,25323],{"class":118},[14,168470,168472],{"id":168471},"_83-open函数","8.3 open函数",[24,168474,5372],{},[87,168476,168478],{"className":30568,"code":168477,"language":30570,"meta":92,"style":92},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[94,168479,168480],{"__ignoreMap":92},[97,168481,168482,168484,168486,168488,168491,168493,168495,168497],{"class":99,"line":100},[97,168483,45544],{"class":5407},[97,168485,13755],{"class":319},[97,168487,146905],{"class":370},[97,168489,168490],{"class":103},"(文件路径, 打开模式, ",[97,168492,146920],{"class":5407},[97,168494,115],{"class":319},[97,168496,146925],{"class":118},[97,168498,329],{"class":103},[24,168500,168501],{},"常见模式：",[457,168503,168504,168513],{},[460,168505,168506],{},[463,168507,168508,168511],{},[466,168509,168510],{},"模式",[466,168512,26059],{},[504,168514,168515,168524,168533,168542,168552],{},[463,168516,168517,168521],{},[509,168518,168519],{},[94,168520,990],{},[509,168522,168523],{},"只读，文件不存在会报错",[463,168525,168526,168530],{},[509,168527,168528],{},[94,168529,1115],{},[509,168531,168532],{},"只写，文件不存在会创建，存在会清空",[463,168534,168535,168539],{},[509,168536,168537],{},[94,168538,558],{},[509,168540,168541],{},"追加，文件不存在会创建",[463,168543,168544,168549],{},[509,168545,168546],{},[94,168547,168548],{},"rb",[509,168550,168551],{},"二进制只读",[463,168553,168554,168559],{},[509,168555,168556],{},[94,168557,168558],{},"wb",[509,168560,168561],{},"二进制只写",[14,168563,168565],{"id":168564},"_84-读取文件","8.4 读取文件",[48,168567,168569],{"id":168568},"_841-read","8.4.1 read",[24,168571,168572],{},"一次读取全部内容：",[87,168574,168576],{"className":30568,"code":168575,"language":30570,"meta":92,"style":92},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[94,168577,168578,168604,168616,168623],{"__ignoreMap":92},[97,168579,168580,168582,168584,168586,168588,168590,168592,168594,168596,168598,168600,168602],{"class":99,"line":100},[97,168581,45544],{"class":5407},[97,168583,13755],{"class":319},[97,168585,146905],{"class":370},[97,168587,323],{"class":103},[97,168589,146910],{"class":118},[97,168591,12626],{"class":103},[97,168593,146915],{"class":118},[97,168595,12626],{"class":103},[97,168597,146920],{"class":5407},[97,168599,115],{"class":319},[97,168601,146925],{"class":118},[97,168603,329],{"class":103},[97,168605,168606,168609,168611,168613],{"class":99,"line":195},[97,168607,168608],{"class":103},"content ",[97,168610,115],{"class":319},[97,168612,148267],{"class":5407},[97,168614,168615],{"class":103},".read()\n",[97,168617,168618,168620],{"class":99,"line":241},[97,168619,30605],{"class":370},[97,168621,168622],{"class":103},"(content)\n",[97,168624,168625,168627],{"class":99,"line":1387},[97,168626,45544],{"class":5407},[97,168628,168629],{"class":103},".close()\n",[24,168631,168632],{},"可以指定读取字符数：",[87,168634,168636],{"className":30568,"code":168635,"language":30570,"meta":92,"style":92},"content = file.read(10)\n",[94,168637,168638],{"__ignoreMap":92},[97,168639,168640,168642,168644,168646,168649,168651],{"class":99,"line":100},[97,168641,168608],{"class":103},[97,168643,115],{"class":319},[97,168645,148267],{"class":5407},[97,168647,168648],{"class":103},".read(",[97,168650,766],{"class":370},[97,168652,329],{"class":103},[48,168654,168656],{"id":168655},"_842-readline","8.4.2 readline",[24,168658,168659],{},"一次读取一行：",[87,168661,168663],{"className":30568,"code":168662,"language":30570,"meta":92,"style":92},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[94,168664,168665,168691,168695,168706,168713,168717],{"__ignoreMap":92},[97,168666,168667,168669,168671,168673,168675,168677,168679,168681,168683,168685,168687,168689],{"class":99,"line":100},[97,168668,45544],{"class":5407},[97,168670,13755],{"class":319},[97,168672,146905],{"class":370},[97,168674,323],{"class":103},[97,168676,146910],{"class":118},[97,168678,12626],{"class":103},[97,168680,146915],{"class":118},[97,168682,12626],{"class":103},[97,168684,146920],{"class":5407},[97,168686,115],{"class":319},[97,168688,146925],{"class":118},[97,168690,329],{"class":103},[97,168692,168693],{"class":99,"line":195},[97,168694,2591],{"emptyLinePlaceholder":249},[97,168696,168697,168699,168701,168703],{"class":99,"line":241},[97,168698,147366],{"class":103},[97,168700,115],{"class":319},[97,168702,148267],{"class":5407},[97,168704,168705],{"class":103},".readline()\n",[97,168707,168708,168710],{"class":99,"line":1387},[97,168709,30605],{"class":370},[97,168711,168712],{"class":103},"(line)\n",[97,168714,168715],{"class":99,"line":1393},[97,168716,2591],{"emptyLinePlaceholder":249},[97,168718,168719,168721],{"class":99,"line":1407},[97,168720,45544],{"class":5407},[97,168722,168629],{"class":103},[48,168724,168726],{"id":168725},"_843-readlines","8.4.3 readlines",[24,168728,168729],{},"读取所有行，返回列表：",[87,168731,168733],{"className":30568,"code":168732,"language":30570,"meta":92,"style":92},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[94,168734,168735,168761,168773,168780],{"__ignoreMap":92},[97,168736,168737,168739,168741,168743,168745,168747,168749,168751,168753,168755,168757,168759],{"class":99,"line":100},[97,168738,45544],{"class":5407},[97,168740,13755],{"class":319},[97,168742,146905],{"class":370},[97,168744,323],{"class":103},[97,168746,146910],{"class":118},[97,168748,12626],{"class":103},[97,168750,146915],{"class":118},[97,168752,12626],{"class":103},[97,168754,146920],{"class":5407},[97,168756,115],{"class":319},[97,168758,146925],{"class":118},[97,168760,329],{"class":103},[97,168762,168763,168766,168768,168770],{"class":99,"line":195},[97,168764,168765],{"class":103},"lines ",[97,168767,115],{"class":319},[97,168769,148267],{"class":5407},[97,168771,168772],{"class":103},".readlines()\n",[97,168774,168775,168777],{"class":99,"line":241},[97,168776,30605],{"class":370},[97,168778,168779],{"class":103},"(lines)\n",[97,168781,168782,168784],{"class":99,"line":1387},[97,168783,45544],{"class":5407},[97,168785,168629],{"class":103},[24,168787,168788,168789,168792],{},"每一行通常带有换行符，可以用 ",[94,168790,168791],{},"strip()"," 去掉：",[87,168794,168796],{"className":30568,"code":168795,"language":30570,"meta":92,"style":92},"for line in lines:\n    print(line.strip())\n",[94,168797,168798,168810],{"__ignoreMap":92},[97,168799,168800,168802,168805,168807],{"class":99,"line":100},[97,168801,3216],{"class":319},[97,168803,168804],{"class":103}," line ",[97,168806,26233],{"class":319},[97,168808,168809],{"class":103}," lines:\n",[97,168811,168812,168814],{"class":99,"line":195},[97,168813,31489],{"class":370},[97,168815,168816],{"class":103},"(line.strip())\n",[48,168818,168820],{"id":168819},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[24,168822,168823],{},"推荐读取大文件时使用：",[87,168825,168827],{"className":30568,"code":168826,"language":30570,"meta":92,"style":92},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[94,168828,168829,168855,168859,168871,168877,168881],{"__ignoreMap":92},[97,168830,168831,168833,168835,168837,168839,168841,168843,168845,168847,168849,168851,168853],{"class":99,"line":100},[97,168832,45544],{"class":5407},[97,168834,13755],{"class":319},[97,168836,146905],{"class":370},[97,168838,323],{"class":103},[97,168840,146910],{"class":118},[97,168842,12626],{"class":103},[97,168844,146915],{"class":118},[97,168846,12626],{"class":103},[97,168848,146920],{"class":5407},[97,168850,115],{"class":319},[97,168852,146925],{"class":118},[97,168854,329],{"class":103},[97,168856,168857],{"class":99,"line":195},[97,168858,2591],{"emptyLinePlaceholder":249},[97,168860,168861,168863,168865,168867,168869],{"class":99,"line":241},[97,168862,3216],{"class":319},[97,168864,168804],{"class":103},[97,168866,26233],{"class":319},[97,168868,148267],{"class":5407},[97,168870,3930],{"class":103},[97,168872,168873,168875],{"class":99,"line":1387},[97,168874,31489],{"class":370},[97,168876,168816],{"class":103},[97,168878,168879],{"class":99,"line":1393},[97,168880,2591],{"emptyLinePlaceholder":249},[97,168882,168883,168885],{"class":99,"line":1407},[97,168884,45544],{"class":5407},[97,168886,168629],{"class":103},[14,168888,168890],{"id":168889},"_85-with语句","8.5 with语句",[24,168892,168893,168895],{},[94,168894,108017],{}," 会自动关闭文件，推荐使用。",[87,168897,168899],{"className":30568,"code":168898,"language":30570,"meta":92,"style":92},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[94,168900,168901,168931,168941],{"__ignoreMap":92},[97,168902,168903,168905,168907,168909,168911,168913,168915,168917,168919,168921,168923,168925,168927,168929],{"class":99,"line":100},[97,168904,108017],{"class":319},[97,168906,146905],{"class":370},[97,168908,323],{"class":103},[97,168910,146910],{"class":118},[97,168912,12626],{"class":103},[97,168914,146915],{"class":118},[97,168916,12626],{"class":103},[97,168918,146920],{"class":5407},[97,168920,115],{"class":319},[97,168922,146925],{"class":118},[97,168924,13905],{"class":103},[97,168926,31573],{"class":319},[97,168928,148267],{"class":5407},[97,168930,3930],{"class":103},[97,168932,168933,168935,168937,168939],{"class":99,"line":195},[97,168934,146937],{"class":103},[97,168936,115],{"class":319},[97,168938,148267],{"class":5407},[97,168940,168615],{"class":103},[97,168942,168943,168945],{"class":99,"line":241},[97,168944,31489],{"class":370},[97,168946,168622],{"class":103},[24,168948,168949],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,168951,168953],{"id":168952},"_86-写入文件","8.6 写入文件",[24,168955,168956,168958],{},[94,168957,1115],{}," 模式会清空原文件。",[87,168960,168962],{"className":30568,"code":168961,"language":30570,"meta":92,"style":92},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[94,168963,168964,168994,169011],{"__ignoreMap":92},[97,168965,168966,168968,168970,168972,168974,168976,168978,168980,168982,168984,168986,168988,168990,168992],{"class":99,"line":100},[97,168967,108017],{"class":319},[97,168969,146905],{"class":370},[97,168971,323],{"class":103},[97,168973,146910],{"class":118},[97,168975,12626],{"class":103},[97,168977,152090],{"class":118},[97,168979,12626],{"class":103},[97,168981,146920],{"class":5407},[97,168983,115],{"class":319},[97,168985,146925],{"class":118},[97,168987,13905],{"class":103},[97,168989,31573],{"class":319},[97,168991,148267],{"class":5407},[97,168993,3930],{"class":103},[97,168995,168996,168999,169002,169005,169007,169009],{"class":99,"line":195},[97,168997,168998],{"class":5407},"    file",[97,169000,169001],{"class":103},".write(",[97,169003,169004],{"class":118},"\"hello",[97,169006,156639],{"class":370},[97,169008,571],{"class":118},[97,169010,329],{"class":103},[97,169012,169013,169015,169017,169020,169022,169024],{"class":99,"line":241},[97,169014,168998],{"class":5407},[97,169016,169001],{"class":103},[97,169018,169019],{"class":118},"\"python",[97,169021,156639],{"class":370},[97,169023,571],{"class":118},[97,169025,329],{"class":103},[24,169027,169028],{},"写入多行：",[87,169030,169032],{"className":30568,"code":169031,"language":30570,"meta":92,"style":92},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[94,169033,169034,169069,169073,169104],{"__ignoreMap":92},[97,169035,169036,169038,169040,169042,169045,169047,169049,169051,169054,169056,169058,169060,169063,169065,169067],{"class":99,"line":100},[97,169037,168765],{"class":103},[97,169039,115],{"class":319},[97,169041,52410],{"class":103},[97,169043,169044],{"class":118},"\"小明,18",[97,169046,156639],{"class":370},[97,169048,571],{"class":118},[97,169050,12626],{"class":103},[97,169052,169053],{"class":118},"\"小红,17",[97,169055,156639],{"class":370},[97,169057,571],{"class":118},[97,169059,12626],{"class":103},[97,169061,169062],{"class":118},"\"小刚,19",[97,169064,156639],{"class":370},[97,169066,571],{"class":118},[97,169068,33436],{"class":103},[97,169070,169071],{"class":99,"line":195},[97,169072,2591],{"emptyLinePlaceholder":249},[97,169074,169075,169077,169079,169081,169084,169086,169088,169090,169092,169094,169096,169098,169100,169102],{"class":99,"line":241},[97,169076,108017],{"class":319},[97,169078,146905],{"class":370},[97,169080,323],{"class":103},[97,169082,169083],{"class":118},"\"students.txt\"",[97,169085,12626],{"class":103},[97,169087,152090],{"class":118},[97,169089,12626],{"class":103},[97,169091,146920],{"class":5407},[97,169093,115],{"class":319},[97,169095,146925],{"class":118},[97,169097,13905],{"class":103},[97,169099,31573],{"class":319},[97,169101,148267],{"class":5407},[97,169103,3930],{"class":103},[97,169105,169106,169108],{"class":99,"line":1387},[97,169107,168998],{"class":5407},[97,169109,169110],{"class":103},".writelines(lines)\n",[14,169112,169114],{"id":169113},"_87-追加文件","8.7 追加文件",[24,169116,169117,169119],{},[94,169118,558],{}," 模式不会清空原内容，而是在末尾追加。",[87,169121,169123],{"className":30568,"code":169122,"language":30570,"meta":92,"style":92},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[94,169124,169125,169156],{"__ignoreMap":92},[97,169126,169127,169129,169131,169133,169136,169138,169140,169142,169144,169146,169148,169150,169152,169154],{"class":99,"line":100},[97,169128,108017],{"class":319},[97,169130,146905],{"class":370},[97,169132,323],{"class":103},[97,169134,169135],{"class":118},"\"log.txt\"",[97,169137,12626],{"class":103},[97,169139,165439],{"class":118},[97,169141,12626],{"class":103},[97,169143,146920],{"class":5407},[97,169145,115],{"class":319},[97,169147,146925],{"class":118},[97,169149,13905],{"class":103},[97,169151,31573],{"class":319},[97,169153,148267],{"class":5407},[97,169155,3930],{"class":103},[97,169157,169158,169160,169162,169165,169167,169169],{"class":99,"line":195},[97,169159,168998],{"class":5407},[97,169161,169001],{"class":103},[97,169163,169164],{"class":118},"\"程序启动",[97,169166,156639],{"class":370},[97,169168,571],{"class":118},[97,169170,329],{"class":103},[24,169172,169173],{},"日志类文件常用追加模式。",[14,169175,169177],{"id":169176},"_88-文件编码","8.8 文件编码",[24,169179,169180],{},"编码决定文字如何保存为字节。",[24,169182,169183],{},"常见编码：",[138,169185,169186,169189],{},[70,169187,169188],{},"UTF-8：推荐。",[70,169190,169191],{},"GBK：部分 Windows 中文文件常见。",[24,169193,169194],{},"读取文件乱码时，可以尝试：",[87,169196,169198],{"className":30568,"code":169197,"language":30570,"meta":92,"style":92},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[94,169199,169200,169231],{"__ignoreMap":92},[97,169201,169202,169204,169206,169208,169210,169212,169214,169216,169218,169220,169223,169225,169227,169229],{"class":99,"line":100},[97,169203,108017],{"class":319},[97,169205,146905],{"class":370},[97,169207,323],{"class":103},[97,169209,146910],{"class":118},[97,169211,12626],{"class":103},[97,169213,146915],{"class":118},[97,169215,12626],{"class":103},[97,169217,146920],{"class":5407},[97,169219,115],{"class":319},[97,169221,169222],{"class":118},"\"gbk\"",[97,169224,13905],{"class":103},[97,169226,31573],{"class":319},[97,169228,148267],{"class":5407},[97,169230,3930],{"class":103},[97,169232,169233,169235,169237,169239],{"class":99,"line":195},[97,169234,146937],{"class":103},[97,169236,115],{"class":319},[97,169238,148267],{"class":5407},[97,169240,168615],{"class":103},[24,169242,169243],{},"写文件时建议统一 UTF-8：",[87,169245,169247],{"className":30568,"code":169246,"language":30570,"meta":92,"style":92},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[94,169248,169249,169279],{"__ignoreMap":92},[97,169250,169251,169253,169255,169257,169259,169261,169263,169265,169267,169269,169271,169273,169275,169277],{"class":99,"line":100},[97,169252,108017],{"class":319},[97,169254,146905],{"class":370},[97,169256,323],{"class":103},[97,169258,146910],{"class":118},[97,169260,12626],{"class":103},[97,169262,152090],{"class":118},[97,169264,12626],{"class":103},[97,169266,146920],{"class":5407},[97,169268,115],{"class":319},[97,169270,146925],{"class":118},[97,169272,13905],{"class":103},[97,169274,31573],{"class":319},[97,169276,148267],{"class":5407},[97,169278,3930],{"class":103},[97,169280,169281,169283,169285,169288],{"class":99,"line":195},[97,169282,168998],{"class":5407},[97,169284,169001],{"class":103},[97,169286,169287],{"class":118},"\"中文内容\"",[97,169289,329],{"class":103},[14,169291,169293],{"id":169292},"_89-pathlib","8.9 pathlib",[24,169295,169296,169299],{},[94,169297,169298],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[87,169301,169303],{"className":30568,"code":169302,"language":30570,"meta":92,"style":92},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[94,169304,169305,169315,169319,169337],{"__ignoreMap":92},[97,169306,169307,169309,169311,169313],{"class":99,"line":100},[97,169308,30927],{"class":319},[97,169310,108495],{"class":103},[97,169312,30582],{"class":319},[97,169314,108500],{"class":103},[97,169316,169317],{"class":99,"line":195},[97,169318,2591],{"emptyLinePlaceholder":249},[97,169320,169321,169323,169325,169327,169330,169332,169334],{"class":99,"line":241},[97,169322,168425],{"class":103},[97,169324,115],{"class":319},[97,169326,108729],{"class":103},[97,169328,169329],{"class":118},"\"data\"",[97,169331,13905],{"class":103},[97,169333,904],{"class":319},[97,169335,169336],{"class":118}," \"students.txt\"\n",[97,169338,169339,169341],{"class":99,"line":1387},[97,169340,30605],{"class":370},[97,169342,169343],{"class":103},"(path)\n",[24,169345,169346],{},"创建目录：",[87,169348,169350],{"className":30568,"code":169349,"language":30570,"meta":92,"style":92},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[94,169351,169352,169362,169366,169379],{"__ignoreMap":92},[97,169353,169354,169356,169358,169360],{"class":99,"line":100},[97,169355,30927],{"class":319},[97,169357,108495],{"class":103},[97,169359,30582],{"class":319},[97,169361,108500],{"class":103},[97,169363,169364],{"class":99,"line":195},[97,169365,2591],{"emptyLinePlaceholder":249},[97,169367,169368,169371,169373,169375,169377],{"class":99,"line":241},[97,169369,169370],{"class":103},"data_dir ",[97,169372,115],{"class":319},[97,169374,108729],{"class":103},[97,169376,169329],{"class":118},[97,169378,329],{"class":103},[97,169380,169381,169384,169387,169389,169391],{"class":99,"line":1387},[97,169382,169383],{"class":103},"data_dir.mkdir(",[97,169385,169386],{"class":5407},"exist_ok",[97,169388,115],{"class":319},[97,169390,31666],{"class":370},[97,169392,329],{"class":103},[24,169394,169395],{},"判断文件是否存在：",[87,169397,169399],{"className":30568,"code":169398,"language":30570,"meta":92,"style":92},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[94,169400,169401,169414,169418,169425],{"__ignoreMap":92},[97,169402,169403,169405,169407,169409,169412],{"class":99,"line":100},[97,169404,168425],{"class":103},[97,169406,115],{"class":319},[97,169408,108729],{"class":103},[97,169410,169411],{"class":118},"\"data\u002Fstudents.txt\"",[97,169413,329],{"class":103},[97,169415,169416],{"class":99,"line":195},[97,169417,2591],{"emptyLinePlaceholder":249},[97,169419,169420,169422],{"class":99,"line":241},[97,169421,1723],{"class":319},[97,169423,169424],{"class":103}," path.exists():\n",[97,169426,169427,169429,169431,169434],{"class":99,"line":1387},[97,169428,31489],{"class":370},[97,169430,323],{"class":103},[97,169432,169433],{"class":118},"\"文件存在\"",[97,169435,329],{"class":103},[24,169437,169438],{},"读写文本：",[87,169440,169442],{"className":30568,"code":169441,"language":30570,"meta":92,"style":92},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[94,169443,169444,169456,169460,169477,169494],{"__ignoreMap":92},[97,169445,169446,169448,169450,169452,169454],{"class":99,"line":100},[97,169447,168425],{"class":103},[97,169449,115],{"class":319},[97,169451,108729],{"class":103},[97,169453,146910],{"class":118},[97,169455,329],{"class":103},[97,169457,169458],{"class":99,"line":195},[97,169459,2591],{"emptyLinePlaceholder":249},[97,169461,169462,169465,169467,169469,169471,169473,169475],{"class":99,"line":241},[97,169463,169464],{"class":103},"path.write_text(",[97,169466,145990],{"class":118},[97,169468,12626],{"class":103},[97,169470,146920],{"class":5407},[97,169472,115],{"class":319},[97,169474,146925],{"class":118},[97,169476,329],{"class":103},[97,169478,169479,169481,169483,169486,169488,169490,169492],{"class":99,"line":1387},[97,169480,168608],{"class":103},[97,169482,115],{"class":319},[97,169484,169485],{"class":103}," path.read_text(",[97,169487,146920],{"class":5407},[97,169489,115],{"class":319},[97,169491,146925],{"class":118},[97,169493,329],{"class":103},[97,169495,169496,169498],{"class":99,"line":1393},[97,169497,30605],{"class":370},[97,169499,168622],{"class":103},[14,169501,169503],{"id":169502},"_810-json文件","8.10 JSON文件",[24,169505,169506],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[87,169508,169510],{"className":30568,"code":169509,"language":30570,"meta":92,"style":92},"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",[94,169511,169512,169518,169522,169530,169540,169550,169558,169562,169566,169591],{"__ignoreMap":92},[97,169513,169514,169516],{"class":99,"line":100},[97,169515,30582],{"class":319},[97,169517,147205],{"class":103},[97,169519,169520],{"class":99,"line":195},[97,169521,2591],{"emptyLinePlaceholder":249},[97,169523,169524,169526,169528],{"class":99,"line":241},[97,169525,149595],{"class":103},[97,169527,115],{"class":319},[97,169529,15762],{"class":103},[97,169531,169532,169534,169536,169538],{"class":99,"line":1387},[97,169533,147134],{"class":118},[97,169535,51621],{"class":103},[97,169537,150002],{"class":118},[97,169539,31656],{"class":103},[97,169541,169542,169544,169546,169548],{"class":99,"line":1393},[97,169543,164651],{"class":118},[97,169545,51621],{"class":103},[97,169547,970],{"class":370},[97,169549,31656],{"class":103},[97,169551,169552,169554,169556],{"class":99,"line":1407},[97,169553,164662],{"class":118},[97,169555,51621],{"class":103},[97,169557,164667],{"class":370},[97,169559,169560],{"class":99,"line":1413},[97,169561,1757],{"class":103},[97,169563,169564],{"class":99,"line":1504},[97,169565,2591],{"emptyLinePlaceholder":249},[97,169567,169568,169570,169572,169575,169577,169579,169581,169583,169585,169587,169589],{"class":99,"line":1510},[97,169569,156558],{"class":103},[97,169571,115],{"class":319},[97,169573,169574],{"class":103}," json.dumps(student, ",[97,169576,147251],{"class":5407},[97,169578,115],{"class":319},[97,169580,34177],{"class":370},[97,169582,12626],{"class":103},[97,169584,152126],{"class":5407},[97,169586,115],{"class":319},[97,169588,398],{"class":370},[97,169590,329],{"class":103},[97,169592,169593,169595],{"class":99,"line":1522},[97,169594,30605],{"class":370},[97,169596,164185],{"class":103},[24,169598,169599],{},"写入 JSON 文件：",[87,169601,169603],{"className":30568,"code":169602,"language":30570,"meta":92,"style":92},"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",[94,169604,169605,169611,169615,169623,169651,169679,169683,169687,169717],{"__ignoreMap":92},[97,169606,169607,169609],{"class":99,"line":100},[97,169608,30582],{"class":319},[97,169610,147205],{"class":103},[97,169612,169613],{"class":99,"line":195},[97,169614,2591],{"emptyLinePlaceholder":249},[97,169616,169617,169619,169621],{"class":99,"line":241},[97,169618,159830],{"class":103},[97,169620,115],{"class":319},[97,169622,55631],{"class":103},[97,169624,169625,169627,169629,169631,169633,169635,169637,169639,169641,169643,169645,169647,169649],{"class":99,"line":1387},[97,169626,148499],{"class":103},[97,169628,62863],{"class":118},[97,169630,51621],{"class":103},[97,169632,150002],{"class":118},[97,169634,12626],{"class":103},[97,169636,69308],{"class":118},[97,169638,51621],{"class":103},[97,169640,970],{"class":370},[97,169642,12626],{"class":103},[97,169644,151586],{"class":118},[97,169646,51621],{"class":103},[97,169648,1308],{"class":370},[97,169650,5121],{"class":103},[97,169652,169653,169655,169657,169659,169661,169663,169665,169667,169669,169671,169673,169675,169677],{"class":99,"line":1393},[97,169654,148499],{"class":103},[97,169656,62863],{"class":118},[97,169658,51621],{"class":103},[97,169660,151050],{"class":118},[97,169662,12626],{"class":103},[97,169664,69308],{"class":118},[97,169666,51621],{"class":103},[97,169668,945],{"class":370},[97,169670,12626],{"class":103},[97,169672,151586],{"class":118},[97,169674,51621],{"class":103},[97,169676,1131],{"class":370},[97,169678,5121],{"class":103},[97,169680,169681],{"class":99,"line":1407},[97,169682,33436],{"class":103},[97,169684,169685],{"class":99,"line":1413},[97,169686,2591],{"emptyLinePlaceholder":249},[97,169688,169689,169691,169693,169695,169697,169699,169701,169703,169705,169707,169709,169711,169713,169715],{"class":99,"line":1504},[97,169690,108017],{"class":319},[97,169692,146905],{"class":370},[97,169694,323],{"class":103},[97,169696,151945],{"class":118},[97,169698,12626],{"class":103},[97,169700,152090],{"class":118},[97,169702,12626],{"class":103},[97,169704,146920],{"class":5407},[97,169706,115],{"class":319},[97,169708,146925],{"class":118},[97,169710,13905],{"class":103},[97,169712,31573],{"class":319},[97,169714,148267],{"class":5407},[97,169716,3930],{"class":103},[97,169718,169719,169722,169724,169726,169728,169730,169732,169734,169736,169738,169740],{"class":99,"line":1510},[97,169720,169721],{"class":103},"    json.dump(students, ",[97,169723,45544],{"class":5407},[97,169725,12626],{"class":103},[97,169727,147251],{"class":5407},[97,169729,115],{"class":319},[97,169731,34177],{"class":370},[97,169733,12626],{"class":103},[97,169735,152126],{"class":5407},[97,169737,115],{"class":319},[97,169739,398],{"class":370},[97,169741,329],{"class":103},[24,169743,169744],{},"读取 JSON 文件：",[87,169746,169748],{"className":30568,"code":169747,"language":30570,"meta":92,"style":92},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[94,169749,169750,169756,169760,169790,169802,169806],{"__ignoreMap":92},[97,169751,169752,169754],{"class":99,"line":100},[97,169753,30582],{"class":319},[97,169755,147205],{"class":103},[97,169757,169758],{"class":99,"line":195},[97,169759,2591],{"emptyLinePlaceholder":249},[97,169761,169762,169764,169766,169768,169770,169772,169774,169776,169778,169780,169782,169784,169786,169788],{"class":99,"line":241},[97,169763,108017],{"class":319},[97,169765,146905],{"class":370},[97,169767,323],{"class":103},[97,169769,151945],{"class":118},[97,169771,12626],{"class":103},[97,169773,146915],{"class":118},[97,169775,12626],{"class":103},[97,169777,146920],{"class":5407},[97,169779,115],{"class":319},[97,169781,146925],{"class":118},[97,169783,13905],{"class":103},[97,169785,31573],{"class":319},[97,169787,148267],{"class":5407},[97,169789,3930],{"class":103},[97,169791,169792,169794,169796,169798,169800],{"class":99,"line":1387},[97,169793,153151],{"class":103},[97,169795,115],{"class":319},[97,169797,148278],{"class":103},[97,169799,45544],{"class":5407},[97,169801,329],{"class":103},[97,169803,169804],{"class":99,"line":1393},[97,169805,2591],{"emptyLinePlaceholder":249},[97,169807,169808,169810],{"class":99,"line":1407},[97,169809,30605],{"class":370},[97,169811,165109],{"class":103},[14,169813,169815],{"id":169814},"_811-csv文件","8.11 CSV文件",[24,169817,169818],{},"CSV 是逗号分隔值，常用于表格数据。",[24,169820,169821],{},"写入 CSV：",[87,169823,169825],{"className":30568,"code":169824,"language":30570,"meta":92,"style":92},"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",[94,169826,169827,169834,169838,169846,169864,169880,169896,169900,169904,169944,169958],{"__ignoreMap":92},[97,169828,169829,169831],{"class":99,"line":100},[97,169830,30582],{"class":319},[97,169832,169833],{"class":103}," csv\n",[97,169835,169836],{"class":99,"line":195},[97,169837,2591],{"emptyLinePlaceholder":249},[97,169839,169840,169842,169844],{"class":99,"line":241},[97,169841,159830],{"class":103},[97,169843,115],{"class":319},[97,169845,55631],{"class":103},[97,169847,169848,169851,169853,169855,169857,169859,169862],{"class":99,"line":1387},[97,169849,169850],{"class":103},"    [",[97,169852,73283],{"class":118},[97,169854,12626],{"class":103},[97,169856,73316],{"class":118},[97,169858,12626],{"class":103},[97,169860,169861],{"class":118},"\"成绩\"",[97,169863,88020],{"class":103},[97,169865,169866,169868,169870,169872,169874,169876,169878],{"class":99,"line":1393},[97,169867,169850],{"class":103},[97,169869,150002],{"class":118},[97,169871,12626],{"class":103},[97,169873,970],{"class":370},[97,169875,12626],{"class":103},[97,169877,1308],{"class":370},[97,169879,88020],{"class":103},[97,169881,169882,169884,169886,169888,169890,169892,169894],{"class":99,"line":1407},[97,169883,169850],{"class":103},[97,169885,151050],{"class":118},[97,169887,12626],{"class":103},[97,169889,945],{"class":370},[97,169891,12626],{"class":103},[97,169893,1131],{"class":370},[97,169895,88020],{"class":103},[97,169897,169898],{"class":99,"line":1413},[97,169899,33436],{"class":103},[97,169901,169902],{"class":99,"line":1504},[97,169903,2591],{"emptyLinePlaceholder":249},[97,169905,169906,169908,169910,169912,169915,169917,169919,169921,169923,169925,169927,169929,169932,169934,169936,169938,169940,169942],{"class":99,"line":1510},[97,169907,108017],{"class":319},[97,169909,146905],{"class":370},[97,169911,323],{"class":103},[97,169913,169914],{"class":118},"\"students.csv\"",[97,169916,12626],{"class":103},[97,169918,152090],{"class":118},[97,169920,12626],{"class":103},[97,169922,146920],{"class":5407},[97,169924,115],{"class":319},[97,169926,146925],{"class":118},[97,169928,12626],{"class":103},[97,169930,169931],{"class":5407},"newline",[97,169933,115],{"class":319},[97,169935,7843],{"class":118},[97,169937,13905],{"class":103},[97,169939,31573],{"class":319},[97,169941,148267],{"class":5407},[97,169943,3930],{"class":103},[97,169945,169946,169949,169951,169954,169956],{"class":99,"line":1522},[97,169947,169948],{"class":103},"    writer ",[97,169950,115],{"class":319},[97,169952,169953],{"class":103}," csv.writer(",[97,169955,45544],{"class":5407},[97,169957,329],{"class":103},[97,169959,169960],{"class":99,"line":1804},[97,169961,169962],{"class":103},"    writer.writerows(students)\n",[24,169964,169965],{},"读取 CSV：",[87,169967,169969],{"className":30568,"code":169968,"language":30570,"meta":92,"style":92},"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",[94,169970,169971,169977,169981,170011,170025,170037],{"__ignoreMap":92},[97,169972,169973,169975],{"class":99,"line":100},[97,169974,30582],{"class":319},[97,169976,169833],{"class":103},[97,169978,169979],{"class":99,"line":195},[97,169980,2591],{"emptyLinePlaceholder":249},[97,169982,169983,169985,169987,169989,169991,169993,169995,169997,169999,170001,170003,170005,170007,170009],{"class":99,"line":241},[97,169984,108017],{"class":319},[97,169986,146905],{"class":370},[97,169988,323],{"class":103},[97,169990,169914],{"class":118},[97,169992,12626],{"class":103},[97,169994,146915],{"class":118},[97,169996,12626],{"class":103},[97,169998,146920],{"class":5407},[97,170000,115],{"class":319},[97,170002,146925],{"class":118},[97,170004,13905],{"class":103},[97,170006,31573],{"class":319},[97,170008,148267],{"class":5407},[97,170010,3930],{"class":103},[97,170012,170013,170016,170018,170021,170023],{"class":99,"line":1387},[97,170014,170015],{"class":103},"    reader ",[97,170017,115],{"class":319},[97,170019,170020],{"class":103}," csv.reader(",[97,170022,45544],{"class":5407},[97,170024,329],{"class":103},[97,170026,170027,170029,170032,170034],{"class":99,"line":1393},[97,170028,3392],{"class":319},[97,170030,170031],{"class":103}," row ",[97,170033,26233],{"class":319},[97,170035,170036],{"class":103}," reader:\n",[97,170038,170039,170041],{"class":99,"line":1407},[97,170040,32641],{"class":370},[97,170042,170043],{"class":103},"(row)\n",[24,170045,170046],{},"使用字典写入：",[87,170048,170050],{"className":30568,"code":170049,"language":30570,"meta":92,"style":92},"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",[94,170051,170052,170058,170062,170070,170098,170126,170130,170134,170172,170193,170214,170219],{"__ignoreMap":92},[97,170053,170054,170056],{"class":99,"line":100},[97,170055,30582],{"class":319},[97,170057,169833],{"class":103},[97,170059,170060],{"class":99,"line":195},[97,170061,2591],{"emptyLinePlaceholder":249},[97,170063,170064,170066,170068],{"class":99,"line":241},[97,170065,159830],{"class":103},[97,170067,115],{"class":319},[97,170069,55631],{"class":103},[97,170071,170072,170074,170076,170078,170080,170082,170084,170086,170088,170090,170092,170094,170096],{"class":99,"line":1387},[97,170073,148499],{"class":103},[97,170075,62863],{"class":118},[97,170077,51621],{"class":103},[97,170079,150002],{"class":118},[97,170081,12626],{"class":103},[97,170083,69308],{"class":118},[97,170085,51621],{"class":103},[97,170087,970],{"class":370},[97,170089,12626],{"class":103},[97,170091,151586],{"class":118},[97,170093,51621],{"class":103},[97,170095,1308],{"class":370},[97,170097,5121],{"class":103},[97,170099,170100,170102,170104,170106,170108,170110,170112,170114,170116,170118,170120,170122,170124],{"class":99,"line":1393},[97,170101,148499],{"class":103},[97,170103,62863],{"class":118},[97,170105,51621],{"class":103},[97,170107,151050],{"class":118},[97,170109,12626],{"class":103},[97,170111,69308],{"class":118},[97,170113,51621],{"class":103},[97,170115,945],{"class":370},[97,170117,12626],{"class":103},[97,170119,151586],{"class":118},[97,170121,51621],{"class":103},[97,170123,1131],{"class":370},[97,170125,5121],{"class":103},[97,170127,170128],{"class":99,"line":1407},[97,170129,33436],{"class":103},[97,170131,170132],{"class":99,"line":1413},[97,170133,2591],{"emptyLinePlaceholder":249},[97,170135,170136,170138,170140,170142,170144,170146,170148,170150,170152,170154,170156,170158,170160,170162,170164,170166,170168,170170],{"class":99,"line":1504},[97,170137,108017],{"class":319},[97,170139,146905],{"class":370},[97,170141,323],{"class":103},[97,170143,169914],{"class":118},[97,170145,12626],{"class":103},[97,170147,152090],{"class":118},[97,170149,12626],{"class":103},[97,170151,146920],{"class":5407},[97,170153,115],{"class":319},[97,170155,146925],{"class":118},[97,170157,12626],{"class":103},[97,170159,169931],{"class":5407},[97,170161,115],{"class":319},[97,170163,7843],{"class":118},[97,170165,13905],{"class":103},[97,170167,31573],{"class":319},[97,170169,148267],{"class":5407},[97,170171,3930],{"class":103},[97,170173,170174,170177,170179,170181,170183,170185,170187,170189,170191],{"class":99,"line":1510},[97,170175,170176],{"class":103},"    fieldnames ",[97,170178,115],{"class":319},[97,170180,52410],{"class":103},[97,170182,62863],{"class":118},[97,170184,12626],{"class":103},[97,170186,69308],{"class":118},[97,170188,12626],{"class":103},[97,170190,151586],{"class":118},[97,170192,33436],{"class":103},[97,170194,170195,170197,170199,170202,170204,170206,170209,170211],{"class":99,"line":1522},[97,170196,169948],{"class":103},[97,170198,115],{"class":319},[97,170200,170201],{"class":103}," csv.DictWriter(",[97,170203,45544],{"class":5407},[97,170205,12626],{"class":103},[97,170207,170208],{"class":5407},"fieldnames",[97,170210,115],{"class":319},[97,170212,170213],{"class":103},"fieldnames)\n",[97,170215,170216],{"class":99,"line":1804},[97,170217,170218],{"class":103},"    writer.writeheader()\n",[97,170220,170221],{"class":99,"line":1809},[97,170222,169962],{"class":103},[14,170224,170226],{"id":170225},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[24,170228,123476],{},[138,170230,170231,170234,170237],{},[70,170232,170233],{},"读取文本文件。",[70,170235,170236],{},"统计每个单词出现次数。",[70,170238,170239],{},"输出出现次数最多的前 10 个单词。",[24,170241,10226],{},[87,170243,170245],{"className":30568,"code":170244,"language":30570,"meta":92,"style":92},"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",[94,170246,170247,170257,170261,170274,170290,170294,170304,170313,170317,170329,170349,170358,170362,170380,170384,170414,170418,170434],{"__ignoreMap":92},[97,170248,170249,170251,170253,170255],{"class":99,"line":100},[97,170250,30927],{"class":319},[97,170252,108495],{"class":103},[97,170254,30582],{"class":319},[97,170256,108500],{"class":103},[97,170258,170259],{"class":99,"line":195},[97,170260,2591],{"emptyLinePlaceholder":249},[97,170262,170263,170265,170267,170269,170272],{"class":99,"line":241},[97,170264,168425],{"class":103},[97,170266,115],{"class":319},[97,170268,108729],{"class":103},[97,170270,170271],{"class":118},"\"article.txt\"",[97,170273,329],{"class":103},[97,170275,170276,170278,170280,170282,170284,170286,170288],{"class":99,"line":1387},[97,170277,168608],{"class":103},[97,170279,115],{"class":319},[97,170281,169485],{"class":103},[97,170283,146920],{"class":5407},[97,170285,115],{"class":319},[97,170287,146925],{"class":118},[97,170289,329],{"class":103},[97,170291,170292],{"class":99,"line":1393},[97,170293,2591],{"emptyLinePlaceholder":249},[97,170295,170296,170299,170301],{"class":99,"line":1407},[97,170297,170298],{"class":103},"words ",[97,170300,115],{"class":319},[97,170302,170303],{"class":103}," content.lower().split()\n",[97,170305,170306,170309,170311],{"class":99,"line":1413},[97,170307,170308],{"class":103},"counter ",[97,170310,115],{"class":319},[97,170312,88052],{"class":103},[97,170314,170315],{"class":99,"line":1504},[97,170316,2591],{"emptyLinePlaceholder":249},[97,170318,170319,170321,170324,170326],{"class":99,"line":1510},[97,170320,3216],{"class":319},[97,170322,170323],{"class":103}," word ",[97,170325,26233],{"class":319},[97,170327,170328],{"class":103}," words:\n",[97,170330,170331,170334,170336,170339,170342,170344,170347],{"class":99,"line":1522},[97,170332,170333],{"class":103},"    word ",[97,170335,115],{"class":319},[97,170337,170338],{"class":103}," word.strip(",[97,170340,170341],{"class":118},"\".,!?;:",[97,170343,156609],{"class":370},[97,170345,170346],{"class":118},"'()[]\"",[97,170348,329],{"class":103},[97,170350,170351,170353,170355],{"class":99,"line":1804},[97,170352,3292],{"class":319},[97,170354,39120],{"class":319},[97,170356,170357],{"class":103}," word:\n",[97,170359,170360],{"class":99,"line":1809},[97,170361,148626],{"class":319},[97,170363,170364,170367,170369,170372,170374,170376,170378],{"class":99,"line":1815},[97,170365,170366],{"class":103},"    counter[word] ",[97,170368,115],{"class":319},[97,170370,170371],{"class":103}," counter.get(word, ",[97,170373,511],{"class":370},[97,170375,13905],{"class":103},[97,170377,801],{"class":319},[97,170379,55883],{"class":370},[97,170381,170382],{"class":99,"line":1820},[97,170383,2591],{"emptyLinePlaceholder":249},[97,170385,170386,170389,170391,170393,170396,170398,170400,170402,170404,170406,170408,170410,170412],{"class":99,"line":1834},[97,170387,170388],{"class":103},"items ",[97,170390,115],{"class":319},[97,170392,163718],{"class":370},[97,170394,170395],{"class":103},"(counter.items(), ",[97,170397,154060],{"class":5407},[97,170399,154063],{"class":319},[97,170401,154066],{"class":103},[97,170403,537],{"class":370},[97,170405,112386],{"class":103},[97,170407,163642],{"class":5407},[97,170409,115],{"class":319},[97,170411,31666],{"class":370},[97,170413,329],{"class":103},[97,170415,170416],{"class":99,"line":1839},[97,170417,2591],{"emptyLinePlaceholder":249},[97,170419,170420,170422,170425,170427,170430,170432],{"class":99,"line":1845},[97,170421,3216],{"class":319},[97,170423,170424],{"class":103}," word, count ",[97,170426,26233],{"class":319},[97,170428,170429],{"class":103}," items[:",[97,170431,766],{"class":370},[97,170433,165869],{"class":103},[97,170435,170436,170438],{"class":99,"line":1866},[97,170437,31489],{"class":370},[97,170439,170440],{"class":103},"(word, count)\n",[14,170442,170444],{"id":170443},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[87,170446,170448],{"className":30568,"code":170447,"language":30570,"meta":92,"style":92},"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",[94,170449,170450,170456,170466,170470,170482,170486,170490,170498,170508,170514,170518,170548,170558,170562,170566,170574,170604,170628,170632,170636,170644,170673,170678],{"__ignoreMap":92},[97,170451,170452,170454],{"class":99,"line":100},[97,170453,30582],{"class":319},[97,170455,147205],{"class":103},[97,170457,170458,170460,170462,170464],{"class":99,"line":195},[97,170459,30927],{"class":319},[97,170461,108495],{"class":103},[97,170463,30582],{"class":319},[97,170465,108500],{"class":103},[97,170467,170468],{"class":99,"line":241},[97,170469,2591],{"emptyLinePlaceholder":249},[97,170471,170472,170474,170476,170478,170480],{"class":99,"line":1387},[97,170473,151938],{"class":370},[97,170475,13755],{"class":319},[97,170477,108729],{"class":103},[97,170479,151945],{"class":118},[97,170481,329],{"class":103},[97,170483,170484],{"class":99,"line":1393},[97,170485,2591],{"emptyLinePlaceholder":249},[97,170487,170488],{"class":99,"line":1407},[97,170489,2591],{"emptyLinePlaceholder":249},[97,170491,170492,170494,170496],{"class":99,"line":1413},[97,170493,32137],{"class":319},[97,170495,151962],{"class":111},[97,170497,32143],{"class":103},[97,170499,170500,170502,170504,170506],{"class":99,"line":1504},[97,170501,3292],{"class":319},[97,170503,39120],{"class":319},[97,170505,151973],{"class":370},[97,170507,151976],{"class":103},[97,170509,170510,170512],{"class":99,"line":1510},[97,170511,14943],{"class":319},[97,170513,52022],{"class":103},[97,170515,170516],{"class":99,"line":1522},[97,170517,2591],{"emptyLinePlaceholder":249},[97,170519,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538,170540,170542,170544,170546],{"class":99,"line":1804},[97,170521,34368],{"class":319},[97,170523,146905],{"class":370},[97,170525,323],{"class":103},[97,170527,151938],{"class":370},[97,170529,12626],{"class":103},[97,170531,146915],{"class":118},[97,170533,12626],{"class":103},[97,170535,146920],{"class":5407},[97,170537,115],{"class":319},[97,170539,146925],{"class":118},[97,170541,13905],{"class":103},[97,170543,31573],{"class":319},[97,170545,148267],{"class":5407},[97,170547,3930],{"class":103},[97,170549,170550,170552,170554,170556],{"class":99,"line":1809},[97,170551,14943],{"class":319},[97,170553,148278],{"class":103},[97,170555,45544],{"class":5407},[97,170557,329],{"class":103},[97,170559,170560],{"class":99,"line":1815},[97,170561,2591],{"emptyLinePlaceholder":249},[97,170563,170564],{"class":99,"line":1820},[97,170565,2591],{"emptyLinePlaceholder":249},[97,170567,170568,170570,170572],{"class":99,"line":1834},[97,170569,32137],{"class":319},[97,170571,152072],{"class":111},[97,170573,152075],{"class":103},[97,170575,170576,170578,170580,170582,170584,170586,170588,170590,170592,170594,170596,170598,170600,170602],{"class":99,"line":1839},[97,170577,34368],{"class":319},[97,170579,146905],{"class":370},[97,170581,323],{"class":103},[97,170583,151938],{"class":370},[97,170585,12626],{"class":103},[97,170587,152090],{"class":118},[97,170589,12626],{"class":103},[97,170591,146920],{"class":5407},[97,170593,115],{"class":319},[97,170595,146925],{"class":118},[97,170597,13905],{"class":103},[97,170599,31573],{"class":319},[97,170601,148267],{"class":5407},[97,170603,3930],{"class":103},[97,170605,170606,170608,170610,170612,170614,170616,170618,170620,170622,170624,170626],{"class":99,"line":1845},[97,170607,152111],{"class":103},[97,170609,45544],{"class":5407},[97,170611,12626],{"class":103},[97,170613,147251],{"class":5407},[97,170615,115],{"class":319},[97,170617,34177],{"class":370},[97,170619,12626],{"class":103},[97,170621,152126],{"class":5407},[97,170623,115],{"class":319},[97,170625,398],{"class":370},[97,170627,329],{"class":103},[97,170629,170630],{"class":99,"line":1866},[97,170631,2591],{"emptyLinePlaceholder":249},[97,170633,170634],{"class":99,"line":1871},[97,170635,2591],{"emptyLinePlaceholder":249},[97,170637,170638,170640,170642],{"class":99,"line":1885},[97,170639,159830],{"class":103},[97,170641,115],{"class":319},[97,170643,153156],{"class":103},[97,170645,170646,170649,170651,170653,170655,170657,170659,170661,170663,170665,170667,170669,170671],{"class":99,"line":1890},[97,170647,170648],{"class":103},"students.append({",[97,170650,62863],{"class":118},[97,170652,51621],{"class":103},[97,170654,150002],{"class":118},[97,170656,12626],{"class":103},[97,170658,69308],{"class":118},[97,170660,51621],{"class":103},[97,170662,970],{"class":370},[97,170664,12626],{"class":103},[97,170666,151586],{"class":118},[97,170668,51621],{"class":103},[97,170670,1308],{"class":370},[97,170672,165266],{"class":103},[97,170674,170675],{"class":99,"line":1919},[97,170676,170677],{"class":103},"save_students(students)\n",[97,170679,170680,170682,170684,170687],{"class":99,"line":1924},[97,170681,30605],{"class":370},[97,170683,323],{"class":103},[97,170685,170686],{"class":118},"\"保存成功\"",[97,170688,329],{"class":103},[14,170690,170692],{"id":170691},"_814-易错点","8.14 易错点",[138,170694,170695,170699,170705,170710,170717,170724],{},[70,170696,170697,168958],{},[94,170698,1115],{},[70,170700,170701,170702,28575],{},"读写中文要指定 ",[94,170703,170704],{},"encoding=\"utf-8\"",[70,170706,170707,170708,28575],{},"打开文件后要关闭，推荐使用 ",[94,170709,108017],{},[70,170711,170712,170713,170716],{},"读取大文件不要直接 ",[94,170714,170715],{},"read()"," 全部内容。",[70,170718,170719,170720,170723],{},"Windows 写 CSV 时建议加 ",[94,170721,170722],{},"newline=\"\"","，避免空行。",[70,170725,170726],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170728,170730],{"id":170729},"_815-本章练习","8.15 本章练习",[138,170732,170733,170740,170745,170748,170751],{},[70,170734,170735,170736,170739],{},"写入一个 ",[94,170737,170738],{},"students.txt","，每行保存一个学生姓名。",[70,170741,104539,170742,170744],{},[94,170743,170738],{}," 并输出所有学生。",[70,170746,170747],{},"把学生列表保存为 JSON 文件。",[70,170749,170750],{},"从 JSON 文件读取学生数据，计算平均分。",[70,170752,170753,170754,170757,170758,170761],{},"写一个日志函数 ",[94,170755,170756],{},"write_log(message)","，每次调用向 ",[94,170759,170760],{},"app.log"," 追加一行。",[231,170763,170764],{},"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":92,"searchDepth":195,"depth":195,"links":170766},[170767,170768,170772,170773,170779,170780,170781,170782,170783,170784,170785,170786,170787,170788,170789],{"id":168278,"depth":195,"text":168279},{"id":168319,"depth":195,"text":168320,"children":170769},[170770,170771],{"id":168323,"depth":241,"text":168324},{"id":168357,"depth":241,"text":168358},{"id":168471,"depth":195,"text":168472},{"id":168564,"depth":195,"text":168565,"children":170774},[170775,170776,170777,170778],{"id":168568,"depth":241,"text":168569},{"id":168655,"depth":241,"text":168656},{"id":168725,"depth":241,"text":168726},{"id":168819,"depth":241,"text":168820},{"id":168889,"depth":195,"text":168890},{"id":168952,"depth":195,"text":168953},{"id":169113,"depth":195,"text":169114},{"id":169176,"depth":195,"text":169177},{"id":169292,"depth":195,"text":169293},{"id":169502,"depth":195,"text":169503},{"id":169814,"depth":195,"text":169815},{"id":170225,"depth":195,"text":170226},{"id":170443,"depth":195,"text":170444},{"id":170691,"depth":195,"text":170692},{"id":170729,"depth":195,"text":170730},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168270,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170796,"title":170797,"body":170798,"description":246,"extension":247,"meta":172984,"navigation":249,"path":172985,"seo":172986,"stem":172987,"__hash__":172988},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170799,"toc":172951},[170800,170803,170807,170810,170813,170905,170907,170926,170931,170935,170938,170941,170970,170977,170980,170984,170987,171016,171018,171070,171076,171129,171133,171231,171234,171301,171305,171362,171364,171370,171374,171379,171385,171476,171481,171485,171488,171566,171569,171607,171611,171729,171732,171736,171739,171784,171787,171791,171796,171802,171852,171855,171886,171890,171894,171924,171928,171963,171967,172002,172042,172046,172062,172065,172069,172073,172152,172156,172197,172201,172256,172260,172294,172298,172328,172337,172344,172350,172407,172410,172418,172421,172425,172432,172435,172441,172444,172461,172466,172470,172476,172489,172492,172529,172532,172543,172546,172560,172563,172577,172581,172588,172621,172624,172626,172632,172635,172639,172641,172647,172652,172825,172829,172892,172896,172920,172924,172948],[10,170801,170797],{"id":170802},"_9-异常模块与包",[14,170804,170806],{"id":170805},"_91-什么是异常","9.1 什么是异常",[24,170808,170809],{},"异常是程序运行过程中出现的错误。",[24,170811,170812],{},"常见异常：",[457,170814,170815,170824],{},[460,170816,170817],{},[463,170818,170819,170822],{},[466,170820,170821],{},"异常",[466,170823,26059],{},[504,170825,170826,170836,170846,170855,170865,170875,170885,170895],{},[463,170827,170828,170833],{},[509,170829,170830],{},[94,170831,170832],{},"NameError",[509,170834,170835],{},"使用了未定义变量",[463,170837,170838,170843],{},[509,170839,170840],{},[94,170841,170842],{},"TypeError",[509,170844,170845],{},"类型不匹配",[463,170847,170848,170852],{},[509,170849,170850],{},[94,170851,154948],{},[509,170853,170854],{},"值不合法",[463,170856,170857,170862],{},[509,170858,170859],{},[94,170860,170861],{},"IndexError",[509,170863,170864],{},"列表索引越界",[463,170866,170867,170872],{},[509,170868,170869],{},[94,170870,170871],{},"KeyError",[509,170873,170874],{},"字典 key 不存在",[463,170876,170877,170882],{},[509,170878,170879],{},[94,170880,170881],{},"FileNotFoundError",[509,170883,170884],{},"文件不存在",[463,170886,170887,170892],{},[509,170888,170889],{},[94,170890,170891],{},"ZeroDivisionError",[509,170893,170894],{},"除数为 0",[463,170896,170897,170902],{},[509,170898,170899],{},[94,170900,170901],{},"ImportError",[509,170903,170904],{},"导入失败",[24,170906,15325],{},[87,170908,170910],{"className":30568,"code":170909,"language":30570,"meta":92,"style":92},"num = int(\"abc\")\n",[94,170911,170912],{"__ignoreMap":92},[97,170913,170914,170916,170918,170920,170922,170924],{"class":99,"line":100},[97,170915,155901],{"class":103},[97,170917,115],{"class":319},[97,170919,2573],{"class":370},[97,170921,323],{"class":103},[97,170923,155994],{"class":118},[97,170925,329],{"class":103},[24,170927,170928,170929,28575],{},"会触发 ",[94,170930,154948],{},[14,170932,170934],{"id":170933},"_92-为什么要处理异常","9.2 为什么要处理异常",[24,170936,170937],{},"如果不处理异常，程序会直接终止。",[24,170939,170940],{},"例如用户输入年龄：",[87,170942,170944],{"className":30568,"code":170943,"language":30570,"meta":92,"style":92},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[94,170945,170946,170964],{"__ignoreMap":92},[97,170947,170948,170950,170952,170954,170956,170958,170960,170962],{"class":99,"line":100},[97,170949,146660],{"class":103},[97,170951,115],{"class":319},[97,170953,2573],{"class":370},[97,170955,323],{"class":103},[97,170957,54005],{"class":370},[97,170959,323],{"class":103},[97,170961,152508],{"class":118},[97,170963,30687],{"class":103},[97,170965,170966,170968],{"class":99,"line":195},[97,170967,30605],{"class":370},[97,170969,155875],{"class":103},[24,170971,170972,170973,170976],{},"用户输入 ",[94,170974,170975],{},"abc","，程序就会报错退出。",[24,170978,170979],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,170981,170983],{"id":170982},"_93-try-except","9.3 try except",[24,170985,170986],{},"基础语法：",[87,170988,170990],{"className":30568,"code":170989,"language":30570,"meta":92,"style":92},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[94,170991,170992,170999,171004,171011],{"__ignoreMap":92},[97,170993,170994,170997],{"class":99,"line":100},[97,170995,170996],{"class":319},"try",[97,170998,3930],{"class":103},[97,171000,171001],{"class":99,"line":195},[97,171002,171003],{"class":103},"    可能出错的代码\n",[97,171005,171006,171009],{"class":99,"line":241},[97,171007,171008],{"class":319},"except",[97,171010,3930],{"class":103},[97,171012,171013],{"class":99,"line":1387},[97,171014,171015],{"class":103},"    出错后的处理代码\n",[24,171017,15325],{},[87,171019,171021],{"className":30568,"code":171020,"language":30570,"meta":92,"style":92},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[94,171022,171023,171029,171047,171053,171059],{"__ignoreMap":92},[97,171024,171025,171027],{"class":99,"line":100},[97,171026,170996],{"class":319},[97,171028,3930],{"class":103},[97,171030,171031,171033,171035,171037,171039,171041,171043,171045],{"class":99,"line":195},[97,171032,152500],{"class":103},[97,171034,115],{"class":319},[97,171036,2573],{"class":370},[97,171038,323],{"class":103},[97,171040,54005],{"class":370},[97,171042,323],{"class":103},[97,171044,152508],{"class":118},[97,171046,30687],{"class":103},[97,171048,171049,171051],{"class":99,"line":241},[97,171050,31489],{"class":370},[97,171052,155875],{"class":103},[97,171054,171055,171057],{"class":99,"line":1387},[97,171056,171008],{"class":319},[97,171058,3930],{"class":103},[97,171060,171061,171063,171065,171068],{"class":99,"line":1393},[97,171062,31489],{"class":370},[97,171064,323],{"class":103},[97,171066,171067],{"class":118},"\"年龄必须是数字\"",[97,171069,329],{"class":103},[24,171071,171072,171073,171075],{},"不建议裸写 ",[94,171074,171008],{},"，最好指定异常类型。",[87,171077,171079],{"className":30568,"code":171078,"language":30570,"meta":92,"style":92},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[94,171080,171081,171087,171105,171111,171119],{"__ignoreMap":92},[97,171082,171083,171085],{"class":99,"line":100},[97,171084,170996],{"class":319},[97,171086,3930],{"class":103},[97,171088,171089,171091,171093,171095,171097,171099,171101,171103],{"class":99,"line":195},[97,171090,152500],{"class":103},[97,171092,115],{"class":319},[97,171094,2573],{"class":370},[97,171096,323],{"class":103},[97,171098,54005],{"class":370},[97,171100,323],{"class":103},[97,171102,152508],{"class":118},[97,171104,30687],{"class":103},[97,171106,171107,171109],{"class":99,"line":241},[97,171108,31489],{"class":370},[97,171110,155875],{"class":103},[97,171112,171113,171115,171117],{"class":99,"line":1387},[97,171114,171008],{"class":319},[97,171116,152340],{"class":370},[97,171118,3930],{"class":103},[97,171120,171121,171123,171125,171127],{"class":99,"line":1393},[97,171122,31489],{"class":370},[97,171124,323],{"class":103},[97,171126,171067],{"class":118},[97,171128,329],{"class":103},[14,171130,171132],{"id":171131},"_94-捕获多个异常","9.4 捕获多个异常",[87,171134,171136],{"className":30568,"code":171135,"language":30570,"meta":92,"style":92},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[94,171137,171138,171144,171165,171185,171192,171200,171211,171220],{"__ignoreMap":92},[97,171139,171140,171142],{"class":99,"line":100},[97,171141,170996],{"class":319},[97,171143,3930],{"class":103},[97,171145,171146,171149,171151,171153,171155,171157,171159,171161,171163],{"class":99,"line":195},[97,171147,171148],{"class":103},"    nums ",[97,171150,115],{"class":319},[97,171152,52410],{"class":103},[97,171154,537],{"class":370},[97,171156,12626],{"class":103},[97,171158,398],{"class":370},[97,171160,12626],{"class":103},[97,171162,392],{"class":370},[97,171164,33436],{"class":103},[97,171166,171167,171170,171172,171174,171176,171178,171180,171183],{"class":99,"line":241},[97,171168,171169],{"class":103},"    index ",[97,171171,115],{"class":319},[97,171173,2573],{"class":370},[97,171175,323],{"class":103},[97,171177,54005],{"class":370},[97,171179,323],{"class":103},[97,171181,171182],{"class":118},"\"请输入索引:\"",[97,171184,30687],{"class":103},[97,171186,171187,171189],{"class":99,"line":1387},[97,171188,31489],{"class":370},[97,171190,171191],{"class":103},"(nums[index])\n",[97,171193,171194,171196,171198],{"class":99,"line":1393},[97,171195,171008],{"class":319},[97,171197,152340],{"class":370},[97,171199,3930],{"class":103},[97,171201,171202,171204,171206,171209],{"class":99,"line":1407},[97,171203,31489],{"class":370},[97,171205,323],{"class":103},[97,171207,171208],{"class":118},"\"索引必须是整数\"",[97,171210,329],{"class":103},[97,171212,171213,171215,171218],{"class":99,"line":1413},[97,171214,171008],{"class":319},[97,171216,171217],{"class":370}," IndexError",[97,171219,3930],{"class":103},[97,171221,171222,171224,171226,171229],{"class":99,"line":1504},[97,171223,31489],{"class":370},[97,171225,323],{"class":103},[97,171227,171228],{"class":118},"\"索引越界\"",[97,171230,329],{"class":103},[24,171232,171233],{},"多个异常使用相同处理逻辑：",[87,171235,171237],{"className":30568,"code":171236,"language":30570,"meta":92,"style":92},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[94,171238,171239,171245,171263,171276,171290],{"__ignoreMap":92},[97,171240,171241,171243],{"class":99,"line":100},[97,171242,170996],{"class":319},[97,171244,3930],{"class":103},[97,171246,171247,171249,171251,171253,171255,171257,171259,171261],{"class":99,"line":195},[97,171248,45783],{"class":103},[97,171250,115],{"class":319},[97,171252,2573],{"class":370},[97,171254,323],{"class":103},[97,171256,54005],{"class":370},[97,171258,323],{"class":103},[97,171260,155910],{"class":118},[97,171262,30687],{"class":103},[97,171264,171265,171267,171269,171271,171273],{"class":99,"line":241},[97,171266,31489],{"class":370},[97,171268,323],{"class":103},[97,171270,766],{"class":370},[97,171272,156160],{"class":319},[97,171274,171275],{"class":103}," num)\n",[97,171277,171278,171280,171282,171284,171286,171288],{"class":99,"line":1387},[97,171279,171008],{"class":319},[97,171281,1850],{"class":103},[97,171283,154948],{"class":370},[97,171285,12626],{"class":103},[97,171287,170891],{"class":370},[97,171289,30976],{"class":103},[97,171291,171292,171294,171296,171299],{"class":99,"line":1393},[97,171293,31489],{"class":370},[97,171295,323],{"class":103},[97,171297,171298],{"class":118},"\"输入不合法\"",[97,171300,329],{"class":103},[14,171302,171304],{"id":171303},"_95-获取异常信息","9.5 获取异常信息",[87,171306,171308],{"className":30568,"code":171307,"language":30570,"meta":92,"style":92},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[94,171309,171310,171316,171330,171341],{"__ignoreMap":92},[97,171311,171312,171314],{"class":99,"line":100},[97,171313,170996],{"class":319},[97,171315,3930],{"class":103},[97,171317,171318,171320,171322,171324,171326,171328],{"class":99,"line":195},[97,171319,45783],{"class":103},[97,171321,115],{"class":319},[97,171323,2573],{"class":370},[97,171325,323],{"class":103},[97,171327,155994],{"class":118},[97,171329,329],{"class":103},[97,171331,171332,171334,171336,171338],{"class":99,"line":241},[97,171333,171008],{"class":319},[97,171335,152340],{"class":370},[97,171337,64788],{"class":319},[97,171339,171340],{"class":103}," e:\n",[97,171342,171343,171345,171347,171349,171352,171354,171356,171358,171360],{"class":99,"line":1387},[97,171344,31489],{"class":370},[97,171346,323],{"class":103},[97,171348,374],{"class":319},[97,171350,171351],{"class":118},"\"出错了:",[97,171353,1216],{"class":370},[97,171355,395],{"class":103},[97,171357,1265],{"class":370},[97,171359,571],{"class":118},[97,171361,329],{"class":103},[24,171363,146571],{},[87,171365,171368],{"className":171366,"code":171367,"language":5378,"meta":92},[5376],"出错了:invalid literal for int() with base 10: 'abc'\n",[94,171369,171367],{"__ignoreMap":92},[14,171371,171373],{"id":171372},"_96-else和finally","9.6 else和finally",[24,171375,171376,171378],{},[94,171377,1893],{},"：没有异常时执行。",[24,171380,171381,171384],{},[94,171382,171383],{},"finally","：无论是否异常都会执行。",[87,171386,171388],{"className":30568,"code":171387,"language":30570,"meta":92,"style":92},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[94,171389,171390,171396,171414,171422,171432,171438,171459,171465],{"__ignoreMap":92},[97,171391,171392,171394],{"class":99,"line":100},[97,171393,170996],{"class":319},[97,171395,3930],{"class":103},[97,171397,171398,171400,171402,171404,171406,171408,171410,171412],{"class":99,"line":195},[97,171399,45783],{"class":103},[97,171401,115],{"class":319},[97,171403,2573],{"class":370},[97,171405,323],{"class":103},[97,171407,54005],{"class":370},[97,171409,323],{"class":103},[97,171411,155910],{"class":118},[97,171413,30687],{"class":103},[97,171415,171416,171418,171420],{"class":99,"line":241},[97,171417,171008],{"class":319},[97,171419,152340],{"class":370},[97,171421,3930],{"class":103},[97,171423,171424,171426,171428,171430],{"class":99,"line":1387},[97,171425,31489],{"class":370},[97,171427,323],{"class":103},[97,171429,153328],{"class":118},[97,171431,329],{"class":103},[97,171433,171434,171436],{"class":99,"line":1393},[97,171435,1893],{"class":319},[97,171437,3930],{"class":103},[97,171439,171440,171442,171444,171446,171449,171451,171453,171455,171457],{"class":99,"line":1407},[97,171441,31489],{"class":370},[97,171443,323],{"class":103},[97,171445,374],{"class":319},[97,171447,171448],{"class":118},"\"输入正确:",[97,171450,1216],{"class":370},[97,171452,1857],{"class":103},[97,171454,1265],{"class":370},[97,171456,571],{"class":118},[97,171458,329],{"class":103},[97,171460,171461,171463],{"class":99,"line":1413},[97,171462,171383],{"class":319},[97,171464,3930],{"class":103},[97,171466,171467,171469,171471,171474],{"class":99,"line":1504},[97,171468,31489],{"class":370},[97,171470,323],{"class":103},[97,171472,171473],{"class":118},"\"程序结束\"",[97,171475,329],{"class":103},[24,171477,171478,171480],{},[94,171479,171383],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171482,171484],{"id":171483},"_97-抛出异常","9.7 抛出异常",[24,171486,171487],{},"程序可以主动抛出异常。",[87,171489,171491],{"className":30568,"code":171490,"language":30570,"meta":92,"style":92},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[94,171492,171493,171502,171514,171527,171547,171551,171555],{"__ignoreMap":92},[97,171494,171495,171497,171500],{"class":99,"line":100},[97,171496,32137],{"class":319},[97,171498,171499],{"class":111}," set_age",[97,171501,161529],{"class":103},[97,171503,171504,171506,171508,171510,171512],{"class":99,"line":195},[97,171505,3292],{"class":319},[97,171507,15897],{"class":103},[97,171509,104],{"class":319},[97,171511,4284],{"class":370},[97,171513,3930],{"class":103},[97,171515,171516,171518,171520,171522,171525],{"class":99,"line":241},[97,171517,103616],{"class":319},[97,171519,152340],{"class":370},[97,171521,323],{"class":103},[97,171523,171524],{"class":118},"\"年龄不能为负数\"",[97,171526,329],{"class":103},[97,171528,171529,171531,171533,171535,171537,171539,171541,171543,171545],{"class":99,"line":1387},[97,171530,31489],{"class":370},[97,171532,323],{"class":103},[97,171534,374],{"class":319},[97,171536,162097],{"class":118},[97,171538,1216],{"class":370},[97,171540,70405],{"class":103},[97,171542,1265],{"class":370},[97,171544,571],{"class":118},[97,171546,329],{"class":103},[97,171548,171549],{"class":99,"line":1393},[97,171550,2591],{"emptyLinePlaceholder":249},[97,171552,171553],{"class":99,"line":1407},[97,171554,2591],{"emptyLinePlaceholder":249},[97,171556,171557,171560,171562,171564],{"class":99,"line":1413},[97,171558,171559],{"class":103},"set_age(",[97,171561,852],{"class":319},[97,171563,537],{"class":370},[97,171565,329],{"class":103},[24,171567,171568],{},"调用者可以捕获：",[87,171570,171572],{"className":30568,"code":171571,"language":30570,"meta":92,"style":92},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[94,171573,171574,171580,171591,171601],{"__ignoreMap":92},[97,171575,171576,171578],{"class":99,"line":100},[97,171577,170996],{"class":319},[97,171579,3930],{"class":103},[97,171581,171582,171585,171587,171589],{"class":99,"line":195},[97,171583,171584],{"class":103},"    set_age(",[97,171586,852],{"class":319},[97,171588,537],{"class":370},[97,171590,329],{"class":103},[97,171592,171593,171595,171597,171599],{"class":99,"line":241},[97,171594,171008],{"class":319},[97,171596,152340],{"class":370},[97,171598,64788],{"class":319},[97,171600,171340],{"class":103},[97,171602,171603,171605],{"class":99,"line":1387},[97,171604,31489],{"class":370},[97,171606,67183],{"class":103},[14,171608,171610],{"id":171609},"_98-自定义异常","9.8 自定义异常",[87,171612,171614],{"className":30568,"code":171613,"language":30570,"meta":92,"style":92},"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",[94,171615,171616,171630,171634,171638,171642,171650,171660,171671,171681,171685,171689,171695,171712,171723],{"__ignoreMap":92},[97,171617,171618,171620,171623,171625,171628],{"class":99,"line":100},[97,171619,14885],{"class":319},[97,171621,171622],{"class":111}," BalanceNotEnoughError",[97,171624,323],{"class":103},[97,171626,171627],{"class":370},"Exception",[97,171629,30976],{"class":103},[97,171631,171632],{"class":99,"line":195},[97,171633,149651],{"class":319},[97,171635,171636],{"class":99,"line":241},[97,171637,2591],{"emptyLinePlaceholder":249},[97,171639,171640],{"class":99,"line":1387},[97,171641,2591],{"emptyLinePlaceholder":249},[97,171643,171644,171646,171648],{"class":99,"line":1393},[97,171645,32137],{"class":319},[97,171647,150300],{"class":111},[97,171649,162926],{"class":103},[97,171651,171652,171654,171656,171658],{"class":99,"line":1407},[97,171653,3292],{"class":319},[97,171655,150256],{"class":103},[97,171657,1279],{"class":319},[97,171659,162703],{"class":103},[97,171661,171662,171664,171667,171669],{"class":99,"line":1413},[97,171663,103616],{"class":319},[97,171665,171666],{"class":103}," BalanceNotEnoughError(",[97,171668,150351],{"class":118},[97,171670,329],{"class":103},[97,171672,171673,171675,171677,171679],{"class":99,"line":1504},[97,171674,4281],{"class":319},[97,171676,162933],{"class":103},[97,171678,852],{"class":319},[97,171680,150289],{"class":103},[97,171682,171683],{"class":99,"line":1510},[97,171684,2591],{"emptyLinePlaceholder":249},[97,171686,171687],{"class":99,"line":1522},[97,171688,2591],{"emptyLinePlaceholder":249},[97,171690,171691,171693],{"class":99,"line":1804},[97,171692,170996],{"class":319},[97,171694,3930],{"class":103},[97,171696,171697,171699,171701,171704,171706,171708,171710],{"class":99,"line":1809},[97,171698,162604],{"class":103},[97,171700,115],{"class":319},[97,171702,171703],{"class":103}," withdraw(",[97,171705,631],{"class":370},[97,171707,12626],{"class":103},[97,171709,1914],{"class":370},[97,171711,329],{"class":103},[97,171713,171714,171716,171719,171721],{"class":99,"line":1815},[97,171715,171008],{"class":319},[97,171717,171718],{"class":103}," BalanceNotEnoughError ",[97,171720,31573],{"class":319},[97,171722,171340],{"class":103},[97,171724,171725,171727],{"class":99,"line":1820},[97,171726,31489],{"class":370},[97,171728,67183],{"class":103},[24,171730,171731],{},"入门阶段大多数情况使用内置异常即可。",[14,171733,171735],{"id":171734},"_99-traceback","9.9 traceback",[24,171737,171738],{},"调试时可以输出完整异常堆栈。",[87,171740,171742],{"className":30568,"code":171741,"language":30570,"meta":92,"style":92},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[94,171743,171744,171751,171755,171761,171771,171779],{"__ignoreMap":92},[97,171745,171746,171748],{"class":99,"line":100},[97,171747,30582],{"class":319},[97,171749,171750],{"class":103}," traceback\n",[97,171752,171753],{"class":99,"line":195},[97,171754,2591],{"emptyLinePlaceholder":249},[97,171756,171757,171759],{"class":99,"line":241},[97,171758,170996],{"class":319},[97,171760,3930],{"class":103},[97,171762,171763,171765,171767,171769],{"class":99,"line":1387},[97,171764,2176],{"class":370},[97,171766,323],{"class":103},[97,171768,155994],{"class":118},[97,171770,329],{"class":103},[97,171772,171773,171775,171777],{"class":99,"line":1393},[97,171774,171008],{"class":319},[97,171776,152340],{"class":370},[97,171778,3930],{"class":103},[97,171780,171781],{"class":99,"line":1407},[97,171782,171783],{"class":103},"    traceback.print_exc()\n",[24,171785,171786],{},"日志系统中常把异常堆栈记录到文件。",[14,171788,171790],{"id":171789},"_910-什么是模块","9.10 什么是模块",[24,171792,171793,171794,126167],{},"模块就是一个 ",[94,171795,146466],{},[24,171797,171798,171799,24808],{},"例如创建 ",[94,171800,171801],{},"my_math.py",[87,171803,171805],{"className":30568,"code":171804,"language":30570,"meta":92,"style":92},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[94,171806,171807,171815,171825,171829,171833,171842],{"__ignoreMap":92},[97,171808,171809,171811,171813],{"class":99,"line":100},[97,171810,32137],{"class":319},[97,171812,5400],{"class":111},[97,171814,151207],{"class":103},[97,171816,171817,171819,171821,171823],{"class":99,"line":195},[97,171818,4281],{"class":319},[97,171820,11060],{"class":103},[97,171822,801],{"class":319},[97,171824,151218],{"class":103},[97,171826,171827],{"class":99,"line":241},[97,171828,2591],{"emptyLinePlaceholder":249},[97,171830,171831],{"class":99,"line":1387},[97,171832,2591],{"emptyLinePlaceholder":249},[97,171834,171835,171837,171840],{"class":99,"line":1393},[97,171836,32137],{"class":319},[97,171838,171839],{"class":111}," sub",[97,171841,151207],{"class":103},[97,171843,171844,171846,171848,171850],{"class":99,"line":1407},[97,171845,4281],{"class":319},[97,171847,11060],{"class":103},[97,171849,852],{"class":319},[97,171851,151218],{"class":103},[24,171853,171854],{},"在另一个文件中导入：",[87,171856,171858],{"className":30568,"code":171857,"language":30570,"meta":92,"style":92},"import my_math\n\nprint(my_math.add(1, 2))\n",[94,171859,171860,171867,171871],{"__ignoreMap":92},[97,171861,171862,171864],{"class":99,"line":100},[97,171863,30582],{"class":319},[97,171865,171866],{"class":103}," my_math\n",[97,171868,171869],{"class":99,"line":195},[97,171870,2591],{"emptyLinePlaceholder":249},[97,171872,171873,171875,171878,171880,171882,171884],{"class":99,"line":241},[97,171874,30605],{"class":370},[97,171876,171877],{"class":103},"(my_math.add(",[97,171879,537],{"class":370},[97,171881,12626],{"class":103},[97,171883,398],{"class":370},[97,171885,30687],{"class":103},[14,171887,171889],{"id":171888},"_911-import导入","9.11 import导入",[48,171891,171893],{"id":171892},"_9111-导入模块","9.11.1 导入模块",[87,171895,171897],{"className":30568,"code":171896,"language":30570,"meta":92,"style":92},"import random\n\nprint(random.randint(1, 10))\n",[94,171898,171899,171905,171909],{"__ignoreMap":92},[97,171900,171901,171903],{"class":99,"line":100},[97,171902,30582],{"class":319},[97,171904,45518],{"class":103},[97,171906,171907],{"class":99,"line":195},[97,171908,2591],{"emptyLinePlaceholder":249},[97,171910,171911,171913,171916,171918,171920,171922],{"class":99,"line":241},[97,171912,30605],{"class":370},[97,171914,171915],{"class":103},"(random.randint(",[97,171917,537],{"class":370},[97,171919,12626],{"class":103},[97,171921,766],{"class":370},[97,171923,30687],{"class":103},[48,171925,171927],{"id":171926},"_9112-导入指定内容","9.11.2 导入指定内容",[87,171929,171931],{"className":30568,"code":171930,"language":30570,"meta":92,"style":92},"from random import randint\n\nprint(randint(1, 10))\n",[94,171932,171933,171944,171948],{"__ignoreMap":92},[97,171934,171935,171937,171939,171941],{"class":99,"line":100},[97,171936,30927],{"class":319},[97,171938,57980],{"class":103},[97,171940,30582],{"class":319},[97,171942,171943],{"class":103}," randint\n",[97,171945,171946],{"class":99,"line":195},[97,171947,2591],{"emptyLinePlaceholder":249},[97,171949,171950,171952,171955,171957,171959,171961],{"class":99,"line":241},[97,171951,30605],{"class":370},[97,171953,171954],{"class":103},"(randint(",[97,171956,537],{"class":370},[97,171958,12626],{"class":103},[97,171960,766],{"class":370},[97,171962,30687],{"class":103},[48,171964,171966],{"id":171965},"_9113-起别名","9.11.3 起别名",[87,171968,171970],{"className":30568,"code":171969,"language":30570,"meta":92,"style":92},"import random as rd\n\nprint(rd.randint(1, 10))\n",[94,171971,171972,171983,171987],{"__ignoreMap":92},[97,171973,171974,171976,171978,171980],{"class":99,"line":100},[97,171975,30582],{"class":319},[97,171977,57980],{"class":103},[97,171979,31573],{"class":319},[97,171981,171982],{"class":103}," rd\n",[97,171984,171985],{"class":99,"line":195},[97,171986,2591],{"emptyLinePlaceholder":249},[97,171988,171989,171991,171994,171996,171998,172000],{"class":99,"line":241},[97,171990,30605],{"class":370},[97,171992,171993],{"class":103},"(rd.randint(",[97,171995,537],{"class":370},[97,171997,12626],{"class":103},[97,171999,766],{"class":370},[97,172001,30687],{"class":103},[87,172003,172005],{"className":30568,"code":172004,"language":30570,"meta":92,"style":92},"from random import randint as rint\n\nprint(rint(1, 10))\n",[94,172006,172007,172023,172027],{"__ignoreMap":92},[97,172008,172009,172011,172013,172015,172018,172020],{"class":99,"line":100},[97,172010,30927],{"class":319},[97,172012,57980],{"class":103},[97,172014,30582],{"class":319},[97,172016,172017],{"class":103}," randint ",[97,172019,31573],{"class":319},[97,172021,172022],{"class":103}," rint\n",[97,172024,172025],{"class":99,"line":195},[97,172026,2591],{"emptyLinePlaceholder":249},[97,172028,172029,172031,172034,172036,172038,172040],{"class":99,"line":241},[97,172030,30605],{"class":370},[97,172032,172033],{"class":103},"(rint(",[97,172035,537],{"class":370},[97,172037,12626],{"class":103},[97,172039,766],{"class":370},[97,172041,30687],{"class":103},[48,172043,172045],{"id":172044},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[87,172047,172049],{"className":30568,"code":172048,"language":30570,"meta":92,"style":92},"from random import *\n",[94,172050,172051],{"__ignoreMap":92},[97,172052,172053,172055,172057,172059],{"class":99,"line":100},[97,172054,30927],{"class":319},[97,172056,57980],{"class":103},[97,172058,30582],{"class":319},[97,172060,172061],{"class":319}," *\n",[24,172063,172064],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172066,172068],{"id":172067},"_912-常用内置模块","9.12 常用内置模块",[48,172070,172072],{"id":172071},"_9121-random","9.12.1 random",[87,172074,172076],{"className":30568,"code":172075,"language":30570,"meta":92,"style":92},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[94,172077,172078,172084,172088,172102,172121],{"__ignoreMap":92},[97,172079,172080,172082],{"class":99,"line":100},[97,172081,30582],{"class":319},[97,172083,45518],{"class":103},[97,172085,172086],{"class":99,"line":195},[97,172087,2591],{"emptyLinePlaceholder":249},[97,172089,172090,172092,172094,172096,172098,172100],{"class":99,"line":241},[97,172091,30605],{"class":370},[97,172093,171915],{"class":103},[97,172095,537],{"class":370},[97,172097,12626],{"class":103},[97,172099,766],{"class":370},[97,172101,30687],{"class":103},[97,172103,172104,172106,172109,172111,172113,172115,172117,172119],{"class":99,"line":1387},[97,172105,30605],{"class":370},[97,172107,172108],{"class":103},"(random.choice([",[97,172110,150002],{"class":118},[97,172112,12626],{"class":103},[97,172114,151050],{"class":118},[97,172116,12626],{"class":103},[97,172118,159845],{"class":118},[97,172120,33333],{"class":103},[97,172122,172123,172125,172128,172130,172132,172134,172136,172138,172140,172142,172144,172146,172148,172150],{"class":99,"line":1393},[97,172124,30605],{"class":370},[97,172126,172127],{"class":103},"(random.sample([",[97,172129,537],{"class":370},[97,172131,12626],{"class":103},[97,172133,398],{"class":370},[97,172135,12626],{"class":103},[97,172137,392],{"class":370},[97,172139,12626],{"class":103},[97,172141,613],{"class":370},[97,172143,12626],{"class":103},[97,172145,639],{"class":370},[97,172147,112386],{"class":103},[97,172149,398],{"class":370},[97,172151,30687],{"class":103},[48,172153,172155],{"id":172154},"_9122-time","9.12.2 time",[87,172157,172159],{"className":30568,"code":172158,"language":30570,"meta":92,"style":92},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[94,172160,172161,172167,172171,172178,172186],{"__ignoreMap":92},[97,172162,172163,172165],{"class":99,"line":100},[97,172164,30582],{"class":319},[97,172166,32019],{"class":103},[97,172168,172169],{"class":99,"line":195},[97,172170,2591],{"emptyLinePlaceholder":249},[97,172172,172173,172175],{"class":99,"line":241},[97,172174,30605],{"class":370},[97,172176,172177],{"class":103},"(time.time())\n",[97,172179,172180,172182,172184],{"class":99,"line":1387},[97,172181,95255],{"class":103},[97,172183,537],{"class":370},[97,172185,329],{"class":103},[97,172187,172188,172190,172192,172195],{"class":99,"line":1393},[97,172189,30605],{"class":370},[97,172191,323],{"class":103},[97,172193,172194],{"class":118},"\"1秒后执行\"",[97,172196,329],{"class":103},[48,172198,172200],{"id":172199},"_9123-datetime","9.12.3 datetime",[87,172202,172204],{"className":30568,"code":172203,"language":30570,"meta":92,"style":92},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[94,172205,172206,172218,172222,172232,172239],{"__ignoreMap":92},[97,172207,172208,172210,172213,172215],{"class":99,"line":100},[97,172209,30927],{"class":319},[97,172211,172212],{"class":103}," datetime ",[97,172214,30582],{"class":319},[97,172216,172217],{"class":103}," datetime\n",[97,172219,172220],{"class":99,"line":195},[97,172221,2591],{"emptyLinePlaceholder":249},[97,172223,172224,172227,172229],{"class":99,"line":241},[97,172225,172226],{"class":103},"now ",[97,172228,115],{"class":319},[97,172230,172231],{"class":103}," datetime.now()\n",[97,172233,172234,172236],{"class":99,"line":1387},[97,172235,30605],{"class":370},[97,172237,172238],{"class":103},"(now)\n",[97,172240,172241,172243,172246,172249,172251,172254],{"class":99,"line":1393},[97,172242,30605],{"class":370},[97,172244,172245],{"class":103},"(now.strftime(",[97,172247,172248],{"class":118},"\"%Y-%m-",[97,172250,156805],{"class":370},[97,172252,172253],{"class":118}," %H:%M:%S\"",[97,172255,30687],{"class":103},[48,172257,172259],{"id":172258},"_9124-os","9.12.4 os",[87,172261,172263],{"className":30568,"code":172262,"language":30570,"meta":92,"style":92},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[94,172264,172265,172271,172275,172282],{"__ignoreMap":92},[97,172266,172267,172269],{"class":99,"line":100},[97,172268,30582],{"class":319},[97,172270,45495],{"class":103},[97,172272,172273],{"class":99,"line":195},[97,172274,2591],{"emptyLinePlaceholder":249},[97,172276,172277,172279],{"class":99,"line":241},[97,172278,30605],{"class":370},[97,172280,172281],{"class":103},"(os.getcwd())\n",[97,172283,172284,172286,172289,172292],{"class":99,"line":1387},[97,172285,30605],{"class":370},[97,172287,172288],{"class":103},"(os.listdir(",[97,172290,172291],{"class":118},"\".\"",[97,172293,30687],{"class":103},[48,172295,172297],{"id":172296},"_9125-sys","9.12.5 sys",[87,172299,172301],{"className":30568,"code":172300,"language":30570,"meta":92,"style":92},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[94,172302,172303,172310,172314,172321],{"__ignoreMap":92},[97,172304,172305,172307],{"class":99,"line":100},[97,172306,30582],{"class":319},[97,172308,172309],{"class":103}," sys\n",[97,172311,172312],{"class":99,"line":195},[97,172313,2591],{"emptyLinePlaceholder":249},[97,172315,172316,172318],{"class":99,"line":241},[97,172317,30605],{"class":370},[97,172319,172320],{"class":103},"(sys.version)\n",[97,172322,172323,172325],{"class":99,"line":1387},[97,172324,30605],{"class":370},[97,172326,172327],{"class":103},"(sys.path)\n",[14,172329,172331,172332,172334,172335,571],{"id":172330},"_913-if-name-main","9.13 if ",[469,172333,79994],{}," == \"",[469,172336,102242],{},[24,172338,172339,172340,172343],{},"模块被直接运行和被导入时，",[94,172341,172342],{},"__name__"," 的值不同。",[24,172345,172346,172347,24808],{},"创建 ",[94,172348,172349],{},"my_module.py",[87,172351,172353],{"className":30568,"code":172352,"language":30570,"meta":92,"style":92},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[94,172354,172355,172363,172373,172377,172381,172393],{"__ignoreMap":92},[97,172356,172357,172359,172361],{"class":99,"line":100},[97,172358,32137],{"class":319},[97,172360,5400],{"class":111},[97,172362,151207],{"class":103},[97,172364,172365,172367,172369,172371],{"class":99,"line":195},[97,172366,4281],{"class":319},[97,172368,11060],{"class":103},[97,172370,801],{"class":319},[97,172372,151218],{"class":103},[97,172374,172375],{"class":99,"line":241},[97,172376,2591],{"emptyLinePlaceholder":249},[97,172378,172379],{"class":99,"line":1387},[97,172380,2591],{"emptyLinePlaceholder":249},[97,172382,172383,172385,172387,172389,172391],{"class":99,"line":1393},[97,172384,1723],{"class":319},[97,172386,31410],{"class":370},[97,172388,101743],{"class":319},[97,172390,101746],{"class":118},[97,172392,3930],{"class":103},[97,172394,172395,172397,172399,172401,172403,172405],{"class":99,"line":1407},[97,172396,31489],{"class":370},[97,172398,166714],{"class":103},[97,172400,537],{"class":370},[97,172402,12626],{"class":103},[97,172404,398],{"class":370},[97,172406,30687],{"class":103},[24,172408,172409],{},"作用：",[138,172411,172412,172415],{},[70,172413,172414],{},"直接运行该文件时，执行测试代码。",[70,172416,172417],{},"被其他文件导入时，不执行测试代码。",[24,172419,172420],{},"这是写模块时很常用的习惯。",[14,172422,172424],{"id":172423},"_914-包","9.14 包",[24,172426,172427,172428,172431],{},"包是包含 ",[94,172429,172430],{},"__init__.py"," 的目录，用于组织多个模块。",[24,172433,172434],{},"目录结构：",[87,172436,172439],{"className":172437,"code":172438,"language":5378,"meta":92},[5376],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[94,172440,172438],{"__ignoreMap":92},[24,172442,172443],{},"导入：",[87,172445,172447],{"className":30568,"code":172446,"language":30570,"meta":92,"style":92},"from utils.file_utils import read_file\n",[94,172448,172449],{"__ignoreMap":92},[97,172450,172451,172453,172456,172458],{"class":99,"line":100},[97,172452,30927],{"class":319},[97,172454,172455],{"class":103}," utils.file_utils ",[97,172457,30582],{"class":319},[97,172459,172460],{"class":103}," read_file\n",[24,172462,172463,172465],{},[94,172464,172430],{}," 可以为空，也可以写包初始化逻辑。",[14,172467,172469],{"id":172468},"_915-第三方包","9.15 第三方包",[24,172471,172472,172473,172475],{},"第三方包通过 ",[94,172474,24020],{}," 安装。",[87,172477,172479],{"className":24011,"code":172478,"language":24013,"meta":92,"style":92},"pip install requests\n",[94,172480,172481],{"__ignoreMap":92},[97,172482,172483,172485,172487],{"class":99,"line":100},[97,172484,24020],{"class":111},[97,172486,24023],{"class":118},[97,172488,146212],{"class":118},[24,172490,172491],{},"使用：",[87,172493,172495],{"className":30568,"code":172494,"language":30570,"meta":92,"style":92},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[94,172496,172497,172503,172507,172522],{"__ignoreMap":92},[97,172498,172499,172501],{"class":99,"line":100},[97,172500,30582],{"class":319},[97,172502,146212],{"class":103},[97,172504,172505],{"class":99,"line":195},[97,172506,2591],{"emptyLinePlaceholder":249},[97,172508,172509,172512,172514,172517,172520],{"class":99,"line":241},[97,172510,172511],{"class":103},"response ",[97,172513,115],{"class":319},[97,172515,172516],{"class":103}," requests.get(",[97,172518,172519],{"class":118},"\"https:\u002F\u002Fwww.example.com\"",[97,172521,329],{"class":103},[97,172523,172524,172526],{"class":99,"line":1387},[97,172525,30605],{"class":370},[97,172527,172528],{"class":103},"(response.status_code)\n",[24,172530,172531],{},"查看已安装包：",[87,172533,172535],{"className":24011,"code":172534,"language":24013,"meta":92,"style":92},"pip list\n",[94,172536,172537],{"__ignoreMap":92},[97,172538,172539,172541],{"class":99,"line":100},[97,172540,24020],{"class":111},[97,172542,119139],{"class":118},[24,172544,172545],{},"导出项目依赖：",[87,172547,172548],{"className":24011,"code":146407,"language":24013,"meta":92,"style":92},[94,172549,172550],{"__ignoreMap":92},[97,172551,172552,172554,172556,172558],{"class":99,"line":100},[97,172553,24020],{"class":111},[97,172555,146416],{"class":118},[97,172557,26412],{"class":319},[97,172559,146421],{"class":118},[24,172561,172562],{},"安装项目依赖：",[87,172564,172565],{"className":24011,"code":146427,"language":24013,"meta":92,"style":92},[94,172566,172567],{"__ignoreMap":92},[97,172568,172569,172571,172573,172575],{"class":99,"line":100},[97,172570,24020],{"class":111},[97,172572,24023],{"class":118},[97,172574,119823],{"class":370},[97,172576,146421],{"class":118},[14,172578,172580],{"id":172579},"_916-模块搜索路径","9.16 模块搜索路径",[24,172582,172583,172584,172587],{},"Python 导入模块时会在 ",[94,172585,172586],{},"sys.path"," 中查找。",[87,172589,172591],{"className":30568,"code":172590,"language":30570,"meta":92,"style":92},"import sys\n\nfor path in sys.path:\n    print(path)\n",[94,172592,172593,172599,172603,172615],{"__ignoreMap":92},[97,172594,172595,172597],{"class":99,"line":100},[97,172596,30582],{"class":319},[97,172598,172309],{"class":103},[97,172600,172601],{"class":99,"line":195},[97,172602,2591],{"emptyLinePlaceholder":249},[97,172604,172605,172607,172610,172612],{"class":99,"line":241},[97,172606,3216],{"class":319},[97,172608,172609],{"class":103}," path ",[97,172611,26233],{"class":319},[97,172613,172614],{"class":103}," sys.path:\n",[97,172616,172617,172619],{"class":99,"line":1387},[97,172618,31489],{"class":370},[97,172620,169343],{"class":103},[24,172622,172623],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[24,172625,157737],{},[87,172627,172630],{"className":172628,"code":172629,"language":5378,"meta":92},[5376],"random.py\njson.py\ntime.py\n",[94,172631,172629],{"__ignoreMap":92},[24,172633,172634],{},"这些文件名可能导致导入异常。",[14,172636,172638],{"id":172637},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[24,172640,172434],{},[87,172642,172645],{"className":172643,"code":172644,"language":5378,"meta":92},[5376],"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",[94,172646,172644],{"__ignoreMap":92},[24,172648,172649,24808],{},[94,172650,172651],{},"utils\u002Ffile_utils.py",[87,172653,172655],{"className":30568,"code":172654,"language":30570,"meta":92,"style":92},"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",[94,172656,172657,172663,172673,172677,172681,172691,172701,172709,172715,172719,172746,172756,172760,172764,172774,172800],{"__ignoreMap":92},[97,172658,172659,172661],{"class":99,"line":100},[97,172660,30582],{"class":319},[97,172662,147205],{"class":103},[97,172664,172665,172667,172669,172671],{"class":99,"line":195},[97,172666,30927],{"class":319},[97,172668,108495],{"class":103},[97,172670,30582],{"class":319},[97,172672,108500],{"class":103},[97,172674,172675],{"class":99,"line":241},[97,172676,2591],{"emptyLinePlaceholder":249},[97,172678,172679],{"class":99,"line":1387},[97,172680,2591],{"emptyLinePlaceholder":249},[97,172682,172683,172685,172688],{"class":99,"line":1393},[97,172684,32137],{"class":319},[97,172686,172687],{"class":111}," read_json",[97,172689,172690],{"class":103},"(path):\n",[97,172692,172693,172696,172698],{"class":99,"line":1407},[97,172694,172695],{"class":103},"    path ",[97,172697,115],{"class":319},[97,172699,172700],{"class":103}," Path(path)\n",[97,172702,172703,172705,172707],{"class":99,"line":1413},[97,172704,3292],{"class":319},[97,172706,39120],{"class":319},[97,172708,169424],{"class":103},[97,172710,172711,172713],{"class":99,"line":1504},[97,172712,14943],{"class":319},[97,172714,52022],{"class":103},[97,172716,172717],{"class":99,"line":1510},[97,172718,2591],{"emptyLinePlaceholder":249},[97,172720,172721,172723,172725,172728,172730,172732,172734,172736,172738,172740,172742,172744],{"class":99,"line":1522},[97,172722,34368],{"class":319},[97,172724,146905],{"class":370},[97,172726,172727],{"class":103},"(path, ",[97,172729,146915],{"class":118},[97,172731,12626],{"class":103},[97,172733,146920],{"class":5407},[97,172735,115],{"class":319},[97,172737,146925],{"class":118},[97,172739,13905],{"class":103},[97,172741,31573],{"class":319},[97,172743,148267],{"class":5407},[97,172745,3930],{"class":103},[97,172747,172748,172750,172752,172754],{"class":99,"line":1804},[97,172749,14943],{"class":319},[97,172751,148278],{"class":103},[97,172753,45544],{"class":5407},[97,172755,329],{"class":103},[97,172757,172758],{"class":99,"line":1809},[97,172759,2591],{"emptyLinePlaceholder":249},[97,172761,172762],{"class":99,"line":1815},[97,172763,2591],{"emptyLinePlaceholder":249},[97,172765,172766,172768,172771],{"class":99,"line":1820},[97,172767,32137],{"class":319},[97,172769,172770],{"class":111}," write_json",[97,172772,172773],{"class":103},"(path, data):\n",[97,172775,172776,172778,172780,172782,172784,172786,172788,172790,172792,172794,172796,172798],{"class":99,"line":1834},[97,172777,34368],{"class":319},[97,172779,146905],{"class":370},[97,172781,172727],{"class":103},[97,172783,152090],{"class":118},[97,172785,12626],{"class":103},[97,172787,146920],{"class":5407},[97,172789,115],{"class":319},[97,172791,146925],{"class":118},[97,172793,13905],{"class":103},[97,172795,31573],{"class":319},[97,172797,148267],{"class":5407},[97,172799,3930],{"class":103},[97,172801,172802,172805,172807,172809,172811,172813,172815,172817,172819,172821,172823],{"class":99,"line":1839},[97,172803,172804],{"class":103},"        json.dump(data, ",[97,172806,45544],{"class":5407},[97,172808,12626],{"class":103},[97,172810,147251],{"class":5407},[97,172812,115],{"class":319},[97,172814,34177],{"class":370},[97,172816,12626],{"class":103},[97,172818,152126],{"class":5407},[97,172820,115],{"class":319},[97,172822,398],{"class":370},[97,172824,329],{"class":103},[24,172826,172827,24808],{},[94,172828,154721],{},[87,172830,172832],{"className":30568,"code":172831,"language":30570,"meta":92,"style":92},"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",[94,172833,172834,172845,172849,172862,172882],{"__ignoreMap":92},[97,172835,172836,172838,172840,172842],{"class":99,"line":100},[97,172837,30927],{"class":319},[97,172839,172455],{"class":103},[97,172841,30582],{"class":319},[97,172843,172844],{"class":103}," read_json, write_json\n",[97,172846,172847],{"class":99,"line":195},[97,172848,2591],{"emptyLinePlaceholder":249},[97,172850,172851,172853,172855,172858,172860],{"class":99,"line":241},[97,172852,159830],{"class":103},[97,172854,115],{"class":319},[97,172856,172857],{"class":103}," read_json(",[97,172859,151945],{"class":118},[97,172861,329],{"class":103},[97,172863,172864,172866,172868,172870,172872,172874,172876,172878,172880],{"class":99,"line":1387},[97,172865,170648],{"class":103},[97,172867,62863],{"class":118},[97,172869,51621],{"class":103},[97,172871,150002],{"class":118},[97,172873,12626],{"class":103},[97,172875,151586],{"class":118},[97,172877,51621],{"class":103},[97,172879,1308],{"class":370},[97,172881,165266],{"class":103},[97,172883,172884,172887,172889],{"class":99,"line":1393},[97,172885,172886],{"class":103},"write_json(",[97,172888,151945],{"class":118},[97,172890,172891],{"class":103},", students)\n",[14,172893,172895],{"id":172894},"_918-易错点","9.18 易错点",[138,172897,172898,172901,172906,172911,172914,172917],{},[70,172899,172900],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[70,172902,172903,172904,28575],{},"能指定异常类型就不要裸写 ",[94,172905,171008],{},[70,172907,172908,172910],{},[94,172909,171383],{}," 无论是否出错都会执行。",[70,172912,172913],{},"模块文件名不要和标准库重名。",[70,172915,172916],{},"导入自己写的模块时，要注意运行目录。",[70,172918,172919],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172921,172923],{"id":172922},"_919-本章练习","9.19 本章练习",[138,172925,172926,172929,172932,172938,172945],{},[70,172927,172928],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[70,172930,172931],{},"写函数读取文件，如果文件不存在则返回空字符串。",[70,172933,172346,172934,172937],{},[94,172935,172936],{},"math_utils.py","，实现加减乘除函数并导入使用。",[70,172939,172940,172941,172944],{},"创建一个 ",[94,172942,172943],{},"utils"," 包，把 JSON 读写函数放进去。",[70,172946,172947],{},"写一个程序，捕获除零异常和输入格式异常。",[231,172949,172950],{},"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":92,"searchDepth":195,"depth":195,"links":172952},[172953,172954,172955,172956,172957,172958,172959,172960,172961,172962,172963,172969,172976,172978,172979,172980,172981,172982,172983],{"id":170805,"depth":195,"text":170806},{"id":170933,"depth":195,"text":170934},{"id":170982,"depth":195,"text":170983},{"id":171131,"depth":195,"text":171132},{"id":171303,"depth":195,"text":171304},{"id":171372,"depth":195,"text":171373},{"id":171483,"depth":195,"text":171484},{"id":171609,"depth":195,"text":171610},{"id":171734,"depth":195,"text":171735},{"id":171789,"depth":195,"text":171790},{"id":171888,"depth":195,"text":171889,"children":172964},[172965,172966,172967,172968],{"id":171892,"depth":241,"text":171893},{"id":171926,"depth":241,"text":171927},{"id":171965,"depth":241,"text":171966},{"id":172044,"depth":241,"text":172045},{"id":172067,"depth":195,"text":172068,"children":172970},[172971,172972,172973,172974,172975],{"id":172071,"depth":241,"text":172072},{"id":172154,"depth":241,"text":172155},{"id":172199,"depth":241,"text":172200},{"id":172258,"depth":241,"text":172259},{"id":172296,"depth":241,"text":172297},{"id":172330,"depth":195,"text":172977},"9.13 if name == \"main\"",{"id":172423,"depth":195,"text":172424},{"id":172468,"depth":195,"text":172469},{"id":172579,"depth":195,"text":172580},{"id":172637,"depth":195,"text":172638},{"id":172894,"depth":195,"text":172895},{"id":172922,"depth":195,"text":172923},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170797,"description":246},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172990,"title":172991,"body":172992,"description":173155,"extension":247,"meta":173156,"navigation":249,"path":173157,"seo":173158,"stem":173159,"__hash__":173160},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172993,"toc":173150},[172994,172997,173000,173003,173014,173016,173090,173093,173096,173099,173102,173105,173108,173111,173114,173117,173120],[10,172995,172991],{"id":172996},"python教程",[24,172998,172999],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[24,173001,173002],{},"建议学习环境：",[138,173004,173005,173008,173011],{},[70,173006,173007],{},"Python 版本：Python 3.10 及以上。",[70,173009,173010],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[70,173012,173013],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173015,117262],{"id":117262},[138,173017,173018,173024,173030,173036,173042,173048,173054,173060,173066,173072,173078,173084],{},[70,173019,173020],{},[558,173021,173023],{"href":173022},".\u002Fch1-Python","Python环境与第一个程序",[70,173025,173026],{},[558,173027,173029],{"href":173028},".\u002Fch2","基础语法、变量与字符串",[70,173031,173032],{},[558,173033,173035],{"href":173034},".\u002Fch3","判断语句",[70,173037,173038],{},[558,173039,173041],{"href":173040},".\u002Fch4","循环语句",[70,173043,173044],{},[558,173045,173047],{"href":173046},".\u002Fch5","函数基础",[70,173049,173050],{},[558,173051,173053],{"href":173052},".\u002Fch6","数据容器",[70,173055,173056],{},[558,173057,173059],{"href":173058},".\u002Fch7","函数进阶",[70,173061,173062],{},[558,173063,173065],{"href":173064},".\u002Fch8","文件操作",[70,173067,173068],{},[558,173069,173071],{"href":173070},".\u002Fch9","异常、模块与包",[70,173073,173074],{},[558,173075,173077],{"href":173076},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[70,173079,173080],{},[558,173081,173083],{"href":173082},".\u002Fch11","面向对象基础",[70,173085,173086],{},[558,173087,173089],{"href":173088},".\u002Fch12","综合案例与复习路线",[14,173091,173092],{"id":173092},"学习路线",[24,173094,173095],{},"第一阶段：能运行程序。",[24,173097,173098],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[24,173100,173101],{},"第二阶段：能组织数据。",[24,173103,173104],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[24,173106,173107],{},"第三阶段：能封装逻辑。",[24,173109,173110],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[24,173112,173113],{},"第四阶段：能做小项目。",[24,173115,173116],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173118,173119],{"id":173119},"参考资料",[138,173121,173122,173129,173136,173143],{},[70,173123,173124,173125],{},"黑马程序员 Python 入门教程推荐：",[558,173126,173127],{"href":173127,"rel":173128},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24054],[70,173130,173131,173132],{},"Python 官方中文教程：",[558,173133,173134],{"href":173134,"rel":173135},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24054],[70,173137,173138,173139],{},"Python 标准库文档：",[558,173140,173141],{"href":173141,"rel":173142},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24054],[70,173144,173145,173146],{},"pyecharts 文档：",[558,173147,173148],{"href":173148,"rel":173149},"https:\u002F\u002Fpyecharts.org\u002F",[24054],{"title":92,"searchDepth":195,"depth":195,"links":173151},[173152,173153,173154],{"id":117262,"depth":195,"text":117262},{"id":173092,"depth":195,"text":173092},{"id":173119,"depth":195,"text":173119},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23567},"\u002Fwiki\u002F2024-10-10-python",{"title":172991,"description":173155},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331438889]